VB6・VBA関数メモ:SendKeysステートメント

SendKeysステートメントについてメモしておきます。

このステートメントではキーコードの送信を行うことができます。
選択中のアプリケーションに対してキーコードを送信します。
外部アプリケーションにキー入力するときに使えます。

ヘルプにはキーコード送信とありますが、日本語等の2バイト文字や記号等も送信できるようです。
また、複数のキーコードも一括で送信できるようです。

ExcelVBAでデバッグ中に自身のExcelにキーコードを送信しようとすると、
VBEにキーコードが送信されてしまうので注意です。
(ソースに余計な文字が入ったりします;)


概要

SendKeys(String As String, [Wait])
機能 キーコードを送信
引数 String キーコード
キーコードの後ろに送信回数も指定できます
String型
Wait (省略時はFalse)
True :キーコード送信後の処理完了まで待機する
False:キーコード送信後の処理完了まで待機しない
(Boolean型)
戻り値 なし


キーコード

キー コード
Shift+
Ctrl^
Alt%
各種文字1、a、A、¥、あ、漢(…等、基本的にそのまま使えるようです)
+{+}
^{^}
%{%}
({(}
){)}
{{{}
}{}}
BackSpace{BACKSPACE}
{BS}
{BKSP}
Ctrl + Break{BREAK}
CapsLock{CAPSLOCK}
Del
Delete
{DEL}
{DELETE}
End{END}
Enter{ENTER}
{~}
Esc{ESC}
Help{HELP}
Home{HOME}
Ins
Insert
{INS}
{INSERT}
NumLock{NUMLOCK}
PageDown{PGDN}
PageUp{PGUP}
PrintScreen{PRTSC}
ScrollLock{SCROLLLOCK}
Tab{TAB}
{UP}
{DOWN}
{LEFT}
{RIGHT}
F1〜F16{F1}〜{F16}


使用例

説明 記述例 出力
キーコード送信
(例ではメモ帳を起動し、
メモ帳に「1」「2」「Enter」「3」「4」「BackSpace」「5」の順に送信)
Dim path   As String
Dim taskID As Double

path = "C:¥Windows¥System32¥notepad.exe"
taskID = Shell(path, vbNormalFocus)

Call AppActivate(taskID)

Call SendKeys("1")
Call SendKeys("2")
Call SendKeys("{ENTER}")
Call SendKeys("3")
Call SendKeys("4")
Call SendKeys("{BS}")
Call SendKeys("5")
キーコード送信(送信完了まで待機)
(上記例と送信内容は同じですが、処理を待つので少し安定します)
Dim path   As String
Dim taskID As Double

path = "C:¥Windows¥System32¥notepad.exe"
taskID = Shell(path, vbNormalFocus)

Call AppActivate(taskID)

Call SendKeys("1", True)
Call SendKeys("2", True)
Call SendKeys("{ENTER}", True)
Call SendKeys("3", True)
Call SendKeys("4", True)
Call SendKeys("{BS}", True)
Call SendKeys("5", True)
キーコード送信(複数文字一括)
(上記例と送信内容は同じです)
Dim path   As String
Dim taskID As Double

path = "C:¥Windows¥System32¥notepad.exe"
taskID = Shell(path, vbNormalFocus)

Call AppActivate(taskID)

Call SendKeys("12{ENTER}34{BS}5")
キーコード送信(繰り返し)
(例では「A」を5回送信)
Dim path   As String
Dim taskID As Double

path = "C:¥Windows¥System32¥notepad.exe"
taskID = Shell(path, vbNormalFocus)

Call AppActivate(taskID)

Call SendKeys("{A 5}")
Shiftキーを付与して送信
(例では「Shift+a」「b」「c」を送信)
Dim path   As String
Dim taskID As Double

path = "C:¥Windows¥System32¥notepad.exe"
taskID = Shell(path, vbNormalFocus)

Call AppActivate(taskID)

Call SendKeys("+abc")
Shiftキーを付与して送信(複数)
(例では「Shift+a」「Shift+b」「Shift+c」を送信)
Dim path   As String
Dim taskID As Double

path = "C:¥Windows¥System32¥notepad.exe"
taskID = Shell(path, vbNormalFocus)

Call AppActivate(taskID)

Call SendKeys("+(abc)")
SendKeysステートメントの特殊文字(+^%(){})等を送信
Dim path   As String
Dim taskID As Double

path = "C:¥Windows¥System32¥notepad.exe"
taskID = Shell(path, vbNormalFocus)

Call AppActivate(taskID)

Call SendKeys("{+}{^}{%}{(}{)}{{}{}}")


動作検証

説明 記述例 出力
存在しないキーコードを送信しようとするとエラー
On Error GoTo ERR_HANDLER

Call SendKeys("{12345}")

ERR_HANDLER:

If Err > 0 Then Debug.Print Error
プロシージャの呼び出し、または引数が不正です。


コメント
コメントする








    
この記事のトラックバックURL
トラックバック