Возможно, что htmlEle.getElementsByTagName("span")(1)
пытается вернуть массив элементов, где есть только 1, и, таким образом, единственное возвращаемое значение этого массива будет находиться в первой точке массива htmlEle.getElementsByTagName("span")(0)
.
Кроме того, то, как вы используете Split()
, не имеет смысла для меня. Параметрами для Split()
являются Split(expression, [ delimiter, [ limit, [ compare ]]])
, означающие, что .innertext
элемента <span>
, который вы ищете, будет разделителем? Кроме того, я нигде не вижу, чтобы harborDesc
определялся как массив соответствующего размера (или любого размера) в первую очередь, что, вероятно, объясняет ваш Error 91
, так как Split()
нужен массив для принять значения.
EDIT:
Добавлю это из моих комментариев.
Если вам нужен текст из внутреннего текста <span>
, вы должны делать что-то вроде
Dim harborDesc() As String
Redim harborDesc(0 to 1)
For Each htmlEle In ieObj.document.getElementsByClassName("nav-list-item")
Redim Preserve harborDesc(0 to UBound(harborDesc) + 1)
harborDesc(UBound(harborDesc) - 1) = htmlEle.getElementsByTagName("span")(0).innerText
Next htmlEle
РЕДАКТИРОВАТЬ 2:
Если у вас возникают проблемы с поиском элементов «span», возможно, вы находите соответствующий класс «nav-list-item», в котором нет элемента «span». В этом случае было бы целесообразно создать вложенный For-Loop
для проверки, например
Dim ieObj As InternetExplorer
Set ieObj = CreateObject("InternetExplorer.Application")
Dim htmlEle As Object
Dim spanEle as Object
Dim itemurl As String
Itemurl = “url of interest”
ieObj.navigate itemurl 'in this case, the web page is has the same name as the itemNum
Do While ieObj.readyState <> READYSTATE_COMPLETE 'wait by repeating loop
until ready
Loop
For Each htmlEle In ieObj.document.getElementsByClassName("nav-list-item")
For Each spanEle in htmlEle.getElementsByTagName("span")
Debug.Print spanEle.innertext
Next spanEle
Next htmlEle