Internet Explorer随机崩溃

时间:2016-11-22 15:27:45

标签: html vba internet-explorer

我正在尝试在网页上运行HTML文档上的宏。代码似乎没问题,但我甚至无法确定它,因为Internet Explorer在它结束之前一直崩溃。你可以在这里看到我的代码的第一部分(更大的样本在here上)。

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

1 个答案:

答案 0 :(得分:0)

解决方案:我找到了一种避免Internet Explorer崩溃的方法,但我不完全理解为什么它以这种方式工作而不是另一种方式。

我所做的是用For迭代循环替换第一个 For Each 循环。

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个父级可能是一个繁重的操作,但我仍然不明白为什么它以这种方式工作而不是 For Each 循环。