30日間無料体験実施中!!『Kindle Unlimited』今すぐチェック!! >>

エクセルVBAでブラウザから出されるポップアップダイアログを押す方法

エクセルVBAをよくわからないままに適当に作成することがあるのですが、ブラウザ操作(いわゆるGUI操作)を制御したいときってありますよね。なんかの業務システムって基本的にGUI操作でボタンポチポチして所望のページまで行くってのが多いと思います。

制御している中でGUIのボタンをポチっと押した瞬間、ダイアログがポップアップ(メッセージボックス)が出てきてVBA処理が止まってしまい、所望のページにたどり着かず永遠に処理されないままになってしまいます。

なんて調べればいいんだろって感じで言葉もよくわからなかったのですが、やりたいことは
エクセルVBAでポップアップ画面のOKをクリックする方法
ExcelマクロでWEBページのjavascriptのポップアップのOKボタンを押す方法
こんなことです。

たとえばVBAで

 SendKeys "{ENTER}"

とかを記述してエンター押させればポップアップ押せるんじゃねーの??と思いついて作成すると見事に動きませんでした。
ネットワークエンジニアとして業務している中で壁にぶち当たったので一つご紹介したいと思います。
(ネットワークエンジニア関係ないんだけど。笑)

そもそもなんで押せないの??って調べてみると、VBAのほとんどの処理は「ある命令が完了したら次の命令へ進む」という同期処理が一般的で、(ポップアップダイアログ)メッセージボックスが表示された時点で、Excel上のVBAは入力待ちとなり動作が止まるとのことみたいです。

なので他の非同期のプログラムを裏で動作させてポップアップウィンドウを消すというアプローチも取れるそうなのですが、正直コードみても全然わかりませんし、何をどういじったら私の環境に合うのかもわかりませんでした。笑

プログラミングとかまともに勉強したことないです。CiscoのConfigいじるくらいしかできません。。。

結果的には、どうやらJavascriptにアプローチをかけた別の方法もあり、ポップアップウィンドウはブラウザ上でjavascriptが呼び出されalert関数やconfirm関数が動作しているとのこと。

まずalert関数、confirm関数って何よ?ってところから始まったのですが、どうやらこれみたいです。

alert関数によるポップアップ

alert2.png
OKのみ押す。確認の意味が強いものです。アラートなので警告ですね。果たして必要なのかって思うけど、確認は必要ですね。

confirm関数によるポップアップ

confirm.png
OKボタンとキャンセルボタンがあるのがconfirm関数で書かれたウィンドウ。
基本的にOKとキャンセルで後の処理を別にしたいときに利用するもの。

具体的にどうやるのか

objIE.navigate "JavaScript:function alert() { return true; }"
objIE.navigate "JavaScript:function confirm() { return true; }"

この2行のうちどちらかを追加するだけです。alertを押したいなら上の一行。confirmを押したいなら下の一行。両方消したいなら二行追加すればよいです。

意味の解釈ですが、ポップアップをOKを押したい = 必ずOK(true)にすると考えればOKです。

そもそもなぜこんな方法が使えるのかは詳しくはわかりませんが、同じ関数名が呼び出されたとき、あとから呼び出された方に上書きされてしまうとかいうjavascriptの特殊な仕様のためだそうです。

とはいえ、これで無事にポップアップをOKでエクセルVBAを続行させることができました。感動です。

ボタンを押した判定とかは取得できないようです…

コメント

タイトルとURLをコピーしました