Я проверяю почти 10000 веб-страниц и возвращаю значения в электронную таблицу Exel. Использование объекта IE приводит к противоречивым результатам, и я хочу вместо этого использовать MSXML, поэтому я создал две функции, которые возвращают веб-страницу, одну с использованием IE, а другую с использованием MSXML. Они должны вернуть тот же результат. Вот функция IE:
Function getIEPage(link) As HTMLDocument
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Top = 0
.Left = 0
.Width = 800
.Height = 600
.Visible = False
End With
objIE.navigate (link)
While objIE.readyState <> 4
DoEvents
Wend
Set getIEPage = objIE.document
End Function
Вот функция XML:
Function getXMLPage(link) As MSHTML.HTMLDocument
Dim ie As MSXML2.XMLHTTP60
Set ie = New MSXML2.XMLHTTP60
ie.Open "GET", link, False
ie.send
While ie.readyState <> 4
DoEvents
Wend
Dim HTMLDoc As MSHTML.HTMLDocument
Set HTMLDoc = New MSHTML.HTMLDocument
HTMLDoc.body.innerHTML = ie.responseText
Set getXMLPage = HTMLDoc
End Function
На следующем шаге я хочу извлечь все теги «a», например:
Dim webPage As HTMLDocument
Dim allLinks1 As Variant
Set webPage = getIEPage("https://www.stackoverflow.com/")
Set allLinks1 = webPage.getElementsByTagName("A")
или как это:
Dim webPage As HTMLDocument
Dim allLinks2 As Variant
Set webPage = getXMLPage("https://www.stackoverflow.com/")
Set allLinks2 = webPage.getElementsByTagName("A")
Но они не дают того же результата. Функция IE выполняется, но XML выдает ошибку времени выполнения 91 «Переменная объекта или переменная блока не установлена»