2016-11-22 17 views
0

Я пытаюсь запустить макрос, который идет по HTML-документу на веб-странице. Код выглядит нормально, но я не могу даже убедиться в этом, так как Internet Explorer сработает все время до его окончания. Вы можете увидеть здесь первую часть моего кода (более крупный образец находится на here).Internet Explorer случайно сбой

For Each Element In IEDoc.querySelectorAll("td[width='100'][class='ListMainCent'][rowSpan='1'][colSpan='1']") ' 
    Element.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.className = "Bim" ' instead of ID 
Next 


For Each Element In IEDoc.getElementsByClassName("SectionHead") 
    If Element.innerHTML = "Part Usage" Then 
     'MsgBox TypeName(Element.ParentNode.ParentNode.ParentNode)' HTMLTable 
     Element.ParentNode.ParentNode.ParentNode.ID = "Stop" 
    End If 
Next 

Первое слабое место, похоже, находится только в конце первого цикла For, сразу после прохождения этого шага.

Отображается error message, и, конечно же, код не может работать, так как я все еще извлекаю данные из документа HTML-страницы.

Любые идеи о том, как предотвратить этот крах?

То, что я сделал до сих пор, - это вызвать некоторые из следующих функций в цикле, но это не имеет никакого значения.

Sub Timers() 

    Dim PauseTime, Start, Finish, TotalTime 
    PauseTime = 0.2 ' Set duration. 
    Start = Timer ' Set start time. 
    Do While Timer < Start + PauseTime 
     DoEvents ' Yield to other processes. 
    Loop 
    'Finish = Timer ' Set end time. 
    'TotalTime = Finish - Start ' Calculate total time. 
    'MsgBox "Paused for " & TotalTime & " seconds" 
End Sub 

Public Sub Warte_mal() 
    'Workaround to get the overview page in PuMA opened 
    Dim WshShell 
    Set WshShell = CreateObject("WScript.Shell") 
    WshShell.popup "Overview page will be opened", 1, "Have some patience...." 

End Sub 


Sub WaitIE(ie As InternetExplorer) 
    Do Until ie.readyState = READYSTATE_COMPLETE 
     DoEvents 
    Loop 
End Sub 
+0

Можете ли вы полностью загрузить веб-страницу в IE? –

+0

Да, на самом деле первая часть кода, которую я здесь не показывал, состоит в том, чтобы перейти на веб-страницу, ввести некоторые данные в форме и нажать кнопку «Поиск», чтобы отобразить дополнительную информацию. Эта первая часть работает без проблем. Я могу показать это, если вы думаете, что это может помочь, но веб-страница - это интрасеть. – Seb

+0

Вы говорите, что код рушится случайным образом. Означает ли это, что это не всегда одна и та же линия? Если это так, у строк сбоев есть что-то общее, например, всегда ли он сбой при обновлении [DOM] (https://en.wikipedia.org/wiki/Document_Object_Model)? –

ответ

0

РЕШЕНИЕ: Я нашел способ избежать Internet Explorer к сбою, но я не совсем понимаю, почему он работает именно так, а не другой.

То, что я сделал, это заменить первый Для каждого цикла для цикла итерации.

longueur = IEDoc.querySelectorAll("td[width='100'][class='ListMainCent'][rowSpan='1'][colSpan='1']").length - 1 

For i = 0 To longueur 

IEDoc.querySelectorAll("td[width='100'][class='ListMainCent'][rowSpan='1'][colSpan='1']")(i).ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.ParentNode.className = "Bim" 

    Next i 

Я могу понять, что, глядя на 7-й родитель элемента может быть тяжелая работа, но я до сих пор не понимаю, почему он работает именно так, а не с Для каждого цикла.

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