Skrive til og læse fra eksterne filer

Denne artikel giver et eksempel på, hvordan man ved hjælp af VBA kan skrive til og læse fra en ekstern tekstfil. I det konkrete eksempel var ønsket, at man skulle kunne skrive et tal i en fil. Dette skulle så kunne aflæses, og bruges i en eller anden sammenhæng, hvorefter tallet skulle tillægges én, og det nye tal skrives tilbage. Dette kan gøres med den nedenstående kode:

Sub Filnummer()

    Dim MyNumber As Long

    On Error GoTo errhand:
    Open "c:\test\Nummerfil.txt" For Input As #1
    Input #1, MyNumber
    Close #1
' Kode, der anvender værdien af MyNumber anbringes her.

out:
    Open "c:\test\Nummerfil.txt" For Output As #1
    Write #1, MyNumber + 1
    Close #1

    Exit Sub

errhand:
    Select Case Err.Number
        Case Is = 53
            GoTo out:
        Case Is = 76
            MkDir "C:\test"
            GoTo out
        Case Else
            MsgBox Err.Number & " " & Err.Description
    End Select

End Sub

Filens navn er jer Nummerfil.txt og den er gemt i mappen "C:\test". Findes mappen og/eller filen ikke, vil de blive oprettet første gang makroen køres.

Den første del af makroen åbner filen, og indlæser det, der står i den i variablen MyNumber. Derefter lukkes filen igen. Denne værdi. kan nu bruges til det formål, den har været gemt til. Findes filen ikke, vil makroen oprette den, og findes heller ikke mappen, vil denne blive oprettet, og dernæst filen.  Dette håndteres af fejlhåndteringsrutinens første to Case sætninger. Fejlnummer 53 fortæller at filen ikke findes, hvorefter makroen går til anden del, hvor filen så oprettes. Fejl 76 fortæller at stien er forkert, altså at mappen ikke findes. Fejlhåndteringsrutinen oprettet så mappen i den angivne sti, og fortsætter derefter til anden del, hvor filen oprettes.

Den anden del af makroen åbner filen (findes den ikke oprettes den automatisk). Derefter skrives den nye værdi af MyNumber ned i filen, som lukkes igen.

Udtrykket Open, som åbner filen, har nogle parametre, som skal med. Først og fremmest sti og navn på den fil, der skal åbnes. Angives ingen sti, forventes filen at ligge i standardfilplaceringen, typisk Dokumenter. For Input Input fortæller at filen skal åbnes, for at blive aflæst. As #1 fortæller at filen skal åbnes som nummer 1. Der kan åbnes op til 511 filer, hver med sit eget nummer. Vil man vide, hvilket nummer, der er det næste ledige, kan man bruge funktionen FreeFile. Skal jeg åbne flere filer, kan jeg altså gøre det, uden at skulle nummerere dem alle hver for sig.

Denne løkke vil fx åbne fem filer, nummereret 2 til 6 og skrive det samme tal i hver af disse i disse:

For i = 2 To 6
    nextfile = FreeFile
    Open "c:\test\Nummerfil" & i & ".txt" For Output As #nextfile
    Write #nextfile, mynumber + 1
    Close #nextfile
Next i

Det er vigtigt at huske at alle filer skal lukkes igen, før de kan genåbnes til et andet mode. I ovenstående eksempel bruges Open For Input og Open For Output. Sidstnævnte overskriver den værdi, der står i filen med den værdi, der specificeres i Write sætningen. Jeg kunne også have have brugt Open For Append. I så fald var den nye værdi blevet tilføjet i en ny linje i filen i stedet for at overskrive den oprindelige værdi*. Der er også andre muligheder, men dem kan du selv læse om i hjælpe til Excel, lige som du også kan læse om de øvrige parametre, som Open kan bruge, fx låsning og om der kun skal gives læseadgang osv.

* Skal man aflæse flere linjer med Input, må man lave en løkke, der læser alle linjerne igennem. Det kan gøres med noget i denne stil:

Do While Not EOF(1)
    Input #1, MyNumber
' gør noget med data her
Loop

EOF står for End of File.

- Retur til makroer -
- Retur til Excel -