Gå til innhold

Hvordan referere til den ene av to arbeidsbøker?


Anbefalte innlegg

Jeg har mange Excelbøker, laget fra en mal, som har forskjellige filnavn alt etter som hva de er lagret som. Jeg skal i vba koden, som kodes i malen, referere til den boken som for øyeblikket er åpnet. Jeg skal kopiere over ting fra denne boken til en ny bok.

Den nye boken har samme filnavn hver gang, så det er ikke noe problem. Problemet er hvordan å få kodet noe som kan referere til den første boken som har forskjellige filnavn hele tiden?

Malen er en fakturamal jeg har lagd, når fakturaen er skrevet blir den lagret med et nummer og navn som er forskjellig hver gang. Det er når jeg åpner en av disse og skal kjøre en kode som kopierer en del ting fra denne boken og over i en ny jeg ikke vet hvordan jeg skal kode det. Nå har jeg kodet det som "Faktura0" og må derfor forandre filnavnet til dette før jeg åpner den aktuelle boken for å kjøre koden. Svært tungvindt for å si det mildt!

Dette er mitt først innlegg i noe forum noensinne, håper det er sånn passelig forståelig.

På forhånd takk for all hjelp!

Lenke til kommentar
Videoannonse
Annonse

Betyr dette at den filen du til enhver til vil referere til er den nyeste av mulige valgmuligheter? I så fall burde det holde med følgende prosedyre:

 

Public Function FindNewest(ByVal sPath As String, sExtension As String, Optional Flags As VbFileAttribute = vbNormal) As String

 

    Dim sFile As String, sNewest As String

   

    ' Forsikre oss om at mappestien er gyldig

    sPath = sPath & IIf(Right(sPath, 1) = "\", vbNullString, "\")

   

    ' Vi finner først den første filen i mappen

    sFile = Dir(sPath, Flags)

   

    ' Anta i førstingen at dette er den nyeste filen

    sNewest = sFile

 

    ' Finn filer inntil enden av mappen er nådd

    Do Until LenB(sFile) = 0

   

        ' Se først om filen korresponderer med etternavnuttrykket

        If sFile Like sExtension Then

   

            ' Se om denne filen er nyere enn den antatte fil

            If FileDateTime(sPath & sNewest) < FileDateTime(sPath & sFile) Then

           

                ' Bruk denne fil i stedet

                sNewest = sFile

           

            End If

   

        End If

       

        ' Finn den neste filen (dersom igjen filer gjenstår, er resultatet tomt)

        sFile = Dir

    Loop

   

    ' Returner den nyeste filen i mappen

    FindNewest = sPath & sNewest

 

End Function

 

Dersom du skal finne den nyeste Excel-filen i en gitt mappe, benyttes følgende kode:

 

' Finn den nyeste Excel-filen i vår mappe

sFile = FindNewest("C:\En mappe\En undermappe\Excel-filer\", "*.xls")

 

Om det skulle være nødvendig å begrense søket, eksempelvis til kun Excel-filer som begynner med Faktura, kan noe slikt benyttes:

 

' Finn den nyeste Excel-filen i vår mappe

sFile = FindNewest("C:\En mappe\En undermappe\Excel-filer\", "Faktura*.xls")

Lenke til kommentar

Takker for interessen, har nok ikke forklart meg godt nok. Jeg har en faktura mal (.xlt), når jeg bruker den lagrer jeg en kopi (.xls) med navn 01 Andersen, 02 Pettersen osv.

Når jeg som byggmester skal fakturere en á-konto regning (del regning) fra denne kopien som kan være den 6. siste eller nest siste, det er helt tilfeldig, så finner jeg den lett i utforsker og åpner den selv derfra. Deretter trykker jeg på en á-konto knapp som starter en kode som åpner en ny á-konto mal, den heter faktura.xlt.

"Faktura.xlt" er enkelt å referere til i koden når denne skal kopiere over noe innhold til "Faktura.xlt". Problemet er hvordan referer jeg til "01 Andersen", "02 Pettersen" eller "22 Olsen" alt etter hvem jeg åpner for å fakturere en á-konto regning til. Har hitil måttet forandre navnet fra f.eks "01 Andersen" til "Faktura0" før jeg åpner den aktuelle fila.

Jeg har i koden brukt "Faktura0" for f.eks "02 Pettersen" som det kopieres fra og "Faktura.xlt" for den nye malen det limes inn i.

Må finne en eller annen kode som kan referere til filnavnet på boka som er aktiv i det jeg trykker på á-konto knappen som er i den samme boka. (f.eks "02 Pettersen")

Håper dette avklarer litt.

Takker så mye for all hjelp!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...