Automatisieren Sie Internet Explorer (IE) mit VBA

Diese Seite enthält Codierungsbeispiele für die Automatisierung von Internet Explorer (IE) mit VBA.

** Aktualisierung 07.06.2019: Derzeit ist der beste Weg, um Web-Automatisierung mit VBA zu erreichen, die Verwendung von Selenium. Dieser Artikel behandelt NICHT Selen. Die folgenden Beispiele funktionieren und können für Ihre Anforderungen ausreichend sein. Wenn Sie jedoch erweiterte Anforderungen haben oder ein Experte für Webautomatisierung werden möchten, empfehle ich dringend, stattdessen Selenium zu verwenden. Dan Strongs Kurs über Web-Automatisierung (Rabatt über diesen Link erhältlich) ist eine fantastische Ressource, um Selenium zu lernen:

(Ich erhalte eine Affiliate-Provision von Dans Kurs)

Navigieren Sie zu einer Webseite mit VBA

Der erste Codeabschnitt öffnet den IE und navigiert zu einer Website. Der zweite Codeabschnitt öffnet den IE, navigiert zu einer Website und interagiert mit einem Eingabefeld.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page()'Dies lädt eine Webseite im Internet ExplorerDim ich so langURL als String dimmenIE als Objekt dimmenDim objElement als ObjektDim objCollection als Objekt'InternetExplorer-Objekt erstellenSet IE = CreateObject("InternetExplorer.Application")'Setze IE.Visible = True, um den IE sichtbar zu machen, oder False, damit der IE im Hintergrund läuftIE.Sichtbar = Wahr'URL definierenURL = "https://www.automateexcel.com/excel/"'Zu URL navigierenIE.Navigate-URL' Statusleiste informiert den Benutzer darüber, dass die Website geladen wirdApplication.StatusBar = URL & " wird geladen. Bitte warten… "' Warten Sie, während der IE geladen wird… 'IE ReadyState = 4 bedeutet, dass die Webseite geladen wurde (die erste Schleife ist so eingestellt, dass sie nicht versehentlich die zweite Schleife überspringt)Do While IE.ReadyState = 4: DoEvents: Schleife 'Do WhileDo Until IE.ReadyState = 4: DoEvents: Schleife 'Do Until'Webseite geladenApplication.StatusBar = URL & "Geladen"'IE entladenSetze IE = NichtsSetze objElement = NichtsSetze objCollection = NichtsEnd Sub

Ein sehr häufiges Problem bei der Arbeit mit IE in VBA ist, dass VBA versucht, Code auszuführen, bevor Internet Explorer vollständig geladen ist. Mit diesem Code weisen Sie VBA an, eine Schleife zu wiederholen, bis der IE bereit ist (IE.ReadyState - 4).

1234 ' Warten Sie, während der IE geladen wird… 'IE ReadyState = 4 bedeutet, dass die Webseite geladen wurde (die erste Schleife ist so eingestellt, dass sie nicht versehentlich die zweite Schleife überspringt)Do While IE.ReadyState = 4: DoEvents: Schleife 'Do WhileDo Until IE.ReadyState = 4: DoEvents: Schleife 'Do Until

Beachten Sie auch diese Codezeile:

1 IE.Sichtbar = WAHR

Dieser Code schaltet um, ob IE im Hintergrund oder im Vordergrund ausgeführt wird.

URL öffnen und Daten in Formular mit VBA eingeben

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 „Das muss ganz oben in Ihrem Modul stehen. Es wird verwendet, um den IE als aktives Fenster festzulegenPublic Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As LongSub Automate_IE_Enter_Data()'Dies lädt eine Webseite im Internet ExplorerDim ich so langURL als String dimmenIE als Objekt dimmenDim objElement als ObjektDim objCollection als ObjektDim HWNDSrc As Long'InternetExplorer-Objekt erstellenSet IE = CreateObject("InternetExplorer.Application")'Setze IE.Visible = True, um den IE sichtbar zu machen, oder False, damit der IE im Hintergrund läuftIE.Sichtbar = Wahr'URL definierenURL = "https://www.automateexcel.com/vba"'Zu URL navigierenIE.Navigate-URL' Statusleiste informiert den Benutzer darüber, dass die Website geladen wirdApplication.StatusBar = URL & " wird geladen. Bitte warten… "' Warten Sie, während der IE geladen wird… 'IE ReadyState = 4 bedeutet, dass die Webseite geladen wurde (die erste Schleife ist so eingestellt, dass sie nicht versehentlich die zweite Schleife überspringt)Do While IE.ReadyState = 4: DoEvents: LoopDo Until IE.ReadyState = 4: DoEvents: Loop'Webseite geladenApplication.StatusBar = URL & "Geladen"'Fenster-ID für IE abrufen, damit wir sie als Aktivierungsfenster festlegen könnenHWNDSrc = IE.HWND'IE als aktives Fenster festlegenSetForegroundWindow HWNDSrc'Eingabefeld suchen und ausfüllenn = 0Für jeden Artikel in IE.document.allWenn itm = "[Objekt HTMLInputElement]" Thenn = n + 1Wenn n = 3 Dannitm.Value = "Orksheet"itm.Focus 'Aktiviert das Eingabefeld (lässt den Cursor erscheinen)Application.SendKeys "{w}", True 'Simuliert einen 'W'-Tastendruck. True sagt VBA zu warten'bis der Tastendruck beendet ist, bevor Sie fortfahren, erlauben'Javascript auf der Seite zum Ausführen und Filtern der TabelleGoTo-EndmakroEnde WennEnde WennNächste'IE entladenEndmakro:Setze IE = NichtsSetze objElement = NichtsSetze objCollection = NichtsEnd Sub

