ExcelマクロVBA入門 | 第121回.SendKeysメソッドとAppActivateステートメント | Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説



最終更新日:2018-02-08

第121回.SendKeysメソッドとAppActivateステートメント


アクティブなアプリケーションにキー コードを転送します、

これは、他のアプリケーションにキーホード入力をすることができるという事です。

もちろん、マクロが動作しているExcel自身にもキー コードを転送できます。



キー コードを転送するアプリケーションはアクティブなアプリケーションだけです。

アクティブではないアプリケーションにキー コードを転送したい場合は、

事前に、AppActivateステートメントでアクティブにしてからSendKeysを使います。


SendKeysメソッド
キーストロークまたはキーストロークの組み合わせを、
キーボードから入力したときと同様にアクティブウィンドウに渡します。

アクティブウィンドウに対してしか作用しませんので、
必ず対象のアプリケーションをアクティブにしておきます。

SendKeys string[, wait]

名前付き引数については、以下になります。

string 必ず指定します。
転送するキー コードを表す文字列式を指定します。
wait 省略可能です。
名前付き引数 string の転送によって行われる処理が終了するまで、実行を一時中断するかどうかを次に示すブール型の値で指定します。
False(既定値) プロシージャの終了を待たずに次の行に制御を移します。
True 処理が終了するまで実行を一時中断します。

キーボード上の文字を渡すには、その文字をそのまま使います。
キーボード上の文字 A を表すには、名前付き引数 stringに"A"を指定します。
複数の文字は連続して設定します、文字 A、B、C を表すには、名前付き引数 string に "ABC" と指定します。

プラス記号 (+)、キャレット (^)、パーセント記号 (%)、チルダ (~)、かっこ (( )) はそれぞれ SendKeys ステートメントで特別です。
これらの文字を渡すには、文字を中かっこ ({ }) で囲んで指定します、プラス記号であれは {+} のように指定します。



特殊なキーを表す文字

キーを押したときに表示されない文字 (Enter キーや Tab キーなど)
文字ではなく動作を表すキーを指定するには、次に示すコードを使います。

キー コード
BackSpace {BACKSPACE}、{BS}、または {BKSP}
Ctrl + Break {BREAK}
CapsLock {CAPSLOCK}
Del または Delete {DELETE} または {DEL}
{DOWN}
End {END}
Enter {ENTER}または {~}
Esc {ESC}
Help {HELP}
Home {HOME}
Ins または Insert {INSERT} または {INS}
{LEFT}
NumLock {NUMLOCK}
PageDown {PGDN}
PageUp {PGUP}
PrintScreen {PRTSC}
{RIGHT}
ScrollLock {SCROLLLOCK}
Tab {TAB}
{UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}

Shiftキー、Ctrlキー、Altキーと他のキーとの組み合わせを指定するには、
通常のキー コードの前に次のコードを単独、または組み合わせて記述します。

キー コード
Shift +
Ctrl ^
Alt %

Shift キー、Ctrl キー、Alt キーを押しながら他のキーを押す場合は、キーのコードをかっこで囲みます。
Shift キーを押しながらEとCを押す操作を指定するには、"+(EC)" を使います。
Shift キーを押しながらEを押し、その後Shiftキーを離してCを押す場合は、"+EC" とします。



AppActivateステートメント

アプリケーション ウィンドウをアクティブにします。

AppActivate title[, wait]

指定項目 内容
title 必ず指定します。
アクティブにするアプリケーション ウィンドウのタイトル バーのタイトルを表す文字列式を指定します。
名前付き引数 title に Shell 関数によって返されるタスク ID を指定して、アプリケーションをアクティブにすることもできます。
wait 省略可能です。
名前付き引数 title で指定したアプリケーションをアクティブにする前に呼び出し側のアプリケーションにフォーカスを持たせるかどうかを、次に示すブール型 (Boolean) の値を使って設定します。
False(既定値) :呼び出し側のアプリケーションがフォーカスを持っていなくても、指定したアプリケーションをアクティブにします。
True:呼び出し側のアプリケーションがフォーカスを持つまで待機し、指定したアプリケーションをアクティブにします。

AppActivateでフォーカスが移っても指定したウィンドウの状態は変化しません。
たとえば、最小化されているウィンドウにフォーカスを移しても、そのウィンドウは最小化されたままです。

アプリケーション ウィンドウのタイトル バーの文字列と、名前付き引数 title が完全に一致しているかどうかを比較することによって、どのアプリケーションをアクティブにするかが判別されます。
完全に一致するものが見つからないときは、title で始まるアプリケーションをアクティブにします。
一致するアプリケーション ウィンドウが複数ある場合は、 1 つが任意に選択されてアクティブになります。


titleの指定について
Shell 関数で起動したアプリケーションは、Shell関数の戻り値のタスク IDを指定します。

マクロが起動されている自身のExcelは、Application.Caption を指定してください。

既に起動済みの他のアプリケーションの場合は、ウィンドウのタイトルを間違えずに指定してください。



使用例

以下はヘルプにある使用例です。

実践的な使用例ではありませんが、
SendKeysを理解する為の練習として、簡単に試せるのが良いでしょう。

Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1) ' 電卓を実行します。
AppActivate ReturnValue        ' 電卓をアクティブにします。
For I = 1 To 20              ' ループ カウンタを設定します。
  SendKeys I & "{+}", True      ' 電卓にキー コードを転送して、
Next I                   ' I の値に 1 を加算します。
SendKeys "=", True           ' 和を求めます。

Shell関数については、次回の、
第122回.Shell関数
こちらを参考にしてください。



SendKeysはとても便利な機能なのですが、
対象のアプリケーションによっては、動作が安定しない場合も多いので使用には注意が必要です。

しかし、他のVBAの機能では実現できない場合もあります。
そのような場合は、
キーボード操作可能であるならば、基本的にはキーボード操作と同じことが実現できます。
そういった場合の最終手段として考えて下さい。


※注意

プリントスクリーン(PrntScr)は、SendKeysでは送れません。
プリントスクリーン(PrntScr)を送るには、APIが必要になります。

全シートの画面キャプチャを取得する(keybd_event)

こちらで使用しています。





同じテーマ「マクロVBA入門」の記事

第118回.ファイル操作U(Print #)
第119回.ファイルシステムオブジェクト(FileSystemObject)
第120回.OnTimeメソッド
第122回.Shell関数
第123回.APIについて(Win32API)
第124回.Workbookのイベントプロシージャー
第125回.Worksheetのイベントプロシージャー
第126回.入力規則(Validation)
第127回.他のブックのマクロを実行(Runメソッド)
第128回.マクロをショートカットで起動(OnKeyメソッド)

新着記事 ・・・新着記事一覧を見る

VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)
ファイルの操作|MOS VBAエキスパート対策(3月14日)
ユーザーフォームの各種イベント|Excelユーザーフォーム(3月13日)
レジストリの操作|MOS VBAエキスパート対策(3月12日)
変数と配列|MOS VBAエキスパート対策(3月12日)
Colorプロパティの設定値一覧|VBA技術解説(3月12日)
APIとOLEオートメーション|MOS VBAエキスパート対策(3月11日)
エラーへの対処|MOS VBAエキスパート対策(3月10日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.ひらがな⇔カタカナの変換|エクセル基本操作
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.定数と型宣言文字(Const)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.繰り返し処理(For Next)|ExcelマクロVBA入門



  • >
  • >
  • >
  • SendKeysメソッドとAppActivateステートメント

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。





    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

    本文下部へ

    ↑ PAGE TOP