Daten per VBA aus HTML-Datei einlesen
Schritt-für-Schritt-Anleitung
Um Daten aus einer HTML-Datei in Excel zu importieren, kannst Du das folgende VBA-Makro verwenden. Beachte, dass die HTML-Datei Daten zwischen Pipes (|
) enthält. Das Beispiel geht davon aus, dass Du Excel 2016 oder höher verwendest.
- Öffne Excel und drücke
ALT + F11
, um den VBA-Editor zu öffnen.
- Erstelle ein neues Modul, indem Du im Menü auf
Einfügen
> Modul
klickst.
- Füge den folgenden VBA-Code in das Modul ein:
Sub DatenAusHTML()
Dim browser As Object
Dim url As String
Dim knotenAst As Object
Dim knotenZweig As Object
Dim splitArray() As String
Dim i As Long
Dim zeile As Long
Dim TabName As String
' Für URL den Pfad zu Deiner HTML Datei setzen!
url = "file:///C:/Users/Patrick/Downloads/test.htm"
TabName = Format(FileDateTime(url), "dd.MM")
' Überprüfen, ob das Tabellenblatt bereits existiert
For Each wks In ThisWorkbook.Sheets
If wks.Name = TabName Then
MsgBox "Tabelle " & TabName & " bereits vorhanden! Makro wird abgebrochen.", vbInformation, "Tabelle bereits vorhanden"
Exit Sub
End If
Next
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = TabName
zeile = 2
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.readyState = 4: DoEvents: Loop
Set knotenAst = browser.document.getElementsByTagName("span")
' Kopfzeile
Cells(1, 1).Value = "Materialnummer"
Cells(1, 2).Value = "Materialkurztext"
Cells(1, 3).Value = "Bestand SAP"
Cells(1, 4).Value = "Me(SAP)"
Cells(1, 5).Value = "Bestand WMS"
Cells(1, 6).Value = "Me(WMS)"
Cells(1, 7).Value = "Bestandsdifferenz"
For Each knotenZweig In knotenAst
If InStr(1, knotenZweig.innertext, "|") > 0 Then
splitArray = Split(knotenZweig.innertext, "|")
For i = 0 To UBound(splitArray)
Select Case i
Case 2: Cells(zeile, 1).Value = Trim(splitArray(i))
Case 3: Cells(zeile, 2).Value = Trim(splitArray(i))
Case 6: Cells(zeile, 3).Value = Trim(splitArray(i))
Case 7: Cells(zeile, 4).Value = Trim(splitArray(i))
Case 8: Cells(zeile, 5).Value = Trim(splitArray(i))
Case 9: Cells(zeile, 6).Value = Trim(splitArray(i))
Case 10: Cells(zeile, 7).Value = Trim(splitArray(i))
End Select
Next i
zeile = zeile + 1
End If
Next knotenZweig
browser.Quit
Set browser = Nothing
Set knotenAst = Nothing
Set knotenZweig = Nothing
End Sub
- Passe den
url
-Wert an, um den Pfad zu Deiner HTML-Datei anzugeben.
- Führe das Makro aus, indem Du im VBA-Editor auf
Ausführen
klickst oder F5
drückst.
Häufige Fehler und Lösungen
-
Laufzeitfehler '5': Ungültiger Prozeduraufruf oder ungültiges Argument
Dieser Fehler kann auftreten, wenn das Format der URL nicht korrekt ist. Stelle sicher, dass die Datei existiert und dass der Pfad korrekt ist.
-
Automatisierungsfehler: Das aufgerufene Objekt wurde von den Clients getrennt
Dies kann passieren, wenn der Internet Explorer nicht ordnungsgemäß geschlossen wurde. Überprüfe den Task-Manager und beende alle Instanzen von iexplore.exe
.
Alternative Methoden
Falls Du die Daten aus mehreren HTML-Dateien gleichzeitig importieren möchtest, kannst Du eine Schleife verwenden, um alle .htm
-Dateien in einem bestimmten Verzeichnis zu durchlaufen. Hier ein Beispiel:
Sub AlleDatenAusHTML()
Dim Datei As String
Dim Verzeichnis As String
Verzeichnis = "C:/Users/Patrick/Downloads/"
Datei = Dir(Verzeichnis & "*.htm") ' Suche nach allen HTML-Dateien
Do While Datei <> ""
' Hier rufst Du die Funktion zum Einlesen der HTML-Datei auf
' z.B. DatenAusHTML Verzeichnis & Datei
Datei = Dir
Loop
End Sub
Praktische Beispiele
- Einlesen einer spezifischen HTML-Datei: Verwende den Pfad zur HTML-Datei, um gezielt Daten zu importieren.
- Erstellen von Tabellenblättern: Der oben genannte Code erstellt für jede HTML-Datei ein neues Tabellenblatt, basierend auf dem Erstellungsdatum der Datei.
Tipps für Profis
- Nutze
Error Handling
, um Fehler im Code abzufangen und zu lösen. Dies kann Dir helfen, den Code robuster zu gestalten.
- Experimentiere mit dem
HTMLDocument
-Objekt, um gezielt auf bestimmte HTML-Elemente zuzugreifen.
- Speichere die importierten Daten in einer Datenbank, wenn Du mit großen Datenmengen arbeitest.
FAQ: Häufige Fragen
1. Wie kann ich sicherstellen, dass meine Daten korrekt importiert werden?
Überprüfe den Inhalt der HTML-Datei auf die korrekte Struktur und stelle sicher, dass die gewünschten Daten zwischen den Pipes (|
) stehen.
2. Kann ich die importierten Daten automatisch analysieren?
Ja, Du kannst zusätzliche VBA-Funktionen einbauen, um Analysen durchzuführen, sobald die Daten in Excel importiert sind.
3. Wie kann ich den Code anpassen, um mehrere Dateien zu importieren?
Du kannst eine Schleife verwenden, um durch alle .htm
-Dateien in einem Verzeichnis zu iterieren, wie im Abschnitt "Alternative Methoden" beschrieben.