VBAでIE操作メニュー選択完了まで待機したい
VBAでIE操作メニュー選択完了まで待機したい
●経緯:
VBAを利用し、IEを操作するマクロを組んでいますが、下記の部分で処理が終わるまで待つ方法がわかりません。
IEで、あるWebサイト内にある複数のプルダウンメニューを順に選択して行きますが、このプルダウンメニューはそれぞれ順番に入力していかないと入力できないタイプの物です。
説明がわかりにくいかもしれませんが、下記のような3つのメニューがあり、MenuName1は最初から選択可能な状態。
MenuName2と3はグレーアウトしており選択できないが、MenuName1を選択するとMenuName2が選択可能になり、MenuName2を選択するとMenuName3がそれぞれ選択可能になります。
MenuName1 → 選択可能
MenuName2 → グレーアウト
MenuName3 → グレーアウト
該当のプルダウンメニュー部分のWebソースは後述しますが、上記各メニューを選択後、 fireEvent ("onchange") を実行し、そのまますぐに次のメニューを選択しようとすると、Web側の処理が追いつかずにエラーになってしまいます。
現状、下記のように無理やり一定時間待機させてから次のメニュー選択に移っていますが、他にメニューのグレーアウトが終わるまで待つ方法はありませんでしょうか?
While Now < DateAdd("s", second, Now)
DoEvents
Wend
●HTMLソース:
それぞれ、該当メニュー部分のコードは下記のとおりです。
・アクティブになっているプルダウンメニュー
<select name="MenuName1" onchange="javascript:setTimeout('__doPostBack(\'MenuName1\' ,\'\')', 0)" id="MenuName1" style="width:110px;">
・非アクティブのプルダウンメニュー
<select name="MenuName2" onchange="javascript:setTimeout('__doPostBack(\'MenuName2\' ,\'\')', 0)" id="MenuName2" disabled="disabled" style="width:110px;">
●試したこと:
1)
Do While objIE.Busy = True Or objIE.readyState <> 4
DoEvents
Loop
で、一番最初のWebページ読み込み完了まで待つことはできますが、該当
プルダウンメニューの選択完了を待つことはできませんでした。
2)
Do ~~~
DoEvents
Loop
上記コードをMenuName2、3の実行直前にいろいろ試してみましたが、どうにもうまくいきません。
それぞれ下記のような条件文で記載しましたが、記載のとおりの失敗でした。
2-1)
Do While InStr(objIE.Document.getElementById("MenuName2").outerHTML, "disabled") > 0
→「書き込みできません」
2-2)
Do Until IsNull(objIE.Document.getElementById("MenuName2").disabled)
→無限ループ?ここで止まる
2-3)
Do While objIE.Document.getElementById("MenuName2").disabled = True
→「オブジェクト変数またはwithブロック変数が設定されていません」
2-4)
Obj1 = objIE.Document.getElementById("MenuName2").disabled
Do Until Obj1 Is Nothing
→「オブジェクトが必要です」 ※Obj1はVariant型で宣言
しかも上記、それぞれ何度も繰り返しているうちに、タイミングの問題なのかたまに成功したりします。
さらに、Debug.Print等で各条件文入れてみると、ちゃんと条件結果の値が出てくるので、ますますうまくいかない理由がわかりません。
本件、各プルダウンメニューのグレーアウトが解除されるまで待つ方法を教えてください。
※書き込みには上記(↑)に対する回答を含めてください。
※該当WebサイトのHTMLソース、マクロの全文は長いので抜粋にて記載しています。
不足がある場合は該当部分を探してきますので、どの部分が必要か補足してください。
※該当Webサイトは関係者専用のため、URLは公開できません。
※該当Webサイトは委託先に発注しているもので、Web側の改変は不可能です。
※「検索したけど解決法はありませんでした」と言う旨の回答はご遠慮願います。
※書き込みは他のユーザーの迷惑にならないようにお願いいたします。