2016-11-22 256 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崩溃,但我不完全理解为什么它不以这种方式工作,而不是其他的。

我所做的是用一个For iteration循环替换第一个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日可能是一个沉重的操作,但我还是不明白,为什么是这样工作的,而不是与对于每个循环。