Улучшение вашего кода
Ваша проблема в том, что при нажатии кнопки «Отправить» она не активируется. Вы должны включить это. Если вы наблюдаете это, кнопка отправки становится активной, когда вы вручную вставляете текст в поле ввода длиной более 3 символов. Ваш код вставляет текст, изменяющий атрибут значения поля ввода, но он не вызывает событие «onchange». Используя инструменты веб-разработчика в Chrome, я увидел, что поведение формы (поле ввода и кнопка отправки) встроено в jQuery.
Одним из возможных решений может быть использование objIE.Document.parentWindow.ExecScript "jQuery(""#text-search"").trigger(""change"")"
после вставки значения и перед нажатием на кнопку отправки.
Вот полный код:
Sub HorseSearch()
'Dim objIE As Object
'Set objIE = CreateObject("InternetExplorer.Application")
Dim obJe As InternetExplorer
Set objIE = New InternetExplorer
'make web page visible
objIE.Visible = True
'navigate objIE to this web page
objIE.navigate "https://www.britishhorseracing.com/racing/horses/racehorse-search-results/"
'wait here a few seconds while the browser is busy
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
'in the search box put cell "A2" value which holds a horse name Tiger Roll
objIE.Document.getElementById("text-search").Value = Sheets("Sheet1").Range("A2").Value
On Error Resume Next
objIE.Document.parentWindow.ExecScript "jQuery(""#text-search"").trigger(""change"")"
On Error GoTo 0
'click the 'go' button
objIE.Document.getElementById("Submit").Click
End Sub
Другое решение
Зачем использовать форму, когда мы можем прямо go на страницу результатов? Страница результатов выглядит примерно так: https://www.britishhorseracing.com/racing/horses/racehorse-search-results/#!?pagenum=1&q=tiger%20roll&rated=false
, где значение параметра q
- это текст, который вы вводите в поле ввода. Мы могли бы перейти непосредственно к этой странице (используя значение из ячейки A22
для параметра q
в URL).
Sub HorseSearch()
'Dim objIE As Object
'Set objIE = CreateObject("InternetExplorer.Application")
Dim obJe As InternetExplorer
Set objIE = New InternetExplorer
'make web page visible
objIE.Visible = True
'navigate objIE to this web page
objIE.navigate "https://www.britishhorseracing.com/racing/horses/racehorse-search-results?pagenum=1&q=" & Sheets("Sheet1").Range("A2").Value & "&rated=false"
'wait here a few seconds while the browser is busy
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
'You have loaded the result page :)
End Sub