VBA(マクロ)を使ってキーボード操作

スポンサーリンク

キーボード入力をするVBAコードで他のアプリケーションを操作する

今回の内容はVBA(マクロ)を用いて、キーボード入力をするコードについてご紹介します。
このコードを覚えておくと、他のアプリケーションを一定の範囲で操作できます。
少しコードの書き方が特徴的なので一からすべてを書けるように覚えるのは大変ですが、コードは使いまわしできるので一度作っておくと後が楽です。

キーボード入力のためのコード記載

WindowsAPIのキーボードイベントのコードを使用します。Sleepを使う時と同じように宣言セクションに以下のコードを記載します。
あまり詳しい意味は把握しなくても使用できます(笑)

Declare Sub keybd_event Lib “user32” (ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Const fKEYDOWN = KEYEVENTF_EXTENDEDKEY
Private Const fKEYUP = KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP

スポンサーリンク

コードの一覧

使用するキーを事前に指定しておく必要があります。
これも宣言セクションに記載しておきます。私が使っていたファイルには以下のように記載していました。

Private Const VK_F2 = &H71
Private Const VK_F3 = &H72
Private Const VK_F4 = &H73
Private Const VK_F5 = &H74
Private Const VK_LEFT = &H25
Private Const VK_UP = &H26
Private Const VK_RIGHT = &H27
Private Const VK_DOWN = &H28
Private Const VK_0 = &H30
Private Const VK_1 = &H31
Private Const VK_2 = &H32
Private Const VK_3 = &H33
Private Const VK_4 = &H34
Private Const VK_5 = &H35
Private Const VK_6 = &H36
Private Const VK_7 = &H37
Private Const VK_8 = &H38
Private Const VK_9 = &H39
Private Const VK_A = &H41
Private Const VK_B = &H42
Private Const VK_C = &H43
Private Const VK_D = &H44
Private Const VK_E = &H45
Private Const VK_F = &H46
Private Const VK_G = &H47
Private Const VK_H = &H48
Private Const VK_I = &H49
Private Const VK_J = &H4A
Private Const VK_K = &H4B
Private Const VK_L = &H4C
Private Const VK_M = &H4D
Private Const VK_N = &H4E
Private Const VK_O = &H4F
Private Const VK_P = &H50
Private Const VK_Q = &H51
Private Const VK_R = &H52
Private Const VK_S = &H53
Private Const VK_T = &H54
Private Const VK_U = &H55
Private Const VK_V = &H56
Private Const VK_W = &H57
Private Const VK_X = &H58
Private Const VK_Y = &H59
Private Const VK_Z = &H5A
 
Private Const VK_CONTROL = &H11
Private Const VK_BACK = &H8
Private Const VK_TAB = &H9
Private Const VK_RETURN = &HD
Private Const VK_PRINT = &H2C ’[PrintScreen]
Private Const VK_Esc = &H1B ’[Esc]

VBAコード本文の書き方

キーボードを押すkeybd_eventは「キーを押す」コードと「キーを離す」コードの2行で一つのセットになっています。
以下に例としてキーを押すときのコードを記載します。

①F2キーを押したい場合

keybd_event VK_F2, 0, fKEYDOWN, 0’F2を押す
keybd_event VK_F2, 0, fKEYUP, 0’F2を離す

②プリントスクリーンを押したい場合

keybd_event VK_PRINT, 0, fKEYDOWN, 0’プリントスクリーンを押す
keybd_event VK_PRINT, 0, fKEYUP, 0’プリントスクリーンを離す

③「←」を押す

keybd_event VK_LEFT, 0, fKEYDOWN, 0’←を押す
keybd_event VK_LEFT, 0, fKEYUP, 0’←を離す

④Control + Aを押す

この場合はControlキーを押して離すまでの間にAのキーを押して離すコードを記載します。

keybd_event VK_CONTROL, 0, fKEYDOWN, 0’Controlを押す
keybd_event VK_A, 0, fKEYDOWN, 0’Aを押す
keybd_event VK_A, 0, fKEYUP, 0’Aを離す
keybd_event VK_CONTROL, 0, fKEYUP, 0’Controlを離す

Keybd_eventを用いた使用例

私は電子書籍をプリントスクリーンして保管していて、その時にこのkeybd_eventを使用して自動化しています。
実際に私が使用しているものは、アプリケーションを立ち上げるVBAコードやウインドウを取得するVBAコードも加えていますが、その部分がなくてもきちんと使用できるものが作れます。
また操作を楽にするためにWinshotというスクリーンショットしたものをすぐに画像ファイルとして保存するアプリを立ち上げています。
Winshotのダウンロードはこちらからできます。

Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)
Declare Sub keybd_event Lib “user32” (ByVal bVk As Byte, ByVal bScan As Byte, _
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
 
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Const fKEYDOWN = KEYEVENTF_EXTENDEDKEY
Private Const fKEYUP = KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP
 
Private Const VK_LEFT = &H25
Private Const VK_RIGHT = &H27
Private Const VK_PRINT = &H2C
 
Sub 順番にスクリーンショットを残す()
 
Sleep 3000’この間に手動で操作対象となるアプリのウインドウをクリックして最前面に持ってくる
Dim i As Integer
For i = 1 To 300’ページ数でストップ値を変更する。この表示だと300ページになります。
Printscreenを押す
Sleep 1000
左を押す’右にページめくりをする場合は「右を押す」と記載する。
Sleep 1000
Next i
 
End Sub
 
Private Sub Printscreenを押す()
 
keybd_event VK_PRINT, 0, fKEYDOWN, 0
keybd_event VK_PRINT, 0, fKEYUP, 0
 
End Sub
 
Private Sub 左を押す()
 
keybd_event VK_LEFT, 0, fKEYDOWN, 0
keybd_event VK_LEFT, 0, fKEYUP, 0
 
End Sub
 
Private Sub 右を押す()
 
keybd_event VK_RIGHT, 0, fKEYDOWN, 0
keybd_event VK_RIGHT, 0, fKEYUP, 0
 
End Sub

スクリーンショットを禁止しているサイトやアプリではうまく画像が保存できません。
楽天Kobo、DMM.comは使用できませんでした。
 

SendKeysは使用できない

以前のWindows(おそらくXPまで)はキーボードを入力するコードとして、VBAの標準コードであるSendkeysが使用できましたが、最近のOSではできなくなっています。
真偽はわかりませんが、セキュリティの問題でこのコードを取り扱えなくしたとの話を聞いたことがあります。

コメント