Werte aus der DOM-Struktur mit Excel VBA extrahieren
Schritt-für-Schritt-Anleitung
Hier ist eine einfache Schritt-für-Schritt-Anleitung, um einen Wert aus der DOM-Struktur einer Webseite mit Excel VBA zu extrahieren. In diesem Beispiel verwenden wir den Internet Explorer, um den aktuellen Aktienpreis von Yahoo Finance zu holen.
-
VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.
-
Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".
-
Code einfügen: Kopiere den folgenden Code und füge ihn in das Modul ein:
Sub AktienPreisVonYahooHolen()
Dim browser As Object
Dim url As String
Dim knotenWurzel As Object
Dim aktienPreisErmittelt As String
url = "https://de.finance.yahoo.com/quote/BMW.DE"
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.Navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
Application.Wait (Now + TimeValue("00:00:01"))
Set knotenWurzel = browser.document.getElementsByClassName("Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)")(0)
If Not knotenWurzel Is Nothing Then
aktienPreisErmittelt = Trim(knotenWurzel.innerText)
Else
aktienPreisErmittelt = "Es konnte kein Preis ermittelt werden."
End If
MsgBox aktienPreisErmittelt
browser.Quit
Set browser = Nothing
Set knotenWurzel = Nothing
End Sub
-
Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um den aktuellen Preis anzuzeigen.
Häufige Fehler und Lösungen
-
Leere Variable: Wenn die Variable currPrice leer bleibt, stelle sicher, dass du das Attribut korrekt abfragst. Das richtige Attribut ist data-reactid ohne das Gleichheitszeichen im Namen:
If dTag.getAttribute("data-reactid") = "34" Then currPrice = dTag.innerText
-
CSS-Klasse nicht gefunden: Stelle sicher, dass die Klasse im HTML-Dokument aktuell ist und keine Leerzeichen oder Schreibfehler enthalten sind.
Alternative Methoden
Wenn du die getAttribute-Methode verwenden möchtest, um Werte zu extrahieren, kannst du auch die getElementsByClassName-Methode nutzen, um direkt auf das Element zuzugreifen, ohne eine Schleife zu benötigen. Beispiel:
Set dColl = HTMLDoc3.getElementsByClassName("Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)")(0)
Praktische Beispiele
Hier ist ein Beispiel, das zeigt, wie du den Wert eines Attributs mit getAttribute abrufen kannst:
Dim dataId As String
dataId = dTag.getAttribute("data-reactid")
If dataId = "34" Then
currPrice = dTag.innerText
End If
Tipps für Profis
-
Verwende CDbl für die Umwandlung: Wenn du den Preis in einen numerischen Wert umwandeln möchtest, kannst du die CDbl-Funktion verwenden:
Dim preis As Double
preis = CDbl(aktienPreisErmittelt)
-
Fehlerbehandlung: Implementiere Fehlerbehandlung in deinem Makro, um unerwartete Fehler zu vermeiden:
On Error Resume Next
' Dein Code hier
On Error GoTo 0
FAQ: Häufige Fragen
1. Warum funktioniert die getAttribute-Methode nicht?
Es könnte sein, dass das Attribut nicht richtig benannt ist oder ein Leerzeichen vor dem Attributnamen steht. Achte darauf, dass du den genauen Namen verwendest.
2. Wie kann ich sicherstellen, dass der Internet Explorer korrekt geschlossen wird?
Verwende browser.Quit am Ende deines Makros, um sicherzustellen, dass der Browser geschlossen wird.
3. Wie kann ich die Klasse eines Elements ändern, wenn die Webseite aktualisiert wird?
Du musst den HTML-Code der Seite überprüfen und die Klasse im VBA-Code entsprechend anpassen, wenn sich die Struktur ändert.