VBA Internet Explorer czeka na załadowanie strony internetowej

Wiem, że pytania takie jak to były wcześniej zadawane, ale moje są nieco inne i dość kłopotliwe. Mam do czynienia ze stroną internetową z formularzem z kilkoma zdarzeniami, które ładują więcej strony, gdy niektóre elementy w polach wprowadzania są wypełniane. Gdy te zdarzenia wystrzelą, strona ładuje się ponownie, ale pozostaje pod tym samym adresem URL z tą samą etykietą. Używam następujących typów metod, zarówno osobno, jak i połączonych ze sobą, aby obsłużyć oczekiwanie na załadowanie strony, ale czasami VBA nadal jest w stanie kontynuować wykonywanie i ustawić zmienną HTMLDocument na stronę bez odpowiednich informacji na jej temat, co powoduje makro debugować. Oto rodzaje rzeczy, które dotychczas próbowałem:

While IE.Busy
    DoEvents
Wend

Do Until IE.statusText = "Done"
    DoEvents
Loop

Do Until IE.readyState = 4
    DoEvents
Loop

Próbowałem nawet umieścić te zdarzenia w pętli, tak jak poniżej, ale to nie działało, ponieważ właściwość lastModified zwraca wartość tylko do drugiej, a makro obraca się na polach wystarczająco szybko, aby zwrócić nową strona w tej samej sekundzie:

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

Nawet jeśli nie zaczeka wystarczająco długo, aby ustawić obiekt HTMLDocument prowadzący do debugowania. Zastanawiałem się nad ustawieniem następnego elementu wejściowego i sprawdzeniem, czy nie ma nic do dalszego kodowania, ale nawet to nie odniosłoby sukcesu 100% czasu, ponieważ ogólnie elementy wejściowe istnieją w HTML, ale są ukryte, dopóki odpowiednie zdarzenie nie zostanie uruchomione , co nie stanowiłoby problemu, ale nie ładują swoich możliwych wyborów do momentu zwolnienia zdarzenia. Może to być dziwna strona.

W każdym razie ... nie wiem, co jeszcze dodać. Jeśli jest coś innego, co może być pomocne, po prostu zapytaj. Domyślam się, że to, czego szukam, to sposób, aby VBA poczekał, aż IE dowie się, że inna strona nie jest w drodze. Wydaje się, że ładuje się kilka razy, zanim zostanie całkowicie zakończony.

Więc ... Czy ktoś ma jakieś pomysły?

EDYCJA: Znaleziono kilka nowych rzeczy do wypróbowania. Wciąż nie ma kości. Zasugerowano mi, aby dodać te próby. Oto kod, z jakiegoś powodu instancja VBE i excel przestają odpowiadać, gdy używają tego podejścia po wystrzeleniu zdarzenia, które powinno zapełniać opcje wybranego elementu ... zastanawiając się nad wypróbowaniem xml ... oto kod:

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

Na podstawie tego, co widzę na stronie internetowej, wiem, że gdzieś w tej pętli VBE i Excel przestają reagować.

Mam nadzieję, że to pomoże ... Wiem, że to mi nie pomogło ... Drats.

EDYCJA: Właśnie pomyślałem, że dodam to. Jeśli chodzi o automatyzację strony internetowej, w większości przypadków nie używam IE. Odkryłem, że jest o wiele lepiej i całkowicie omija ten problem asynchronicznych rzeczy, aby po prostu wykonać posty i zostać sobą. Może nie być najlepszym rozwiązaniem w zależności od tego, co próbujesz zrobić, ale działa niezawodnie, jeśli przyjrzysz się ruchowi dokładnie i sparametryzujesz rzeczy dobrze.

questionAnswers(3)

yourAnswerToTheQuestion