ウェブページ上の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ループの終わりにあるようです。
このが表示されていますが、もちろん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
IEでWebページを完全に読み込めますか? –
はい、実際に私がここに示していないコードの最初の部分は、Webページに行き、フォームにいくつかのデータを入力し、 "検索"ボタンをクリックして詳細を表示することです。この最初の部分は問題なく動作します。それが助けになると思うなら、私はそれを示すことができますが、ウェブページはイントラネットです。 – Seb
コードがランダムにクラッシュしているとします。それは必ずしも同じ行ではないということですか?クラッシュする行に共通点がある場合、たとえば[DOM](https://en.wikipedia.org/wiki/Document_Object_Model)を更新するとクラッシュすることはありますか? –