VBA bestand lezen en schrijven: tekstbestanden (2026)
Met VBA File I/O (Visual Basic for Applications) kun je tekstbestanden lezen en schrijven vanuit Excel. Gebruik de Open-statement in combinatie met Input, Output of Append mode om gegevens te importeren, exporteren of logbestanden bij te houden.
Laatst bijgewerkt: januari 2026
Wat is VBA File I/O?
VBA File I/O (Input/Output) zijn de technieken waarmee je externe bestanden benadert vanuit Excel-macro’s. Dit is essentieel voor:
- Data importeren uit tekstbestanden (.txt, .csv)
- Rapporten exporteren naar externe bestanden
- Logbestanden bijhouden voor foutopsporing
- Configuratiebestanden uitlezen
De basis is de Open-statement die een bestand opent voor lezen, schrijven of toevoegen.
Syntaxis:
Open bestandspad For modus As #bestandsnummer
| Onderdeel | Uitleg |
|---|---|
| bestandspad | Volledig pad naar het bestand (bijv. “C:\Data\test.txt”) |
| modus | Input (lezen), Output (schrijven), Append (toevoegen) |
| bestandsnummer | Uniek nummer (1-511) om het bestand te identificeren |
Als je nog niet eerder met VBA hebt gewerkt, bekijk dan eerst onze VBA voor beginners handleiding.
VBA bestand lezen stap-voor-stap
Stap 1: Open de VBA-editor
- Windows: Druk op
Alt + F11om de Visual Basic Editor te openen - Mac: Ga naar Extra > Macro > Visual Basic Editor
Stap 2: Voeg een nieuwe module toe
- Klik met de rechtermuisknop op je werkmap in het Projectvenster
- Kies Invoegen > Module
- Er opent een leeg codevenster
Stap 3: Schrijf code om een tekstbestand te lezen
Gebruik deze basis-code om een tekstbestand regel voor regel in te lezen:
Sub LeesBestand()
Dim bestandspad As String
Dim bestandsnr As Integer
Dim regel As String
Dim rijNr As Long
' Pad naar je bestand
bestandspad = "C:\Data\mijnbestand.txt"
' Vraag een vrij bestandsnummer op
bestandsnr = FreeFile
' Open het bestand voor lezen
Open bestandspad For Input As #bestandsnr
rijNr = 1
' Lees elke regel tot het einde
Do Until EOF(bestandsnr)
Line Input #bestandsnr, regel
Cells(rijNr, 1).Value = regel
rijNr = rijNr + 1
Loop
' Sluit het bestand
Close #bestandsnr
MsgBox "Bestand ingelezen!", vbInformation
End Sub
Stap 4: Voer de macro uit
- Windows: Druk op
F5of klik op de groene afspeelknop - Mac: Klik op Uitvoeren > Sub/UserForm uitvoeren
De inhoud van het tekstbestand verschijnt nu in kolom A van je werkblad.
Wil je meer leren over het werken met cellen in VBA? Bekijk dan VBA Bereiken selecteren.
VBA bestand schrijven stap-voor-stap
Een nieuw bestand aanmaken (Output)
Sub SchrijfBestand()
Dim bestandspad As String
Dim bestandsnr As Integer
Dim i As Long
bestandspad = "C:\Data\uitvoer.txt"
bestandsnr = FreeFile
' Open voor schrijven (overschrijft bestaand bestand!)
Open bestandspad For Output As #bestandsnr
' Schrijf gegevens uit kolom A
For i = 1 To 10
Print #bestandsnr, Cells(i, 1).Value
Next i
Close #bestandsnr
MsgBox "Bestand opgeslagen!", vbInformation
End Sub
Toevoegen aan bestaand bestand (Append)
Sub VoegToe()
Dim bestandspad As String
Dim bestandsnr As Integer
bestandspad = "C:\Data\log.txt"
bestandsnr = FreeFile
' Append voegt toe zonder te overschrijven
Open bestandspad For Append As #bestandsnr
Print #bestandsnr, Now & " - Nieuwe logentry"
Close #bestandsnr
End Sub
Dit is handig voor het bijhouden van logbestanden of het toevoegen van data aan bestaande exports.
Open statement modi uitgelegd
| Modus | Functie | Bestand bestaat niet? |
|---|---|---|
| Input | Alleen lezen | Foutmelding |
| Output | Schrijven (overschrijft) | Maakt nieuw bestand |
| Append | Toevoegen aan einde | Maakt nieuw bestand |
| Binary | Binair lezen/schrijven | Afhankelijk van Access |
| Random | Willekeurige toegang | Afhankelijk van Access |
Input-functies vergelijken
| Functie | Gebruik | Voorbeeld |
|---|---|---|
| Line Input # | Leest hele regel tot Enter | Line Input #1, tekst |
| Input # | Leest komma-gescheiden waarden | Input #1, a, b, c |
| Input() | Leest exact aantal tekens | tekst = Input(100, #1) |
CSV-bestand lezen met VBA
CSV-bestanden (Comma Separated Values) kun je efficiënt inlezen met de Split-functie:
Sub LeesCSV()
Dim bestandspad As String
Dim bestandsnr As Integer
Dim regel As String
Dim velden() As String
Dim rijNr As Long
Dim kolNr As Integer
bestandspad = "C:\Data\data.csv"
bestandsnr = FreeFile
Open bestandspad For Input As #bestandsnr
rijNr = 1
Do Until EOF(bestandsnr)
Line Input #bestandsnr, regel
' Split op puntkomma (Nederlandse CSV) of komma
velden = Split(regel, ";")
For kolNr = 0 To UBound(velden)
Cells(rijNr, kolNr + 1).Value = velden(kolNr)
Next kolNr
rijNr = rijNr + 1
Loop
Close #bestandsnr
End Sub
Let op: Nederlandse Excel gebruikt standaard puntkomma (;) als scheidingsteken in CSV-bestanden.
Geavanceerde technieken
Controleren of bestand bestaat
Function BestandBestaat(pad As String) As Boolean
BestandBestaat = (Dir(pad) <> "")
End Function
Sub VeiligeLezing()
Dim pad As String
pad = "C:\Data\test.txt"
If BestandBestaat(pad) Then
' Lees bestand...
Else
MsgBox "Bestand niet gevonden!", vbExclamation
End If
End Sub
Foutafhandeling toevoegen
Voor robuuste code is VBA foutafhandeling essentieel:
Sub VeiligLezen()
On Error GoTo Foutmelding
Dim bestandsnr As Integer
bestandsnr = FreeFile
Open "C:\Data\test.txt" For Input As #bestandsnr
' ... verwerk bestand ...
Close #bestandsnr
Exit Sub
Foutmelding:
MsgBox "Fout: " & Err.Description, vbCritical
If bestandsnr > 0 Then Close #bestandsnr
End Sub
Bestandsdialoog gebruiken
Laat de gebruiker een bestand kiezen:
Sub KiesEnLees()
Dim fd As FileDialog
Dim bestandspad As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Title = "Selecteer een tekstbestand"
fd.Filters.Add "Tekstbestanden", "*.txt;*.csv"
If fd.Show = -1 Then
bestandspad = fd.SelectedItems(1)
' Lees het geselecteerde bestand...
End If
End Sub
Veelgemaakte fouten
Fout 1: Bestand niet sluiten
Probleem: Je vergeet Close #bestandsnr toe te voegen, waardoor het bestand vergrendeld blijft.
Oplossing: Sluit altijd elk geopend bestand met Close. Gebruik foutafhandeling om te garanderen dat bestanden worden gesloten, zelfs bij fouten:
On Error GoTo Opruimen
' ... code ...
Opruimen:
Close #bestandsnr
End Sub
Fout 2: Verkeerde modus gebruiken
Probleem: Je probeert te lezen met Output-modus of te schrijven met Input-modus.
Oplossing: Gebruik de juiste modus:
– Input = alleen lezen
– Output = schrijven (overschrijft!)
– Append = toevoegen
Fout 3: Bestandspad met backslashes in strings
Probleem: Je gebruikt enkele backslashes in een string, wat problemen kan veroorzaken.
Oplossing: In VBA kun je gewoon enkele backslashes gebruiken (anders dan in sommige andere talen). Maar controleer wel dat het pad correct is:
' Goed
bestandspad = "C:\Users\Jan\Documents\data.txt"
' Nog beter: gebruik variabelen
bestandspad = ThisWorkbook.Path & "\data.txt"
Fout 4: EOF niet controleren
Probleem: Je leest voorbij het einde van het bestand, wat een fout veroorzaakt.
Oplossing: Gebruik altijd EOF() (End Of File) om te controleren of er nog data is:
Do Until EOF(bestandsnr)
Line Input #bestandsnr, regel
Loop
Fout 5: FreeFile niet gebruiken
Probleem: Je gebruikt een hardcoded bestandsnummer (bijv. #1) dat al in gebruik kan zijn.
Oplossing: Gebruik altijd FreeFile om een beschikbaar nummer te krijgen:
Dim nr As Integer
nr = FreeFile ' Geeft eerste vrije nummer
Open "test.txt" For Input As #nr
Praktijkvoorbeelden
Voorbeeld 1: Logbestand bijhouden
Sub SchrijfLog(bericht As String)
Dim nr As Integer
nr = FreeFile
Open ThisWorkbook.Path & "\log.txt" For Append As #nr
Print #nr, Format(Now, "yyyy-mm-dd hh:mm:ss") & " | " & bericht
Close #nr
End Sub
' Gebruik:
Call SchrijfLog("Macro gestart")
Call SchrijfLog("Bewerking voltooid")
Voorbeeld 2: Configuratie uitlezen
Sub LaadConfig()
Dim nr As Integer, regel As String
Dim delen() As String
nr = FreeFile
Open ThisWorkbook.Path & "\config.ini" For Input As #nr
Do Until EOF(nr)
Line Input #nr, regel
If InStr(regel, "=") > 0 Then
delen = Split(regel, "=")
' Sla op in Named Range of variabele
Range(delen(0)).Value = delen(1)
End If
Loop
Close #nr
End Sub
Voorbeeld 3: Meerdere bestanden verwerken
Sub VerwerkmapBestanden()
Dim map As String, bestand As String
Dim nr As Integer
map = "C:\Data\"
bestand = Dir(map & "*.txt")
Do While bestand <> ""
nr = FreeFile
Open map & bestand For Input As #nr
' Verwerk bestand...
Close #nr
bestand = Dir() ' Volgende bestand
Loop
End Sub
Wil je meer leren over loops in VBA? Bekijk dan VBA lussen in Excel.
FAQ
Wat is het verschil tussen Print # en Write #?
Print # schrijft tekst zoals je het opgeeft, geschikt voor leesbare bestanden. Write # voegt aanhalingstekens toe rond strings en komma’s tussen waarden, handig voor data die je later weer wilt inlezen met Input #.
Hoe lees ik een bestand met Unicode-tekens?
De standaard VBA File I/O ondersteunt alleen ANSI. Voor UTF-8 of Unicode gebruik je het FileSystemObject of de ADODB.Stream:
Dim stream As Object
Set stream = CreateObject("ADODB.Stream")
stream.Charset = "UTF-8"
stream.Open
stream.LoadFromFile "C:\Data\unicode.txt"
tekst = stream.ReadText
stream.Close
Kan ik binaire bestanden lezen met VBA?
Ja, gebruik de Binary-modus met Get en Put statements. Dit is handig voor niet-tekstuele data of wanneer je specifieke bytes wilt lezen.
Hoe voorkom ik dat Output een bestaand bestand overschrijft?
Controleer eerst of het bestand bestaat met Dir():
If Dir("C:\Data\bestand.txt") <> "" Then
MsgBox "Bestand bestaat al!"
Else
Open "C:\Data\bestand.txt" For Output As #1
End If
Wat is het maximale bestandsnummer dat ik kan gebruiken?
VBA ondersteunt bestandsnummers van 1 tot 511. Gebruik FreeFile om automatisch een vrij nummer te krijgen en conflicten te voorkomen.
Hoe lees ik alleen de eerste N regels van een bestand?
Dim teller As Long
teller = 0
Do Until EOF(nr) Or teller >= 10
Line Input #nr, regel
teller = teller + 1
Loop
Kan ik Excel-bestanden lezen met File I/O?
Nee, voor Excel-bestanden (.xlsx, .xls) gebruik je Workbooks.Open. File I/O is bedoeld voor tekstbestanden zoals .txt en .csv. Bekijk VBA Werkmappen voor het openen van Excel-bestanden.
Hoe schrijf ik een CSV met puntkomma als scheidingsteken?
Print #nr, cel1 & ";" & cel2 & ";" & cel3
Of gebruik een lus om dynamisch cellen samen te voegen met het gewenste scheidingsteken.
Hulp nodig bij Excel?
Kom je er niet uit met VBA bestandsbewerkingen of andere Excel-automatisering? Ik help je graag verder.
Neem contact op:
– WhatsApp: Stuur een bericht
– E-mail: w.bouwmeester@bouwmeesterconsultancy.nl
– Telefoon: +31 6 28963636
Of bekijk mijn Excel hulp diensten voor professionele ondersteuning.







