AW: Web abfrage mit Schleife
25.04.2018 00:34:15
Zwenn
Hallo GerSCh,
mit Google hast Du Dir eine ziemlich blöde Seite für den Test ausgesucht ;-) Es wird eine Zeile mit Application.Wait ... benötigt. Kommt eher selten vor. Meistens reicht einmal Do While IE.ReadyState 4: DoEvents: Loop. Zusätzlich ist Google eine der Seiten, die es gar nicht mögen, wenn man automatisiert darauf zugreift. Das untenstehende Makro hat 35 Abrufe geschafft, dann wollte Google wissen, ob ich ein Roboter bin ;-) Die sind da echt hart. War schon früher so. Selbst Ebay hat das inzwischen aufgegeben und da gingen früher schon etwa 400 Zugriffe am Stück, bevor man 10 Minuten Pause machen musste.
Wie auch immer. Prinzipiell funktioniert das mit einer For-Schleife so:
(Ich wollte auch eine Do ... Loop Version anbieten, kann die nun aber nicht mehr testen, bis Google mich wieder freigibt)
Option Explicit
Sub AutomaticFormFilling()
Dim IE As Object
Dim searchText As Object
Dim searchRes As Object
Dim i As Long
For i = 2 To Sheets(1).UsedRange.Rows.Count
Set IE = CreateObject("internetexplorer.application")
IE.Visible = True
IE.Navigate "http://google.de"
Do While IE.ReadyState 4: DoEvents: Loop
Set searchText = IE.document.getElementByID("lst-ib")
searchText.Value = ThisWorkbook.Sheets(1).Range("A" & i)
IE.document.forms(0).submit
Application.Wait (Now + TimeSerial(0, 0, 2))
Do While IE.ReadyState 4: DoEvents: Loop
Set searchRes = IE.document.getElementByID("resultStats")
ThisWorkbook.Sheets(1).Range("B" & i) = searchRes.innertext
IE.Quit
Set IE = Nothing
Next i
End Sub
Benutze bei Deinen Makros unbedingt immer Option Explicit ganz oben im Modul. Bei Dir waren zwei Variablen nicht deklariert. Das ist sehr unschön. In längeren Codes ist es ausserdem sehr fehlerträchtig, auf die zwingende Variablen Deklaration zu verzichten.
Achja, statt z.B.
ThisWorkbook.Sheets(1).Range("A" & i)
kannst Du auch schreiben
ThisWorkbook.Sheets(1).Cells(i, 1)
Viele Grüße,
Zwenn