т.е. автоматизация от VB Timing Issue (ReadyState) - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь автоматизировать ввод транспортного средства Reg в программу проверки .gov MOT. 1-й раз, когда я запускаю его без перерыва в коде, прежде чем он вводит Reg, я получаю ошибку «Ошибка времени выполнения 424 Требуется объект», и это относится к строке objIE.Document.getElementById ("Vrm"). Значение = strReg

Если я запускаю его снова, игнорируя предыдущую ошибку и оставляя первое окно, то есть открытое, довольно часто, тогда оно работает.

Если я вставлю разрыв в код перед тем, как он попытается ввести данные в текстовое поле, он всегда будет работать. Это, очевидно, ошибка синхронизации, но я не знаю, как проверить, что дальше, то есть полностью загружено, я предполагал, что READYSTATE_COMPLETE будет делать то, что говорит на жестяной коробке?

Любые указатели будут с благодарностью.

TIA Andrew Полный код ниже

Public Function SearchBot(strReg As String)

    'dimension (declare or set aside memory for) our variables
    Dim objIE As InternetExplorer 'special object variable representing the IE browser
    Dim aEle As HTMLLinkElement 'special object variable for an <a> (link) element
    Dim y As Integer 'integer variable we'll use as a counter
    Dim result As String 'string variable that will hold our result link
'    Dim htmlDoc As HTMLDocument
    'initiating a new instance of Internet Explorer and asigning it to objIE
    Set objIE = New InternetExplorer
    Dim strSource As String

    'make IE browser visible (False would allow IE to run in the background)
    objIE.Visible = True

    'navigate IE to this web page (a pretty neat search engine really)
    objIE.Navigate "https://vehicleenquiry.service.gov.uk/"
    'objIE.navigate "https://www.check-mot.service.gov.uk/"

    'wait here a few seconds while the browser is busy

    Do While objIE.Busy = True Or objIE.ReadyState <> READYSTATE_COMPLETE: DoEvents: Loop

    'in the search box put Registration number in the entry box
    objIE.Document.getElementById("Vrm").Value = strReg
    '    Sheets("Sheet1").Range("A2").Value & " in " & Sheets("Sheet1").Range("C1").Value

    'click the 'go' button
    'wait again for the browser

    objIE.Document.getElementsByName("Continue")(0).Click
    Do While objIE.Busy = True Or objIE.ReadyState <> 4: DoEvents: Loop
    objIE.Document.getElementById("Correct_True").Click
    objIE.Document.getElementsByName("Continue")(0).Click

    GoTo SubExit

    'close the browser
    objIE.Quit
SubExit:
'exit our SearchBot subroutine
End Function
...