Я автоматизирую IE через VBA, и я не могу заставить код VBA ждать, пока страница не будет загружена до захвата документа. Это приводит к разным сбоям при слишком быстром моем коде. Как я могу заставить VBA ждать загрузки страницы IE? Многие из методов, которые я пробовал, я нашел в stackoverflow, но никто не работает для меня.Как заставить VBA ждать загрузки страницы IE?
ie
is my InternetExplorer
объект.
Я попытался, но безрезультатно:
Do
If ie.readyState = 4 Then
Exit Do
Else
DoEvents
End If
Loop
Также:
Do While ie.Busy Or Not ie.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop
Также:
Do
DoEvents
Loop Until ie.ReadyState = READYSTATE_COMPLETE
Я даже попытался:
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
...
Do
Sleep 250
Loop Until ie.readyState = READYSTATE_COMPLETE
Ни один из них не работал, код пропускает цикл сразу и пытается захватить html-документ страницы, даже если страница не закончила загрузку.
Я перехожу на страницу входа, заполняя имя пользователя и пароль и нажав кнопку входа в систему. После входа в систему мне нужно изменить некоторые поля (выпадающие списки и текстовые поля). После того, как я изменил эти поля, я использую VBA, чтобы нажать кнопку, чтобы сохранить настройки, а затем перейти на другую страницу. Код неправильно задает поля, потому что он пропускает предыдущее ожидание загрузки страницы, поэтому я вхожу в следующую часть своего кода с неправильными настройками.
Мне интересно, возможно ли это из-за запроса ajax? Я не знаю, как сказать.
У кого-нибудь есть надежное средство ожидания загрузки страницы в IE, прежде чем захватить html-документ?
Я знаю, что код делает то, что я хочу, потому что если я вручную перейду через него и дождитесь загрузки страницы, он будет вести себя так, как ожидалось.
При необходимости я могу добавить дополнительные разъяснения.
Вы пытались дождаться события DocumentCompleted? – trincot
У меня нет. Я не так хорошо знаком с использованием событий объекта в VBA. Я работаю в поисковых системах и не создаю отличную документацию. – Soulfire
Хорошо, я привел пример в своем ответе. Кстати, это DocumentComplete без d в конце. Виноват. – trincot