こんにちは。
最近、Selenium系開発が続いています。
ツールの動作において不都合?が発生した際には MsgBox で利用者と対話したりしたいのですが、Webブラウザーを開いた以降は前面に表示されているので、Excel VBA から表示した MsgBox に気づいてもらえなかったりします💦
で、当初は、該当Webブラウザを最小化する方法を考えていたのですが、今使ってるSelenium Basicの限界なのか、最大化はできるが最小化ができない💦
で、仕方なくWebブラウザのサイズ変更(サイズ縮小)でせめて MsgBox に気が付かせようと思ったのですが、Excel自体が前面に来ていないかぎり、MsgBox は表示されないまま(=ピコピコモード?)なののですね…💦
ということで、発想を変えて、Excelを前面にもってこれないか?と調査した結果、解決策にたどり着き、備忘録する運びとなりました。^^
■ 動作環境
OS: Windows 8.1(64ビット)
Excel: 2013(32ビット)
Chrome: 88.0.4324.150(64ビット)
Selenium Basic: v2.0.9.0
■ AppActivateステートメント
結論は、指定したアプリケーションをアクティブ化する AppActivate ステートメントを使用します。
<構文>
> AppActivate title[, wait]
<引数>
title は、アクティブにするアプリケーションのタイトルバーに表示される文字列を指定(String)。また、Shell 関数から返されるタスクIDを指定することも可能。
wait は、省略可能(既定値: False)。該当アプリケーションをアクティブにする前に、呼び出し元のアプリケーションにフォーカスを移すかどうかを指定(Boolean)。
<戻り値>
なし
■ 参考コード
□ 駄目パターン
※これ以降も同様ですが、「m_」で始まる英語大文字の変数名みたいな名称は、何れも私が別途定義している定数です。
これを実行すると MsgBox のところで、タスクバー上のExcelアイコンがピコピコします。Webブラウザが前面に表示されているので想定どおりの動きです。^^
□ 改善後
検索ボタンのクリック後、MsgBox発行前に…
> AppActivate Application.Caption
を差し込んだことで、Excelが前面に登場し、メッセージボックスが表示されたことを正しく?キャッチできました。
Excel VBAで、Application オブジェクトの Caption プロパティは、Microsoft Excel ウィンドウのタイトル バーに表示される名前を取得します。それを AppActivate ステートメントに渡すことで、結果、Excelウィンドウが前面に表示されたわけです。
■ まとめ
いかがでしたでしょうか?
そもそもは Selenium 経由で立ち上げたWebブラウザを最小化したいなぁ…と思っていたのですが、AppActivate ステートメントのお陰で目的のことが簡単に実現できました。^^
壁にぶち当たった際は、視点を変える…ですね!
なお、本備忘録を活用した【メルカリ管理ツール】を以下サイトで提供しております。
ご興味ございましたらご覧ください。
次回以降も、苦労した点を備忘録しようと思います。
Comments