SendKeysとAppActivateの組み合わせでRPAを実現してみた。ポイントは{TAB}と{ENTER}だ。{TAB}や{矢印キー}でカーソルを移動させ、{ENTER}でボタンを押下すれば良いのだ。そして、表示が出てくるのを待つのはApplication.Waitが簡単だが、WindowAPIで画面のボタンのハンドルIDをゲットし、ボタンの状態(アクティブか否か)を得ることができれば、確実に画面表示を待つことができる。
- まず、AppActivate [title(画面タイトル)]で操作したい画面を捕まえる。
AppActivate "ログイン" - そして、SendKeys {TAB}を繰り返し、目的の場所へカーソルを動かす。
SendKeys (TAB 2] ・・・2回タブ - さらに、SendKeys nn(数値)で設定したい値にする。
SendKeys ID001でロウインIDを設定する。 - ふたたびSendKey {TAB}を繰り返し、実行ボタンに辿り着く。
SendKeys 1234でパスワードを設定する。 - そして、SendKeys {ENTER}で実行ボタンをクリックする。
SendKeys {ENTER}でログインボタンをクリックする。 - 検索のボタンをクリックした後、検索結果の画面が表示されるのを待つには、Application.Waitを使うのが一番、簡単である。Application.Wait Now() + TimeValue("00:00:03")と書くと、3秒待つことができる。
- windowsAPIの関数を駆使し、検索のボタンのハンドルIDを探すと、確実にボタンの操作することができる。
- また、検索結果の表示ボタンのハンドルIDが取得できれば、そのボタンがアクティブか否かを検出することで、検索結果の画面を待つことができる。
以上のようなことをvbaのモジュールに記述すればよい。時々、Appactvateで操作したい画面が捕まらないとか、不可解な現象が発生することがあるので、過信は禁物だ。たまに動かないことがあるので、確認しながら使うのが宜しいと思う。
0 件のコメント:
コメントを投稿