Rückkehr in VBA-Code-Beispiele

Automatisierung Internet Explorer (IE) mittels VBA

 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:

vba selenium web automation

(Ich erhalte eine Affiliate-Provision von Dans Kurs)

 

Zu einer Webseite mit VBA navigieren

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.

alt text
Erfahren Sie mehr!

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.

vba selenium web automation

(Ich erhalte eine Affiliate-Provision von Dans Kurs)

Testimonial von einem von Dans Studenten