Как написать, если функция для более чем одной строки в таблице HTML сайта

0

DataGridReservations - это таблица. Я выполняю поиск по строке.

Мой VBA работает в течение одной строки. Есть ли способ закодировать этот код VBA для поиска каждой строки в таблице? Может быть, увеличив Item (2) в xobj1 =.... на 1 для каждой циклы?

Dim xobj1 As Object
Set xobj1 = IE.Document.getElementById("DataGridReservations").getElementsByTagName("tr").Item(2)
Set xobj1 = xobj1.getElementsByTagName("td")
    If Range("B1").Text = xobj1.Item(9).innertext Then
    Range("H" & (ActiveCell.Row)) = xobj1.Item(3).innertext
    Else
    Range("H" & (ActiveCell.Row)) = "0"
    End If

ЗАПРЕЩАЕТСЯ ПОСЛЕ КОММЕНТАРИИ

Я получаю объект не поддерживает свойство или метод

Dim xobj1 As Object
Dim xobj2 As Object
Dim colRows As Object
Set colRows = IE.Document.getElementById("DataGridReservations").getElementsByTagName("tr")
    For i = 0 To colRows.Length - 1
        Set xobj1 = colRows.Item(i)
        Set xobj2 = colRows.getElementsByTagName("td")
        If Range("B1").Text = xobj2.Item(9).innertext Then
        Range("H" & (ActiveCell.Row)) = xobj2.Item(3).innertext
        Else
        Range("H" & (ActiveCell.Row)) = "0"
        End If
    Next
  • 1
    Вы можете перебрать коллекцию, возвращаемую вызовом getElementsByTagName("tr") (игнорируя первый экземпляр). Например. см .: stackoverflow.com/questions/15555513/…
  • 0
    Да, я просто подумал, может быть, есть способ написать 2 в виде формулы, например, x + 1, где x - номер активного элемента. и просто перебирайте список, пока у меня не закончились элементы tr в таблице. (1.e в первом цикле будет установлен элемент (2), во втором цикле будет установлен элемент (3) и т. Д.)
Показать ещё 1 комментарий
Теги:
excel-vba
excel
html-table

1 ответ

1
Лучший ответ

Если вы хотите перебрать строки со счетчиком, вы можете сделать это следующим образом:

Set colRows = IE.Document.getElementById("DataGridReservations").getElementsByTagName("tr")
For i = 0 to colRows.Length -1
    Set xobj1 = colRows.Item(i)
    'Your code
Next

Индекс начинается с "0". Поэтому счетчик работает с '.Length -1'

Отредактировано, после пересмотренного вопроса:

Dim xobj1 As Object
Dim xobj2 As Object
Dim colRows As Object

Set colRows = IE.Document.getElementById("DataGridReservations").getElementsByTagName("tr")
    For i = 0 To colRows.Length - 1
        Set xobj1 = colRows.Item(i)
        Set xobj2 = xobj1.getElementsByTagName("td")
        If Range("B1").Text = xobj2.Item(9).innertext Then
        Range("H" & (ActiveCell.Row)) = xobj2.Item(3).innertext
        Else
        Range("H" & (ActiveCell.Row)) = "0"
        End If
    Next
  • 1
    внутри вашего для ... дальше я мог бы установить xobj1 = colRows.Item (i)?
  • 0
    Да, конечно. Или colRows (я) . Я должен был написать это :)
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню