このような質問が以前にも出されたことは知っていますが、私の質問は少し異なり、かなり厄介です。私が扱っているのは、入力ボックス内の特定の項目が入力されたときに、より多くのページをロードするいくつかのイベントを持つフォームを持つ Web ページです。これらのイベントが発生すると、ページが再び読み込まれますが、同じ nameprop を持つ同じ URL にとどまります。私は次のタイプのメソッドを別々に使用して、ページがロードされるのを待つのを処理しましたが、VBA がまだ実行を継続し、適切な情報がないページに HTMLDocument 変数を設定してマクロを引き起こしている場合があります。デバッグします。これまでに私が試してきた種類は次のとおりです。
While IE.Busy
DoEvents
Wend
Do Until IE.statusText = "Done"
DoEvents
Loop
Do Until IE.readyState = 4
DoEvents
Loop
これらのイベントを次のようなループに配置しようとさえしましたが、lastModified プロパティは秒単位までの値しか返さず、マクロは新しい値を返すのに十分な速さでフィールドをスピンするため、うまくいきませんでした。同じ秒のページ:
Do Until IE.statusText = "Done" And IE.Busy = False And IE.ReadyState = 4 _
And IE.document.lastModified > LastModified ----or---- IE.document.nameprop = _
"some known and expected name prop here"
While IE.Busy
DoEvents
Wend
Do Until IE.statusText = "Done"
DoEvents
Loop
Do Until IE.readyState = 4
DoEvents
Loop
Loop
それでも、デバッグにつながる HTMLDocument オブジェクトを設定するのに十分な時間待つことができません。次の入力要素を設定し、それをチェックしてコードを進めることを考えましたが、通常、入力要素は HTML に存在しますが、適切なイベントが発生するまで隠されているため、100% 成功することはありません。これは問題にはなりませんが、イベントが発生するまで可能な選択をロードしません。変なページかもしれません。
とにかく...他に何を追加すればよいかわかりません。見るのに役立つ可能性のある何かが他にある場合は、質問してください。私が探しているのは、別のページが進行中ではないことを IE が認識するまで VBA を待機させる方法だと思います。完全に完了するまでに数回ロードするようです。
だから...誰かアイデアはありますか?
編集:試してみるべきいくつかの新しいことを見つけました。それでも、サイコロはありません。これらの試行を追加することが提案されました。これがコードです。何らかの理由で、選択要素のオプションを設定する必要があるイベントを発生させた後にこのアプローチを使用すると、VBE と Excel インスタンスが応答しなくなります... xml を試すことを考えています... コードは次のとおりです。
intCounter = 0
Do until intCounter > 2
Do Until IE.Busy = False: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop
Set HTMLDoc = IE.Document
Do Until HTMLDoc.ReadyState = "complete"
Set HTMLSelect = HTMLDoc.getElementById("ctl00$ctl00$MainContent$ChildMainContent$ddlEmployeeBranchCodes")
intCounter = 0
For each Opt in HTMLSelect
intCounter = intCounter + 1
Next Opt
Loop
Web ページで発生していることに基づいて、このループのどこかで VBE と Excel が応答しなくなることがわかりました。
それが役立つことを願っています...私はそれが私を助けなかったことを知っています.Drats。
編集:これを追加すると思っただけです。Web ページの自動化に関しては、ほとんどの場合、IE を使用しなくなりました。単純に投稿を実行して自分自身を取得する方がはるかに優れており、この非同期の問題を完全に回避できることがわかりました。何をしようとしているのかによっては、最善の解決策ではないかもしれませんが、トラフィックを注意深く見てパラメータ化すれば、かなり確実に機能します。