GetElement im IE mit VBA

Die Interaktion mit Objekten in Internet Explorer kann oft mühsam sein. Sie müssen angeben, mit welchem ​​spezifischen Objekt Sie arbeiten möchten. Im obigen Code suchen wir nach der 3. Instanz von „[object HTMLInputElement]“ (einem Eingabeformular). Dann geben wir „orksheet“ in das Eingabeformular ein (itm.value = „orksheet“), bewegen den Cursor in das Eingabeformular (itm.focus) und geben „w“ ein. Die Eingabe von „w“ ist in diesem Fall erforderlich, um das Javascript zu aktivieren, das zum Filtern der Tabelle verwendet wird.

Es gibt direktere Methoden zum Auswählen von Objekten, diese Methode sollte jedoch funktionieren, wenn alles andere fehlschlägt.

Um diese anderen Methoden zu verwenden, sollten Sie die folgenden Optionen verwenden:

1234 IE.document.getelementbyid("ID").value = "value" 'Nach ID suchenIE.document.getelementsbytagname("ID").value = "value" 'Nach Tag suchenIE.document.getelementsbyclassname("ID").value = "value" 'Nach Klasse suchenIE.document.getelementsbyname("ID").value = "value" 'Nach Namen suchen

Bei der Verwendung dieser Methoden können Probleme auftreten, wenn mehr als ein Element mit demselben Namen vorhanden ist. Durch Verwendung einer Schleife (wie im obigen Beispielcode) können Sie angeben, welche Instanz des Elements verwendet werden soll.

Interagieren Sie mit IE mit VBA

Im obigen Code verwenden wir das Ereignis: Fokus (itm.focus), um den Cursor im Formular zu aktivieren.

Weitere Beispiele für Objekt-/Elementereignisse, Methoden und Eigenschaften finden Sie hier: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Nicht alle davon funktionieren mit jedem Objekt / Element und es kann einiges an Versuch und Irrtum geben, wenn Sie mit Objekten im IE interagieren.

Sendkeys an Internet Explorer

Wir haben den Sendkeys-Befehl im obigen Code verwendet:

1 Application.SendKeys "{w}", True

Sendkeys sollten im Allgemeinen der letzte Ausweg sein. Normalerweise sollten Sie in der Lage sein, direkt mit Objekten zu interagieren, aber manchmal ist es einfacher, einfach den Befehl Sendkeys zu verwenden. Sendkeys entspricht im Wesentlichen dem Tippen mit der Tastatur. Sie müssen sicherstellen, dass die richtigen Fenster und Objekte ausgewählt sind, bevor Sie fortfahren. Sendkeys können auch Ereignisse auslösen, die basierend auf Benutzerinteraktionen im Web ausgeführt werden. Im obigen Beispiel verwenden wir Sendkeys, um den Javascript-Filter in der Tabelle zu aktivieren, die wir auf der Webseite verwenden.

Sendkeys hat zwei Eingänge:
1. die einzugebende Taste (im Allgemeinen umgeben von {}… {enter}, {q}… .)
2. Warten Sie, bis Sendkeys abgeschlossen ist, bevor Sie mit TRUE/FALSE fortfahren. Im Allgemeinen sollten Sie diesen Wert auf TRUE setzen, wenn Sie mit Internet Explorer arbeiten.

Führen Sie Internet Explorer im Hintergrund aus

Um Internet Explorer im Hintergrund auszuführen, müssen Sie zwei Dinge tun:

1. Rufen Sie das Makro mit dem IE-Code mit Application.Run auf, damit das Makro im Hintergrund läuft, während Sie weiterarbeiten:

1 Application.Run ("Automate_IE_Load_Page")

Hinweis: Dieser Code könnte Ihre Arbeit möglicherweise unterbrechen oder Ihre Arbeit könnte den Code beeinträchtigen. Wenn Sie beispielsweise SendKeys verwenden, kann Sendkeys einen Tastenanschlag an die falsche Anwendung senden. Seien Sie dabei sehr vorsichtig.
2. IE ausblenden:

1 IE.Sichtbar = Falsch

Selen & VBA

Wenn Sie diesen Artikel nützlich fanden, sollten Sie sich den Kurs von Dan Strong über Web-Automatisierung ansehen. Es behandelt die Verwendung von Selenium mit VBA.

(Ich erhalte eine Affiliate-Provision von Dans Kurs)

Erfahrungsbericht von einem von Dans Schülern

https://excelvbaisfun.com/wp-content/uploads/2019/06/dan_strong_complete_web_automation_course_review_VbFn2vwul8A_1080p.mp4

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave