Schreiben Daten mit Excel VBA in eine Textdatei

Glen Alfaro 18 April 2022
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 den Visual Basic-Editor.
  • Klicken Sie in der Symbolleiste Tools auf Referenzen.
  • 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.