Ошибка времени выполнения ’91’ (переменная объекта или с не заданной переменной блока)

Я относительно новичок в VBA, и я пытаюсь собрать msgbox, который даст мне конкретный номер от веб-очистки, однако я продолжаю работать с ошибкой во время выполнения ’91’, и я просто не могу понять, как это исправить. Я искал бесчисленное количество вопросов, связанных с stackoverflow, youtube-видео и общие поисковые запросы Google, однако не удалось обнаружить ошибку самостоятельно.

Вот код:

Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate ("http://brokercheck.finra.org") Do DoEvents Loop Until IE.ReadyState = 4 'Enter values from the corresponding sheet 'Set some generic typing for ease Set doc = IE.document doc.GetElementbyID("GenericSearch_IndividualSearchText").Value = Worksheets("Master").Range("D203") doc.GetElementbyID("GenericSearch_EmploymingFirmSearchText").Value = Worksheets("Master").Range("C203") Set elements = doc.getElementsByTagName("button") For Each element In elements If element.getAttribute("type") = "submit" Then element.Click Exit For End If Next element Do DoEvents Loop Until IE.ReadyState = 4 'find CRD# Set crd = doc.getElementsByClassName("summarydisplaycrd")(0).innerText 'here is where the run time error occurs MsgBox crd 

и HTML, с которого я пытаюсь получить информацию:

 
[redacted] (CRD# 5944070)

Я просматриваю этот код и сайт finra.org, и у вас есть следующие замечания, которые при решении проблемы должны решить проблему.

введите описание изображения здесь

  1. Представленный вами HTML-код просто неверен, основываясь на фактическом HTML, который возвращается из кнопки «Проверить».

    Фактический HTML-возврат выглядит так, а имя classа – "displayname" , а не "summarydisplaycrd" :

 
[redacted] (CRD# 123456789)
  1. Ваш код выходит из цикла « For each element при поиске первой кнопки «отправить». Это может быть не кнопка «Проверить» (хотя я могу получить результаты в любом случае, вы можете добавить больше логики в код, чтобы обеспечить отправку кнопки «Проверить».

ОБНОВИТЬ

В ходе дальнейшего обзора, хотя я могу реплицировать ошибку типа 91, я до сих пор не знаю, почему ваше имя classа отличается от моего (возможно, IE11, dunno …) в любом случае, я могу разрешить это заставляя более длительную задержку, так как в этом случае цикл DoEvents просто не является адекватным (иногда это происходит, когда данные динамически передаются из внешних функций, браузер – ReadyState = 4 и .Busy = True, поэтому цикл не работает что-нибудь)

Я использую функцию WinAPI Sleep и принудительно задерживаю 1 секунду после нажатия кнопки «Click», зацикливая при условии ReadyState = 4 и .Busy=True .

ПРИМЕЧАНИЕ. Вам нужно будет изменить параметр classname в зависимости от того, как он отображается в вашем HTML.

 Option Explicit Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub finra() Dim IE As Object Dim doc As Object, element As Object, elements As Object, crd Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate ("http://brokercheck.finra.org") Call WaitIE(IE, 1000) 'Enter values from the corresponding sheet 'Set some generic typing for ease Set doc = IE.document doc.GetElementbyID("GenericSearch_IndividualSearchText").Value = "steve" doc.GetElementbyID("GenericSearch_EmploymingFirmSearchText").Value = "ed" Set elements = doc.getElementsByTagName("button") For Each element In elements If element.getAttribute("type") = "submit" Then If element.innerText = "Check " Then element.Click Exit For End If End If Next element Call WaitIE(IE, 1000) Dim itms As Object 'Set itms = doc.getElementsByClassName("displaycrd") crd = doc.getElementsByClassName("displaycrd")(0).innerText 'here is where the run time error occurs MsgBox crd End Sub Sub WaitIE(IE As Object, Optional time As Long = 250) Dim i As Long Do Sleep time Debug.Print CStr(i) & vbTab & "Ready: " & CStr(IE.ReadyState = 4) & _ vbCrLf & vbTab & "Busy: " & CStr(IE.Busy) i = i + 1 Loop Until IE.ReadyState = 4 And Not IE.Busy End Sub 
  • Получение Excel для обновления данных на листе из VBA
  • Защита ячеек в Excel, но они могут быть изменены сценарием VBA
  • Запуск такого же макроса excel в нескольких файлах excel
  • Как вы получаете Range для возвращения своего имени?
  • Код в циклах VBA и никогда не заканчивается. Как это исправить?
  • Почему MS Excel выходит из строя и закрывается в течение процедуры Worksheet_Change Sub?
  • Использование VBA для получения расширенных атрибутов файла
  • Заменить форму массива таблиц с массивом памяти VBA
  • Подождите, пока ActiveWorkbook.RefreshAll закончит - VBA
  • Как предотвратить повреждение общих файлов Excel?
  • Преобразование всех простых текстовых ссылок на гиперссылки
  • Давайте будем гением компьютера.