Daten von Webseiten per VBA auslesen
Schritt-für-Schritt-Anleitung
Um Daten von Webseiten mit VBA auszulesen, insbesondere über den Internet Explorer, kannst du die folgenden Schritte befolgen:
-
VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.
-
Modul einfügen: Klicke mit der rechten Maustaste auf "VBAProject (dein Arbeitsbuch)", wähle Einfügen > Modul.
-
Code eingeben: Kopiere den folgenden Code in das Modul:
Sub DatenVonWebsiteAuslesen()
Dim ie As Object
Dim URL As String
Dim searchtxt As String
Dim searchres As Object
Set ie = CreateObject("internetexplorer.application")
URL = "https://www.google.de/#q="
searchtxt = "Trockeneis+Berlin" ' Suchbegriff anpassen
With ie
.Visible = True
.navigate URL & searchtxt
Do While .Busy Or .readyState <> 4
DoEvents
Loop
End With
Set searchres = ie.document.getElementById("resultStats")
If Not searchres Is Nothing Then
ThisWorkbook.Sheets(1).Range("A1") = searchres.innerText
End If
ie.Quit
Set ie = Nothing
End Sub
-
Makro ausführen: Führe das Makro aus, um die Daten in deine Excel-Tabelle zu importieren.
Häufige Fehler und Lösungen
-
Laufzeitfehler 13 ("Typen unverträglich"): Dieser Fehler tritt häufig auf, wenn die Variable searchres nicht den erwarteten Wert erhält. Stelle sicher, dass du den Datentyp von searchres auf Object änderst.
-
Objekt erforderlich (Fehler 424): Dieser Fehler tritt auf, wenn das Element mit der angegebenen ID nicht gefunden wird. Überprüfe, ob die ID auf der Webseite wirklich existiert. Bei Google kann dies oft der Fall sein, da sie dynamisch Inhalte laden.
-
Seite nicht geladen: Wenn das Makro stockt, liegt es oft daran, dass die Seite noch nicht vollständig geladen ist. Achte darauf, dass die Warteschleifen richtig implementiert sind.
Alternative Methoden
Anstelle von Internet Explorer kannst du auch andere Browser verwenden, wie zum Beispiel Chrome oder Firefox. Hierfür sind jedoch zusätzliche Bibliotheken wie Selenium erforderlich. Ein Beispiel für die Verwendung von Selenium in VBA könnte so aussehen:
' Beispielcode für Selenium
Dim driver As New Selenium.ChromeDriver
driver.Start "chrome"
driver.Get "https://www.google.de/#q=Trockeneis+Berlin"
Praktische Beispiele
Hier ist ein weiteres Beispiel, das zeigt, wie du das Element mit getElementById abrufen kannst:
Sub BeispielGetElementById()
Dim ie As Object
Set ie = CreateObject("internetexplorer.application")
ie.Visible = True
ie.Navigate "https://www.example.com"
Do While ie.Busy Or ie.readyState <> 4
DoEvents
Loop
Dim element As Object
Set element = ie.document.getElementById("exampleId")
If Not element Is Nothing Then
MsgBox element.innerText
End If
ie.Quit
Set ie = Nothing
End Sub
Tipps für Profis
- Nutze die
getElementsByTagName-Methode für das Abrufen mehrerer Elemente, falls du nicht sicher bist, welche IDs existieren.
- Halte die Internet Explorer-Anwendung immer auf dem neuesten Stand, um Komplikationen mit dem DOM zu vermeiden.
- Verwende
vba getelementbyid, um sicherzustellen, dass du auf die richtigen Elemente zugreifst.
FAQ: Häufige Fragen
1. Warum funktioniert mein Code nicht mit Google?
Google verwendet oft JavaScript, um Inhalte dynamisch zu laden. Stelle sicher, dass du auf die richtigen IDs zugreifst und dass die Inhalte tatsächlich im DOM vorhanden sind.
2. Welche Alternative gibt es zu Internet Explorer?
Du kannst Selenium verwenden, um mit Chrome oder Firefox zu arbeiten. Es gibt viele Ressourcen, um dir beim Einstieg zu helfen.
3. Was ist der Unterschied zwischen getElementById und getElementsByTagName?
getElementById gibt ein einzelnes Element zurück, während getElementsByTagName eine Sammlung von Elementen zurückgibt, die den angegebenen Tag-Namen haben.