VBA開発

SendKeysでキーが効かない場合の対処法【ExcelVBA】

SendKeysメソッドで、Enterキーが効かない(押下できない)

SendKeysメソッドでは、VBAでの最終手段、キー押下を物理的に行う事が可能です。
別のアプリケーションやオブジェクト、Internet Explorer(IE)自動制御の際にも
SendKeysメソッドで、無理やり反映する場合があるかと思います。

物理キーを反映させる【SendKeysメソッド】

キーを押下させるので無理やり反映できたと思っても、
安定しなかったり、キー入力が反映できない場合があります。

その問題に関しては以下、どちらかである程度解決するのではないでしょうか。

ENTERキーが効かない

{ENTER} で処理してませんか? {ENTER} はテンキー側のENTERです。

テンキー側のENTERNumLock キーのON / OFFに影響されます。
結果、反応がない、キーが押せない現象が発生します。

ENTERは、~ (チルダ) です。

'■SendKeysのEnterの例
SendKeys "~" 'Enter

キー押下動作が反映されない

WScript.Shellオブジェクト経由で、SendKeysでキーコードを送信できます。
これで、ほとんど解決すると考えます。

'■メモ帳を起動
Shell "C:\Windows\Notepad.exe"

SendKeys "SendKeyの文字列テスト", True

With CreateObject("Wscript.Shell")
    SendKeys "^(A)", True 'Ctrl + A
    SendKeys "^(C)", True 'Ctrl + C
    SendKeys "{RIGHT}", True '→
    SendKeys "~", True 'Enter
    SendKeys "^(V)", True 'Ctrl + V
End With

注意点

上記でも反応がない(反応が早すぎる)場合は、Application.Wait Now + TimeValue(“00:00:01”)といった形で、
少し待ちましょう。

関連記事

物理キーを反映させる【SendKeysメソッド】
任意のキー押下でマクロを起動する【OnKey メソッド 】VBA
※OnKeyメソッドでも {ENTER} と ~(チルダ)を間違えるケースは多いです!
VBAでIE操作「ファイルダイアログからアップロードする」
VBAでIE操作「Internet Explorerを最前面に表示」する

 

コメント

タイトルとURLをコピーしました