Arbejd med filer i Excel med VBA

I denne guide vil jeg samle nogle af de ting du kan med filer i VBA. VBA er nemlig god til at arbejde med filer.
VBA kan sagtens fra Excel gøre en del med filer og mapper. Du kan oprette filer, åbne filer, slette filer og flytte filer. Nogle af koderne til disse ting vil jeg samle i denne artikel. Hvis du synes der er noget der mangler er du velkommen til at skrive en kommentar. Se også denne artikel om at arbejde med mapper i VBA.
Bemærk at du kun kan arbejde med filer i Excel til Windows. Dette skyldes at FileSystemObject, som skal bruges til at arbejde med filer, er en del af Windows.

Læs en fil linje for linje

Denne kode læser en tekstfil, linje for linje. Koden kan du så udbygge, så der kigges efter bestemte ting og handles herudfra. Men her er en grundkode.

Dim path As String
path = "C:\Users\Bruger\Documents\Test\File.txt"
If Dir(path) <> "" Then
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, MyFile, Filename, TextLine
Set fso = CreateObject("Scripting.FileSystemObject")
Filename = path
Set MyFile = fso.OpenTextFile(Filename, ForReading)
Dim result As String
result = ""
Dim resultarray() As String
Do While MyFile.AtEndOfStream <> True
        TextLine = MyFile.ReadLine
        resultarray = Split(TextLine, ";")   
        result = resultarray(1)
Loop
MyFile.Close
End if

Koden Dir(path) tjekker om filen eksisterer og kun hvis den gør, begynder den at prøve at læse i filen. Ellers læser den i tekstfilen, linje for linje, og splitter hver linje op efter tegnet “;”. Dette skaber et array og nummer 2 værdi i det array gemmes i variablen result. Det betyder at denne funktion finder værdi nummer to på den sidste linje.

Skriv til en fil

Denne kode skriver noget tekst til en tekstfil.

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile As Object
Set oFile = fso.CreateTextFile("C:\Users\Bruger\Documents\Test\File.txt")
oFile.WriteLine "Her er en linje"
oFile.Close
Set fso = Nothing
Set oFile = Nothing

Denne opretter altså en fil der hedder File.txt og tilføjer linjen “Her er en linje”.

Tæl antallet af linjer i en fil

Hvis du vil tælle antallet af linjer i en tekstfil, kan du bruge denne kode:

Private Function CountLines(ByVal Filename As String) As Integer
Dim buff() As Byte
Dim hF As Integer
Dim i As Long, n As Long
hF = FreeFile(0)
Open Filename For Binary Access Read As #hF
ReDim buff(LOF(hF) - 1)
Get #hF, , buff()
Close #hF
For i = 0 To UBound(buff)
If buff(i) = 13 Then n = n + 1
Next
CountLines = n
End Function

Kopier en fil

Med denne kode kan du kopiere en fil:

Dim sSFolder As String
sSFolder = "C:\Users\Bruger\Documents\File.txt"
Dim sDFolder As String
sDFolder = "C:\Users\Bruger\Documents\Test\File.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile sSFolder, sDFolder, True
Set fso = Nothing

Dette kopierer altså filen File.txt fra C:\Users\Bruger\Documents\ til C:\Users\Bruger\Documents\Test\. Hvis filen findes allerede overskrives den (det er det sidste argument i koden fso.CopyFile.

Slet en fil

Hvis du bare skal slette en enkelt fil, anvender du koden:

Dim strChosenFolder As String
strChosenFolder = "C:\Users\Bruger\Documents\Test\"
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile strChosenFolder & "Fil.txt"

Slet alle filer i en mappe

Først vil jeg vise dig hvordan du sletter samtlige filer i en mappe. Her bruger du koden:

Set wb = ActiveWorkbook
Set Sheetname = wb.Sheets("Ark1")
myFolder = "C:\Users\Bruger\Documents\Test"
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder(myFolder)
For Each Filename In fldr.Files
    Filename.Delete True
Next

Dette vil altså slette alle filer i mappen “C:\Users\Bruger\Documents\Test”.

Indlæs filnavne

Med denne kode vil

Dim filetype As String
filetype = "jpg"
Dim path As String
path = "C:\Users\Bruger\Documents\"
vFile = Dir(path & "*." & filetype)
Dim Fileopened As String
Do While vFile <> ""
ListBox1.AddItem vFile
vFile = Dir
Loop

Koden kigger altså efter filer af typen .jpg i mappen “C:\Users\Bruger\Documents\” og indlæser deres filnavne i den listbox der hedder “ListBox1. Her kan du jo så efterfølgende gøre således, at hvis en bruger klikker på et filnavn indlæses billedet i en billedkomponent. Det kan du gøre med koden:

Image1.Picture = LoadPicture(path & ListBox1.Value)

Hvor Image1 er billedkomponenten.

0 0 votes
Article Rating

Andreas Andersen

Forfatter og grundlægger af IT-blogger.dk, der har blogget om IT-emner siden 2012. Findes på Mastodon på @aphandersen@ansico.dk

You may also like...

Abonner
Giv besked ved
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x