Excel ждать, пока откроется веб-страница

Я написал сценарий VBA для загрузки веб-страницы, затем скопировал все содержимое HTML в строку, а затем выбрал конкретные данные из этой строки. По сути, я ищу расписание поездов, затем копирую детали для 5 поездок (время отправления, пересадка, время в пути и стоимость)

У меня есть сценарий, приведенный выше, для выполнения одного поиска, но теперь я хочу зациклить его и запустить около 300 запросов. Проблема, которую я обнаружил, заключается в том, что скрипт не будет ждать открытия веб-страницы, и поэтому возвращаемая строка пуста, фактически ничего не возвращая.

Что мне нужно сделать, это загрузить адрес, дождаться загрузки страницы, а затем продолжить сценарий. У вас есть какие-нибудь предложения? Я много искал и просто не смог отсортировать, я пытался Application.Wait в ряде мест и до сих пор не впереди.

Код, который я использую ниже:

Sub CreateIE()
Dim tOLEobject As OLEobject
Dim NRADDRESS As String
NRADDRESS = Range("h11")
On Error Resume Next
Worksheets("Sheet1").Shapes.Range(Array("WebBrow")).Delete
Set tOLEobject = Worksheets("Sheet1").OLEObjects.Add(ClassType:="Shell.Explorer.2",Link:=False, _
DisplayAsIcon:=False, Left:=0, Top:=15, Width:=912, Height:=345)

For Each tOLEobject In Worksheets("Sheet1").OLEObjects
If tOLEobject.Name = "WebBrowser1" Then
With tOLEobject
.Left = 570
.Top = 1
.Width = 510
.Height = 400
.Name = "WebBrow"
End With


With tOLEobject.Object
.Silent = True
.MenuBar = False
.AddressBar = False
.Navigate NRADDRESS
End With
End If
Next tOLEobject

Sheets("Sheet2").Activate
Sheets("Sheet1").Activate

Call ReturnText
End Sub

NRADDRESS это веб-адрес, состоящий из нескольких различных параметров (источник, пункт назначения, дата и время)

"Call ReturnText" - это скрипт, который я использую, чтобы скопировать HTML-код веб-сайта в строку и извлечь то, что я хочу.

2 ответа

Решение

В этом случае вы можете попробовать что-то вроде этого:

Set objIE = CreateObject("InternetExplorer.Application")
objIE.navigate strURL

Do While objIE.readyState <> 4 And objIE.Busy
   DoEvents
Loop

который, я полагаю, требует ссылки на Microsoft Internet Controls.

Когда я впервые начал использовать VBA для загрузки веб-страниц, я также использовал объект IE, но позже обнаружил, что он создает всевозможные сложности, которые мне не нужны, когда все, что мне действительно нужно, это загрузить файл. Теперь я всегда использую URLDownloadToFile.

Хороший пример его использования можно найти здесь:

VBA - URLDownloadToFile - в загруженном файле отсутствуют данные

Другие вопросы по тегам