質問: VBAでIEのダウンロード釦をクリックして以降に出てくるjavascriptのpromptメソッド、alertメソッド自動入力に関する質問です。特定のWebPageにおいてVBAでバッチ処理によるダウンロード釦をクリックした瞬間に、通常VBEにある実行中のコードを示す黄色いマークが消えてしまいます(制御不能)。そのため、これ以降のVBAによる操作ができなくなってしまいます。マルチプロセス等で対処可能なようですが、こちらでやってみた限りでは、ClickProcを一度も実行しないでobjInput.clickをして黄色いマークが消えてしまいます。そのため、ダイアログのウィンドウハンドルさえ取れません。当然PostMessage等でWM_COMMANDなどのコマンドも送れません。マルチプロセス等が機能するようになったとして、その後どういったスクリプトにすれば良いのでしょうか?スクリプトの横にやっている内容をコメントしてください。参考
回答: VBAからダウンロードボタンをクリックするということは、VBAを実行するコンテキストからIE内のコンテンツのボタンイベントを呼び出すということと等価です。 要するに、VBA内からMsgBoxで表示したダイアログに対して、自分自身でボタンを押せないのと同じことです。VBAではマルチスレッド動作は出来ませんから、どうしようもありません。 VBAでマルチスレッドは不可能ですが、擬似的にIE側でタイマを使ったスレッドもどきを起こすことで回避は可能です。 例えば、objIEがIEオブジェクトだとして、 ``` objIE.document.getElementById("test_button").Click ``` というコードは、IE側のクリック処理(の先のwindow.alertなど)が処理されない限り、呼び出し元のVBAに制御が戻ってきません。 タイマを使って回避するには、 ``` objIE.document.parentWindow.execScript "window.setTimeout(""document.getElementById('test_button').click();"",10);" ``` などのようにします。このコードは、10ミリ秒後に「document.getElementById('test_button').click();」を実行するようIE側に設定したあと、すぐVBAに制御が戻ってきます。10ミリ秒後にVBA側は何もしなくてもIE側が自動的にクリック処理を起動してくれるので、VBA側はその後の処理(window.alertの処理など)を継続することが出来ます。 URLはダミー