Schreiben Daten mit Excel VBA in eine Textdatei
Excel VBA ist eine beliebte Lösung für Datenverarbeitungsaufgaben und Bereinigungen. Darüber hinaus kann es sich wiederholende Aufgaben automatisieren, die viel Zeit in Anspruch nehmen würden.
Eine der Schlüsselfunktionen von VBA ist die Fähigkeit, Textdateien zu generieren und zu bearbeiten, ohne dass Änderungen manuell geöffnet, benannt und gespeichert werden müssen.
Dieser Artikel zeigt, wie man mit Hilfe von VBA Textdateien (.txt)
generiert.
In diesem Artikel versuchen wir, Textdateien mit Excel VBA zu generieren. Bevor wir tief in den Code einsteigen, müssen wir Excel VBA ermöglichen, mit FileSystemObject
zu interagieren, das Dateien und Ordner verwaltet.
Schritte zum Aktivieren von FileSystemObject
:
-
Excel-Datei öffnen.
-
Öffnen Sie auf der Registerkarte
Entwickler
denVisual Basic
-Editor. -
Klicken Sie in der Symbolleiste
Tools
aufReferenzen
. -
Aktivieren Sie das Kontrollkästchen
Microsoft Scripting Runtime
.
Sie sind jetzt fertig.
Der folgende Codeblock zeigt das Erstellen einer Textdatei mit VBA.
Die Unterroutine SaveTextToFile
benötigt zwei Parameter, den fileName
und den fileContent
. Die Variable fileName
ist der gewünschte Dateiname der zu erzeugenden Textdatei. Die Variable fileContent
ist der eigentliche Inhalt der Textdatei. Der filePath
sollte so bearbeitet werden, dass er zum richtigen Speicherort der Ausgabedatei passt.
Es wird empfohlen, das FileSystemObject
als fso
zu deklarieren, damit die automatische Vervollständigung durch Intellisense
funktioniert, was Tippfehler vermeiden könnte und auch helfen würde, andere Methoden innerhalb der FileSystemObject
-Bibliothek zu entdecken.
Es ist wichtig, fso = Nothing
und Set fileStream = Nothing
einzufügen, bevor die Codeausführung endet, da Fehler während der Laufzeit auftreten, wenn diese beiden nicht geschlossen werden.
Option Explicit
Public Sub SaveTextToFile(fileName As String, fileContent As String)
Dim filePath, fileAttributes As String
filePath = "C:\Users\temp\Desktop\Destination"
fileAttributes = filePath & "\" & fileName & ".txt"
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim fileStream As TextStream
Set fileStream = fso.CreateTextFile(fileAttributes)
fileStream.WriteLine fileContent
fileStream.Close
If fso.FileExists(fileAttributes) Then
Debug.Print "File Created Successfully."
End If
Set fileStream = Nothing
Set fso = Nothing
End Sub
Sub testSub()
Call SaveTextToFile("sample1", "Here is the content.")
End Sub
Der obige Codeblock interagiert nicht wirklich mit Excel und generiert nur eine einzelne Datei.
Der folgende Codeblock zeigt das Erstellen von Textdateien in Abhängigkeit von den Daten aus der Excel-Datei. Beispielwerte siehe Sheet1
.
Sheet1
:
| A | B | C |
1| File Name | Content | GenerateTextFile? |
2| sample1 | This is the content of sample1| Yes |
2| sample2 | This is the content of sample2| No |
2| sample3 | This is the content of sample3| Yes |
2| sample4 | This is the content of sample4| No |
2| sample5 | This is the content of sample5| Yes |
2| sample6 | This is the content of sample6| No |
Im folgenden Beispiel verwenden wir die Unterroutine SaveTextToFile
für die Erstellung der Textdatei. Die Unterroutine testSub
ruft SaveTextToFile
in einer Schleife auf, abhängig von den Daten von Sheet1
.
Option Explicit
Public Sub SaveTextToFile(fileName As String, fileContent As String)
Dim filePath, fileAttributes As String
filePath = "C:\Users\temp\Desktop\Destination"
fileAttributes = filePath & "\" & fileName & ".txt"
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim fileStream As TextStream
Set fileStream = fso.CreateTextFile(fileAttributes)
fileStream.WriteLine fileContent
fileStream.Close
If fso.FileExists(fileAttributes) Then
Debug.Print fileName & " Created Successfully."
End If
Set fileStream = Nothing
Set fso = Nothing
End Sub
Sub testSub()
Dim wb As Workbook
Dim s1 As Worksheet
Set wb = ThisWorkbook
Set s1 = wb.Sheets("Sheet1")
Dim i As Integer
i = 2
Do Until s1.Cells(i, 1) = ""
If s1.Cells(i, 3) = "Yes" Then
Call SaveTextToFile(s1.Cells(i, 1), s1.Cells(i, 2))
End If
i = i + 1
Loop
End Sub
testSub
-Ausgabe:
sample1 Created Successfully.
sample3 Created Successfully.
sample5 Created Successfully.
Sample1
, Sample3
und Sample5
sind die erstellten Textdateien, da sie Yes
in der Spalte GenerateTextFile
haben. Sample2
und Sample4
werden nicht erstellt, da sie No
in der Spalte GenerateTextFile
sind.