Во-первых: вы хотите работать и установить innerHTML так, как вы собираетесь проходить документ DOM.
Во-вторых: эта строка
Set MainMenuList = HTMLDoc.getElementById("menu_wholesome")(0)
Это неверно.getElementById
возвращает один элемент, в который нельзя индексировать.Вы индексируете в коллекцию.
Обратите внимание: и div, и ul ведут к одному и тому же содержимому.
Если вы хотите выбрать их отдельно, используйте querySelector
HTMLDoc.querySelector("div#menu_wholesome")
HTMLDoc.querySelector("ul#menu_wholesome")
Указанная выше цель сначала по имени тега, а затем по атрибуту id.
Если вы хотите получить коллекцию идентификаторов, используйте querySelectorAll
, чтобы вернуть нодлист из соответствующих элементов.Идентификаторы должны быть уникальными для страницы, но иногда это не так!
HTMLDoc.querySelectorAll("#menu_wholesome")
Затем вы можете индексировать в список узлов, например,
HTMLDoc.querySelectorAll("#menu_wholesome").item(0)
VBA:
Option Explicit
Public Const MenuPage As String = "http://greyhoundstats.co.uk/index.php"
Sub BrowseMenus()
Dim sResponse As String, HTMLDoc As New MSHTML.HTMLDocument
Dim MainMenuList As Object, div As Object, ul As Object
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", MenuPage, False
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
sResponse = StrConv(.responseBody, vbUnicode)
End With
sResponse = Mid$(sResponse, InStr(1, sResponse, "<!DOCTYPE "))
HTMLDoc.body.innerHTML = sResponse
Set MainMenuList = HTMLDoc.querySelectorAll("#menu_wholesome")
Debug.Print MainMenuList.Length
Set div = HTMLDoc.querySelector("div#menu_wholesome")
Set ul = HTMLDoc.querySelector("ul#menu_wholesome")
Debug.Print div.outerHTML
Debug.Print ul.outerHTML
End Sub