【EXCEL VBA | ノート】SendKeysでパソコンのキー操作を自動化する

スポンサーリンク

SendKeysでパソコンのキー操作を自動化する

SeleniumBasic使って、ブラウザ操作を自動化してるんですが、ファイル選択のダイアログボックスの操作とか、色々ゴシャゴシャコード書かないと行けないんで面倒だなと思ってたんですが、SendKeysでやったらサクサクできたんで忘れないように使い方を記しておこうと思います。

SeleniumBasicってなに?って方は以下の記事で紹介していますので参考にして下さい。

SendKeysの使い方

実際のコードの方がわかりやすいと思うのでサンプルコードから。

Sub sample()
  
    ' メモ帳の起動
    Shell "C:\Windows\Notepad.exe", 1
       
    'SendKeysでキー操作
    SendKeys "文字を入力"       '文字入力
    SendKeys "{Enter}"         'Enterで改行
    
End Sub

メモ帳を起動して、そのメモ帳に”文字を入力”という文字列を入れて、Enterで改行するという簡単なコードです。

実行するとこのようになります。

注意してもらいたいのは、キー操作の自動化なので、F8キーでステップ実行すると、VBEのウィンドウがアクティブになってしまうので、”文字を入力”という文字が、コードの中に書かれてしまいます。

実行はF5で一気にやって下さい(^o^)

一応ステップ実行するとどうなるか

こんなんなっちゃいますw

このように、

SendKeys キーor文字列, 設定

”SendKeys”に続けて、第一引数で各キーに割り当てられている記号を書くことで、キーが押された状態を実現することができます。

文字列を指定すると、その文字列が送られます。

第2引数の設定は、TrueかFalseで指定します。Trueを指定すると、SendKeysで指定した処理が実行されてから制御が戻ります。Falseを指定すると、処理が住むのを待たずに実行が可能です。※省略するとFalse

使い方はシンプルで簡単ですね。

キーの記号

サンプルコード内である「"{Enter}"」のように、他のキーもどのように書くのかが決まっています。

キーコード
SHIFT+ ※他のキーと組み合わせで使用
CTRL^ ※他のキーと組み合わせで使用
ALT%  ※他のキーと組み合わせで使用
BackSpace {BACKSPACE} または {BS}
Break{BREAK}
CapsLock{CAPSLOCK}
Clear{CLEAR}
Delete または Del{DELETE} or {DEL}
{DOWN}
End{END}
Enter (テンキー){ENTER}
Enter~ (チルダ)
Esc{ESCAPE} or {ESC}
Help{HELP}
Home{HOME}
Ins{INSERT}
{LEFT}
NumLock{NUMLOCK}
PageDown{PGDN}
PageUp{PGUP}
Return{RETURN}
{RIGHT}
ScrollLock{SCROLLLOCK}
Tab{TAB}
{UP}
F1 ~ F15{F1} ~ {F15}

【使用例】

サンプル説明
 SendKeys “abc” a→b→cを順番に押した状態
 SendKeys “{ENTER}” Enterを押した
 SendKeys “{F4}” [F4]を押した
SendKeys “^(v)”Ctrlキーを押しながらvを押した(ペースト)
SendKeys “{ENTER 100}”Enterを100回押した

使い所

僕の場合は、WEBアプリケーションの自動操作で、SeleniumBasicと合わせて使っています。

例えば、画像をアップロードする場合とか、画像アップロードボタンを押すとファイル選択のダイアログボックスが出てきますので、

  • 要素をクリックしてダイアログボックスを表示(この時点でダイアログボックスのファイル名が入るところが勝手にアクティブになっている)
  • あらかじめEXCELシートに入れてあった、画像ファイルのPATHをコピー(sheet.Range("A3").copy とか)
  • SendKeysでペースト(SendKeys “^(v)”)
  • SendKeysでEnter(SendKeys “{ENTER}”)
driver.FindElementByCss("セレクタ").Click ’画像アップロードボタンクリック

sheet.Range("A3").Copy ’画像ファイルのPATHが記入してあるセルをコピー

SendKeys "^(v)", True ’ペースト

SendKeys "{ENTER}", True ’Enterで決定(ダイアログでいうと「開くが押される」)

みたいな感じでやると、画像アップロードできちゃいます(^o^)

まとめ

SendKeysを紹介しました!正攻法でダイアログボックスつかみに行こうとすると、ハンドルがなんちゃらかんちゃらって結構めんどくさいので、サクッとやりたい人は是非試してくださいね!