Это своего рода репозиция для реорганизации моего вопроса, но:
Я пытаюсь сопоставить таблицу электронных таблиц с ячейками B1 со всеми ячейками в 10-м столбце таблицы на веб-странице. Если theres соответствует, я хочу скопировать этот текст ячейки ячейки 4. Пока у меня есть:
Dim colRows As Object
Dim objDataGrid As Object
Dim xobj1 As Object
Dim xcel As Object
Set objDataGrid = IE.Document.getElementById("DataGridReservations")
Set colRows = objDataGrid.getElementsByTagName("tr")
For Each element In colRows
Set xcel = colRows.getElementsByTagName("td")
If Range("B1").Text = xcel.Item(9).innertext Then
Range("H" & (ActiveCell.Row)) = xcel.Item(3).innertext
Else
Range("H" & (ActiveCell.Row)) = "0"
End If
Exit For
Next
Я получаю сообщение об ошибке на линии
set xcel = colRows.getElementsByTagName....
Вытягиваю волосы. Кроме того, просто для того, чтобы убедиться, что элемент "Для каждого элемента в colRows" относится только к "getElementsbyTagName (" tr "), который я определил в наборе colRows. он не будет также захватывать теги td, заключенные в квадратные скобки в tr справа?
У нас может быть больше шансов на успех:
Sub sof20255214WebpageCell()
Dim colRows As Object
Dim objDataGrid As Object
Dim xobj1 As Object
Dim element
Dim xcel As Object
Dim IE
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://www.example.com/DataGridPage.php"
While (IE.Busy Or IE.READYSTATE <> 4)
DoEvents
Wend
Set objDataGrid = IE.Document.getElementById("DataGridReservations")
Set colRows = objDataGrid.getElementsByTagName("tr")
For Each element In colRows
Set xcel = element.getElementsByTagName("td")
If Range("B1").Text = xcel.Item(9).innerText Then
Range("H" & (ActiveCell.Row)) = xcel.Item(3).innerText
Else
Range("H" & (ActiveCell.Row)) = "0"
End If
Exit For
Next
IE.Quit
End Sub
Во всяком случае, мы не можем использовать это (BAD):
Set xcel = colRows.getElementsByTagName("td")
Поскольку colRows представляет собой набор строк, но не один объект строки. Тем не менее, вы можете использовать это (Хорошее):
Set xcel = colRows.Item(0).getElementsByTagName("td")