Проблема возникает только при использовании getElementsByClassName
Dim HTTP As New MSXML2.XMLHTTP60
HTTP.open "POST", strWWW, False
HTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
HTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
HTTP.send ("obj = " & strID)
Dim HTML As New MSHTML.HTMLDocument
HTML.body.innerHTML = HTTP.responseText
Dim eleCol As MSHTML.IHTMLElementCollection
Set eleCol = HTML.getElementsByClassName("listEvent sro") '<-- The problem is happening here.
Тесты проводятся на Windows 8.1 и Windows XP.
Windows 8.1
Пока в IDE все работает нормально, но при компиляции просто появляется ошибка:
mshtml.dll 11.00.9600.18860
mshtml.tlb 11.0.9600.16518
Метод существует, но теперь почему он работает в IDE, а не в компилируемом?
Windows XP
Даже в IDE не работал, представляя следующее сообщение об ошибке:
mshtml.dll 8.0.6001.23588
mshtml.tlb 8.0.6001.18702 (старая версия и отсутствует getElementsByClassName)
mshtml.tlb 11.0.9600.16518 (используется эта версия, но она не работает)
Что я делаю неправильно?





Попробуйте следующий обходной путь, который использует синтаксис селектора css для выбора по классу. В современных браузерах это более быстрый способ сопоставления элементов. Это может сработать.
Dim eleCol As Object
Set eleCol = HTML.querySelectorAll(".listEvent.sro")
Кроме того, проверьте, можете ли вы удалить использование составного класса и иметь один класс, например.
Set eleCol = HTML.querySelectorAll(".listEvent")
Вы используете For Loop от 0 до .Length -1 вместо возвращаемого nodeList.
Ваш совет решил проблему.
Список узлов, которые я использовал...
Dim eleMen As MSHTML.IHTMLElement
For Each eleMen In eleCol
debug.print eleMen.innerText
Next eleMen
... и он работал отлично, точно так же, когда он не использовался
HTML.getElementsByClassName
Сколько пользуюсь getElementsByTagName тоже нормально работает, только
getElementsByClassName который отображает эту ошибку в исполняемом файле,
а не в ИДЕ.
Это ошибка в MSHTML?
Еще одна деталь в том, что это тоже работало без проблем...
Set eleCol = HTML.querySelectorAll(".listEvent.sro").Item(0).getElementsByTagName("td")
... вернул все нужные мне узлы.
Большое тебе спасибо!
Вы получаете исключение? Какую ошибку показывает?