2016-11-22 141 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日可能是一個沉重的操作,但我還是不明白,爲什麼是這樣工作的,而不是與對於每個循環。