2025年1月30日木曜日

vbaでAppActivate [title]とSendKeys {TAB} or {ENTER}等々で基幹システムへのログイン、検索といった様々な画面の操作を簡単に自在に操る。

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 件のコメント:

コメントを投稿