2016-11-22 14 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 Webページ文書からデータを抽出しているため、コードを実行できません。

どのようにこのクラッシュを防止するためのアイデアですか?

私がこれまで行ったことは、ループ内で以下の関数のいくつかを呼び出すことですが、それは何の違いもありませんでした。

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でWebページを完全に読み込めますか? –

+0

はい、実際に私がここに示していないコードの最初の部分は、Webページに行き、フォームにいくつかのデータを入力し、 "検索"ボタンをクリックして詳細を表示することです。この最初の部分は問題なく動作します。それが助けになると思うなら、私はそれを示すことができますが、ウェブページはイントラネットです。 – Seb

+0

コードがランダムにクラッシュしているとします。それは必ずしも同じ行ではないということですか?クラッシュする行に共通点がある場合、たとえば[DOM](https://en.wikipedia.org/wiki/Document_Object_Model)を更新するとクラッシュすることはありますか? –

答えて

0

SOLUTION:私はクラッシュするInternet Explorerを回避する方法を見つけましたが、それはこの方法ではなく、他の1を動作し、なぜ私は完全には理解していません。

私がしたことは、最初のFor EachループをForループで置き換えることです。

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 

私は要素の第七親を探していることは重い操作であるかもしれないことを理解することができますが、それは各 Forループと、このように動作していない理由を私はまだ理解していません。

関連する問題