2 つ以上の SendKeys ステートメントが連続して実行されると、NumLock キーがオフになる。
この問題は、CapsLock キーと ScrollLock キーにも影響することがあるらしい。
と、Microsoftのサポートにはあるが、1つのステートメントでもオフになる現象が起こっている。
http://support.microsoft.com/kb/179987/ja
<原因-抜粋>
この問題は、1 つ目の SendKeys ステートメントの実行中に 2 つ目の SendKeys ステートメントの実行が開始されるために発生します。1 つ目の SendKeys ステートメントは、キーボードの状態を保存したうえで、NumLock、CapsLock、ScrollLock をすべてオフにします。2 つ目の SendKeys ステートメントが実行されるのは、1 つ目の SendKeys ステートメントによるキー ストロークの送信とキーボードの状態の復元が行われる前です。2 つ目の SendKeys ステートメントの実行時にもキーボードの状態が保存されますが、このとき保存されるのは、それらのキーがすべてオフになっている状態です。最終的に、キーボードの状態は後から保存された状態 (それらのキーがすべてオフになっている状態) で復元されます。
<回避策>WSHをSendKeysの後に実行する
'====================================================== ' SendkeysでNumlockがOFFになるバグを回避する ' WSH(Windows Scripting Host) '====================================================== Sub numlock_onoff() Dim WshShell Set WshShell = CreateObject("WScript.Shell") WshShell.SendKeys "{NUMLOCK}" Set WshShell = Nothing End Sub
‘入力リストを展開する
SendKeys “%{down}”
Call numlock_onoff
三角猫
2016年3月19日 at 12:34 PMVBAのSendKeysが勝手にNumLockを切り替えてしまう不具合の解決策を探し求めて、こちらに辿り着きました。記事のおかげで解決しました。ありがとうございました。
VBAのSendKeysを全てWshShell.SendKeysに置き換えれば、NumLockをいじる必要がないですね。
Santa Network
2016年3月22日 at 2:21 PMコメント、ありがとうございます。
お役に立ててよかったです。(*^^)v
キェルケゴール
2017年7月1日 at 1:34 PM<回避策>WSHをSendkyesの後に実行する ← kyes 綴り間違い一つ目
SendkyesでNumlockがOFFになるバグを回避する ← kyes 綴り間違い二つ目
綴り間違いは直してください。
1897年8月12日 11:00 PM
santane • Post Author •
2017年7月30日 at 5:14 PMキェルケゴールさん
綴り間違いのご指摘、ありがとうございました。
修正しました。(^_^;)
AccessからVBAでブラウザの入力フォームに値をセットする – Home and Abroad
2018年7月14日 at 10:43 PM[…] Office TANAKA – Excel VBA Tips[Split関数で文字列を区切る] SendKeys を実行するとNumLock キーがオフになる現象を回避 ? Santa Network [VBA]DataObjectを使ったクリップボード操作が上手くいかない場合の対処法 | […]
saimo
2020年9月26日 at 3:38 PM記事にして頂きありがとうございます。
助かりました。
santane • Post Author •
2020年9月29日 at 7:09 AMお役に立ててよかったです。