VBA Internet Explorer warten, bis die Webseite geladen ist

Ich weiß, dass solche Fragen schon einmal gestellt wurden, aber meine sind etwas anders und ziemlich beunruhigend. Es handelt sich um eine Webseite mit einem Formular mit einigen Ereignissen, die mehr Seiten laden, wenn bestimmte Elemente in Eingabefeldern ausgefüllt werden. Wenn diese Ereignisse ausgelöst werden, wird die Seite erneut geladen, verbleibt jedoch unter derselben URL mit demselben Namen prop. Ich habe die folgenden Arten von Methoden sowohl einzeln als auch aneinander gereiht verwendet, um das Warten auf das Laden der Seite zu bewältigen, aber manchmal gelingt es dem VBA immer noch, die Variable HTMLDocument weiter auszuführen und auf eine Seite zu setzen, ohne dass die entsprechenden Informationen das Makro verursachen zu debuggen. Hier sind die Dinge, die ich bisher ausprobiert habe:

While IE.Busy
    DoEvents
Wend

Do Until IE.statusText = "Done"
    DoEvents
Loop

Do Until IE.readyState = 4
    DoEvents
Loop

Ich habe sogar versucht, diese Ereignisse in einer Schleife wie der folgenden zu platzieren, aber es hat nicht ganz funktioniert, da die lastModified-Eigenschaft nur einen Wert bis zur Sekunde zurückgibt und das Makro sich schnell genug durch die Felder dreht, um ein neues zurückzugeben Seite in der gleichen Sekunde:

Do Until IE.statusText = "Done" And IE.Busy = False And IE.ReadyState = 4 _
And IE.document.lastModified > LastModified ----or---- IE.document.nameprop = _
"some known and expected name prop here"
    While IE.Busy
        DoEvents
    Wend
    Do Until IE.statusText = "Done"
        DoEvents
    Loop
    Do Until IE.readyState = 4
        DoEvents
    Loop
Loop

Auch das dauert nicht lange genug, um das HTMLDocument-Objekt zu setzen, das zu einem Debug führt. Ich habe darüber nachgedacht, das nächste Eingabeelement zu setzen und dies zu überprüfen, um den Code zu fördern, aber selbst das wäre nicht 100% der Zeit erfolgreich, da die Eingabeelemente im HTML-Code im Allgemeinen vorhanden sind, aber ausgeblendet werden, bis das entsprechende Ereignis ausgelöst wird Dies wäre kein Problem, aber sie laden ihre Auswahl erst nach dem Auslösen des Events. Es könnte eine ungerade Seite sein.

Wie auch immer ... ich bin mir nicht sicher, was ich noch hinzufügen soll. Wenn es noch etwas gibt, das hilfreich sein könnte, fragen Sie einfach. Ich vermute, was ich suche, ist eine Möglichkeit, VBA dazu zu bringen, zu warten, bis der IE weiß, dass eine andere Seite nicht auf dem Weg ist. Es scheint ein paar Mal zu laden, bevor es vollständig fertig ist.

Also ... hat jemand irgendwelche Ideen?

EDIT: Habe ein paar neue Sachen zum Ausprobieren gefunden. Trotzdem keine Würfel. Es wurde vorgeschlagen, diese Versuche hinzuzufügen. Hier ist der Code. Aus irgendeinem Grund reagieren die VBE- und Excel-Instanz nicht mehr, wenn Sie diesen Ansatz verwenden, nachdem Sie ein Ereignis ausgelöst haben, das die Optionen für das select-Element auffüllt. Denken Sie darüber nach, xml auszuprobieren. Hier ist der Code:

intCounter = 0
Do until intCounter > 2
    Do Until IE.Busy = False: DoEvents: Loop
    Do Until IE.ReadyState = 4: DoEvents: Loop
    Set HTMLDoc = IE.Document
    Do Until HTMLDoc.ReadyState = "complete"
    Set HTMLSelect = HTMLDoc.getElementById("ctl00$ctl00$MainContent$ChildMainContent$ddlEmployeeBranchCodes")
    intCounter = 0
    For each Opt in HTMLSelect
        intCounter = intCounter + 1
    Next Opt
Loop

Aufgrund dessen, was auf der Webseite zu sehen ist, weiß ich, dass VBE und Excel in dieser Schleife nicht mehr reagieren.

Hoffe, das hilft ... Ich weiß, es hat mir nicht geholfen ... Drats.

EDIT: Ich dachte nur, ich würde das hinzufügen. Wenn es um die Automatisierung einer Webseite geht, verwende ich zum größten Teil keinen Internet Explorer mehr. Ich habe festgestellt, dass es viel besser ist, und diese Ausgabe von asynchronem Zeug gänzlich zu umgehen, um einfach die Posts auszuführen und sich selbst zu holen. Je nachdem, was Sie versuchen, ist dies möglicherweise nicht die beste Lösung, aber sie funktioniert ziemlich zuverlässig, wenn Sie den Datenverkehr genau betrachten und die Dinge gut parametrisieren.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage