2013-11-27 1 views
0

DataGridReservations - это таблица. Я выполняю поиск по строке.Как написать, если функция для более чем одной строки в таблице веб-сайта HTML

Мой 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 

REWRITE ПОСЛЕ КОММЕНТАРИИ

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

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") '(не обращая внимания первый экземпляр). Например. см. http://stackoverflow.com/questions/15555513/get-all-td-from-tr-using-vba-code –

+0

Правильно, я просто подумал, может быть, был способ написать 2 как формулу типа x +1 где x - номер активного элемента. и просто прокрутите список до тех пор, пока я не выйду из трёх элементов в таблице. (1.e в первом цикле будет задан пункт (2), второй цикл установит элемент (3) и т. Д.) – TPJ87

+0

Чтобы реорганизовать, я также написал этот вопрос http://stackoverflow.com/q/ 20255214/3023445 – TPJ87

ответ

1

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

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

Индекс sta rts в '0'. Поэтому счетчик работает на».Length -1'

Edited после пересмотренного вопроса:

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)? – TPJ87

+0

Да, конечно. Или _colRows (i) _. Я должен был написать это :) – Michael

+0

hmmm. объект не поддерживает свойство или метод. see question for my rewrite – TPJ87

Смежные вопросы