VBAのIE(InternetExplorer)制御に便利なサブルーチンを紹介しています。
Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Private Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long
Const VK_NUMLOCK = &H90 '「NumLock」キー
Const KEYEVENTF_EXTENDEDKEY = &H1 'キーを押す
Const KEYEVENTF_KEYUP = &H2 'キーを放す
sub numLockOn()
Dim NumLockState As Boolean
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)
NumLockState = keys(VK_NUMLOCK)
'「NumLock」キーがオフの場合はオンにする。
If NumLockState <> True Then
'キーを押す
keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'キーを放す
keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End If
End sub
「NumLock」キーをONにするするためにWindowsAPIの「keybd_event」を利用します。
「keybd_event」は、「SendKeysステートメント」と同様の機能で任意のキーを操作することができます。尚、「SendKeysステートメント」では操作が不能なWindowsキーの操作も可能です。
また、キーボードの状態を確認する必要があるので、「GetKeyboardState」も利用しています。