2016-03-16 3 views
1

Я разрабатываю макрос в Macro Express Pro, который использует VBScript для очистки таблицы HTML для сбора данных. Данные, которые я собираю, находятся в столбце FLN. Я хочу создать список, который пользователь может выбрать из FLN, затем они могут собрать остальные детали в строке для использования в других приложениях. Список выглядит следующим образом:Использование DOM для поиска последней строки в таблице HTML

enter image description here

Моя проблема заключается в том, что список показывает только семь позиций. Таблица, которую я использую для этого примера, имеет восемь строк. То, что происходит, я зацикливаю, чтобы создать этот список, но когда я закончу копирование последнего FLN и перехожу к следующей строке в таблице (выделено желтым цветом), я получаю требуемую ошибку объекта.

enter image description here

мне нужно, чтобы быть в состоянии прочитать эту строку, так что я могу захватить все строки в таблице, а затем выйти из цикла, когда я достигаю выделенную линию. К сожалению, создатели сайта со столом никогда не называли эту таблицу. Существует div, у которого есть ID (div id="pnlBtn"). Я попытался найти этот идентификатор и получить объектную ошибку.

enter image description here

Я сейчас пытаюсь найти последнюю строку в таблице, но это дает мне ошибку объекта. Я знаю, что часть моего кода работает, поскольку я смог создать список выше. Это было сделано путем установки счетчика I в Do Until...Loop на 8, который производит только семь строк. Если я установил I в 9, я получаю ошибку объекта.

Вот код, я работаю с:

tdNode = 50 

    FLNDCC = objIE.Document.GetElementsByTagName("table")(0).GetElementsByTagName("td")(tdNode).GetElementsByClassName("txt_input1")(0).Value 
    I = 1 
    List = "" 
    intExitCount = 1 
    Do Until I = 8 
     If FLNDCC = NewFLNDCC Then 
     Exit Do 
     End If 
     If NewFLNDCC <> "" Then 
     FLNDCC = NewFLNDCC 
     End If 

     FLNDCC = I & ". " & FLNDCC 
     List = List & FLNDCC & vbCrLf 
     FLNDCC = Replace(FLNDCC, I & ". ", "") 

     TestRow = objIE.document.getElementsByTagName("tr") 
     For j = 0 To TestRow.length 
      MsgBox j 
     Next 

     I = I + 1 

     NewFLNDCC = objIE.Document.GetElementsByTagName("table")(0).GetElementsByTagName("td")(tdNode).GetElementsByClassName("txt_input1")(0).Value 

     If IsEmpty(NewFLNDCC) = True Then 
     Exit Do 
     End If 

     intExitCount = intExitCount + 1 
     If intExitCount = 10 Then 
     MsgBox "Do loop in VERIFY_HOV subroutine stuck in a loop." & vbCrLf & "Please submit an issue request with this message.", 48, "Stuck in Do Loop" 
     SetEverythingToNothing 
     End If 
    Loop 
    If I > 1 Then 
     Opt = InputBox("Please select the FLNDCC you want to work with:" & vbNewLine & List & vbNewLine, "Select an FLNDCC") 
     If IsEmpty(Opt) = True Then 
     Wscript.Echo "EXIT" 
     SetEverythingToNothing 
     End If 
     Opt = Opt - 1 
     tdNode = 50 + (Opt * 21) 
    Else 
     tdNode = 50 
    End If 
    FLNDCC = objIE.Document.GetElementsByTagName("table")(0).GetElementsByTagName("td")(tdNode).GetElementsByClassName("txt_input1")(0).Value 

Есть верный способ, чтобы найти последнюю строку таблицы, которая не производит ошибку объекта?

ответ

0

Я нашел решение. Мне не нужно было найти последнюю строку (выделено желтым цветом), мне просто нужно было избежать ошибки. Линия, которая создавала ошибка:

NewFLNDCC = objIE.Document.GetElementsByTagName("table")(0).GetElementsByTagName("td")(tdNode).GetElementsByClassName("txt_input1")(0).Value 

На моем девятом ходу через петлю, я не смог найти значение txt_input1, потому что там не было. Это дало мне объектную ошибку. Вот как я ее решил:

On Error Resume Next 
    NewFLNDCC = objIE.Document.GetElementsByTagName("table")(0).GetElementsByTagName("td")(tdNode).GetElementsByClassName("txt_input1")(0).Value 
On Error goto 0 

Теперь я могу иметь I набор 100 и, несмотря на то, есть только 8 видимые линии, она будет выгонять раз txt_input1 больше не доступен и распечатывает список со всеми 8 линий.

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