Automatisierung Internet Explorer (IE) mittels VBA
In this Article
Diese Seite enthält Programmierbeispiele für die Automatisierung des Internet Explorers (IE) mit VBA.
** Update 6/7/2019: Derzeit ist der beste Weg zur Web-Automatisierung mit VBA die Verwendung von Selenium. Dieser Artikel befasst sich NICHT mit Selenium. Die Beispiele unten funktionieren ausgezeichnet und könnten für Ihre Bedürfnisse vollkommen ausreichend sein. Wenn Sie jedoch höhere Anforderungen stellen oder ein Experte für Web-Automatisierung werden wollen, empfehle ich Ihnen dringend, sich stattdessen mit Selenium zu beschäftigen. Dan Strong’s Kurs über Web-Automatisierung (Rabatt über diesen Link erhältlich) stellt eine fantastische Lernressource zum Erlernen von Selenium dar:
(Ich erhalte eine Affiliate-Provision von Dans Kurs)
Der erste Teil des Codes öffnet den IE und navigiert zu einer Website. Der zweite Teil des Codes öffnet den IE, navigiert zu einer Website und interagiert mit einem Eingabefeld.
Sub Automatisierung_IE_Webpage_Laden()
'eine Webpage in IE laden
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
'InternetExplorer Objekt erstellen
Set IE = CreateObject("InternetExplorer.Application")
'IE.Visible = True macht IE sichtbar
'IE.Visible = False lässt IE im Hintergrund laufen
IE.Visible = True
'URL definieren
URL = "https://www.automateexcel.com/excel/"
'zur URL navigieren
IE.Navigate URL
'Statusbalken zeigt dem Nutzer den Ladestatus an
Application.StatusBar = URL & " lädt. Bitte warten..."
'Warten, bis IE geladen wurde...
'IE ReadyState = 4 bedeutet, dass die Webseite geladen ist (die erste Schleife wird gesetzt, um ein versehentliches Überspringen der zweiten Schleife zu vermeiden)
Do While IE.ReadyState = 4: DoEvents: Loop 'Do While
Do Until IE.ReadyState = 4: DoEvents: Loop 'Do Until
'Webseite geladen
Application.StatusBar = URL & " geladen"
'IE entladen (vom Arbeitsspeicher entfernen)
Set IE = Nothing
Set objElement = Nothing
Set objCollection = Nothing
End Sub
Ein sehr häufig auftretendes Problem bei der Arbeit mit dem IE in VBA ist der Versuch von VBA , Code auszuführen, bevor der Internet Explorer vollständig geladen ist. Mit dem folgenden Code weisen Sie VBA an, eine Schleife zu wiederholen, bis der IE bereit ist (IE.ReadyState – 4).
'Warten, bis IE geladen wurde...
'IE.ReadyState = 4 bedeutet, dass die Webseite geladen ist (die erste Schleife wird gesetzt, um ein versehentliches Überspringen der zweiten Schleife zu vermeiden)
Do While IE.ReadyState = 4: DoEvents: Loop 'Do While
Do Until IE.ReadyState = 4: DoEvents: Loop 'Do Until
Beachten Sie auch diese Code-Zeile:
IE.Visible = TRUE
Dieser Code steuert, ob der IE im Hintergrund oder im Vordergrund läuft.
VBA-Codierung leicht gemacht
Suchen Sie nicht länger online nach VBA-Code. Verwenden Sie das Code VBA Add-in, um Ihren gewünschten Code schnell in den Visual Basic Editor einzufügen.
URL öffnen und Daten mit VBA in ein Formular eingeben
'Dies muss am Anfang Ihres Moduls stehen. Es wird verwendet, um den IE als aktives Fenster festzulegen
Public Declare Function VordergrundFensterSetzen Lib "user32" (ByVal HWND As Long) As Long
Sub IE_Dateneingabe_Automatisieren()
'Damit wird eine Webseite im IE geladen
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
Dim HWNDSrc As Long
'InternetExplorer-Objekt erstellen
Set IE = CreateObject("InternetExplorer.Application")
'IE.Visible = True macht IE sichtbar
'IE.Visible = False lässt IE im Hintergrund laufen
IE.Visible = True
'URL definieren
URL = "https://www.automateexcel.com/vba"
'Zur URL navigieren
IE.Navigate URL
'Statusleiste lässt den Benutzer wissen, dass die Website geladen wird
Application.StatusBar = URL & " wird geladen. Please wait..."
'Warten, während der IE lädt...
IE.ReadyState = 4 bedeutet, dass die Webseite geladen wurde (die erste Schleife wird gesetzt, damit die zweite Schleife nicht versehentlich übersprungen wird)
Do While IE.ReadyState = 4: DoEvents: Schleife
Do Until IE.ReadyState = 4: DoEvents: Schleife
'Webseite geladen
Application.StatusBar = URL & " Geladen"
'Fenster-ID für IE ermitteln, damit wir es als aktiviertes Fenster festlegen können
HWNDSrc = IE.HWND
'IE als aktives Fenster festlegen
VordergrundFensterSetzen HWNDSrc
'Eingabefeld suchen und ausfüllen
n = 0
For Each itm In IE.document.all
If itm = "[object HTMLInputElement]" Then
n = n + 1
If n = 3 Then
itm.Value = "orksheet"
itm.Focus 'Eingabefeld aktivieren (lässt den Cursor erscheinen)
Application.SendKeys "{w}", True 'Simuliert einen 'W'-Tastendruck. True teilt VBA mit, auf das
'Ende des Tastendruckes zu warten, bevor er fortfährt, so dass
'javascript auf der Seite ausgeführt und die Tabelle gefiltert wirdA
GoTo endmacro
End if
End if
Next
'IE entladen
endmacro:
Set IE = Nothing
Set objElement = Nothing
Set objCollection = Nothing
End Sub
GetElement im IE mit VBA
Die Interaktion mit Objekten im Internet Explorer sind oft mühsam sein. Sie müssen die Objekte, mit denen Sie arbeiten wollen spezifizieren. Im obigen Code suchen wir nach der dritten Instanz von „[object HTMLInputElement]“ (ein 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 notwendig, um das zum Filtern der Tabelle verwendete Javascript zu aktivieren.
Es gibt direktere Methoden zur Auswahl von Objekten, aber diese Methode sollte funktionieren, wenn alles andere fehlschlägt.
Um diese anderen Methoden zu verwenden, müssen Sie die folgenden Optionen verwenden:
IE.document.getelementbyid("ID").value = "Wert" 'Nach ID suchen
IE.document.getelementsbytagname("ID").value = "Wert" 'Nach Tag suchen
IE.document.getelementsbyclassname("ID").value = "Wert" 'Nach Klasse suchen
IE.document.getelementsbyname("ID").value = "Wert" 'Nach Name suchen
Bei der Verwendung dieser Methoden kann es zu Problemen kommen, wenn es mehr als ein Element mit demselben Namen gibt. Durch die Verwendung einer Schleife (wie im obigen Beispielcode) können Sie angeben, welche Instanz des Elements verwendet werden soll.
Interaktion mit dem IE mit VBA
Im obigen Code verwenden wir das Ereignis: Focus (itm.focus), um den Cursor im Formular zu aktivieren.
Weitere Beispiele für Ereignisse, Methoden und Eigenschaften von Objekten/Elementen finden Sie hier: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx
Nicht alle diese Methoden funktionieren mit jedem Objekt/Element und es braucht eine gewisse Anzahl von Versuchen und Misserfolgen, wenn Sie mit Objekten im IE interagieren.
Tasten an den Internet Explorer senden
Wir haben im obigen Code den Sendkeys Befehl verwendet:
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, den Sendkeys-Befehl zu verwenden. Sendkeys ist im Wesentlichen dasselbe wie das Tippen auf der Tastatur. Bevor Sie fortfahren, müssen Sie sicherstellen, dass die richtigen Fenster und Objekte ausgewählt sind. Sendkeys kann auch Ereignisse auslösen, die auf der Grundlage von Benutzerinteraktionen im Web ausgeführt werden. Im obigen Beispiel verwenden wir Sendkeys, um den Javascript-Filter in der Tabelle zu aktivieren, den 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. Bei der Arbeit mit dem Internet Explorer sollten Sie diese Option im Allgemeinen auf TRUE setzen.
Internet Explorer im Hintergrund ausführen
Um den Internet Explorer im Hintergrund laufen zu lassen, müssen Sie zwei Dinge tun:
1. Rufen Sie das Makro, das den IE-Code enthält, mit Application.Run auf, damit das Makro im Hintergrund läuft, während Sie weiterarbeiten:
Application.Run ("Automatisierung_IE_Webpage_Laden")
Hinweis: Dieser Code könnte Ihre Arbeit unterbrechen, oder Ihre Arbeit könnte den Code beeinträchtigen. Wenn Sie zum Beispiel SendKeys verwenden, kann Sendkeys einen Tastendruck an die falsche Anwendung senden. Seien Sie damit sehr vorsichtig.
2. IE ausblenden:
IE.Visible = False
Selenium und VBA
Wenn Sie diesen Artikel nützlich fanden, sollten Sie sich Dan Strongs Kurs über Web-Automatisierung ansehen. Er behandelt die Verwendung von Selenium mit VBA.
(Ich erhalte eine Affiliate-Provision von Dans Kurs)
Testimonial von einem von Dans Studenten