目次
VBE に出力されてしまう
VBE(Visual Basic Editor)から SendKeys を含んだマクロを実行すると、 VBE のコードペイン(マクロを打ち込む画面)に SendKeys で送った文字が出力されてしまいました。
今回の投稿では、 VBE の画面から SendKeys を含んだマクロを実行して、ワークシートに出力出来るようにマクロを修正してみたいと思います。
ご注意ください
私の場合、 SendKeys ステートメントを使用したマクロを実行する度に「NumLock」が OFF になってしまいます。
原因は不明ですが、「NumLock」キーを押すと ON に戻ったので、そのままにしています。
再現
VBE の画面に文字が出力される状態を再現してみます。
以下のマクロを VBE から実行してみます。エクセルのワークシートから以下のマクロを実行すると VBE に文字が出力される事はありませんでした。
文字の入力カーソルは「Sub」の前「1 行 1 桁」に合っています。
「VBE アプリ > 実行メニュー > Sub/ユーザーフォームの実行(F5)」で実行してみます。
Sub VBE画面でSendKeys実行()
SendKeys "a{ENTER}", True
End Sub
マクロ実行前の VBE の画面は以下のようになっていました。
上記マクロを実行してみると、以下の画像のようになりました。「Sub」の前に「a」と出力さています。入力カーソルのあった位置に文字が出力されたようです。
マクロの一例
色々と試してみた結果、 VBE を非表示にして DoEvents を追加する事で、ワークシートに文字を出力する事が出来ました。
Sub DoEvents_VBE非表示_VBE画面でSendKeys実行()
DoEvents 'SendKeys 以外の VBA の命令の前に入れてみました
Application.VBE.MainWindow.Visible = False 'VBE 非表示
SendKeys "a{ENTER}", True
DoEvents
Application.VBE.MainWindow.Visible = True 'VBE 表示
End Sub
「Application.VBE.MainWindow.Visible = False」で VBE を一旦非表示にして「.Visible = Ture」で再表示する処理を追加しました。
SendKeys 以外の VBA の命令の前に「DoEvents」を追加してみました。
私の場合、 DoEvents のフロー制御の仕組みは分かっていませんが、この一文がないと、コードペインに文字が出力されてしまいました。
以下のワークシートの状態で VBE から上記マクロを実行してみます。「B2」セルが選択状態になっています。
VBE から「F5」キーでマクロを実行してみます。「F5」キーを押します。
マクロ実行後のワークシートの画面は以下のようになりました。「B2」セルに「a」が入力されています。
マクロ実行後の VBE のコードペインに変化はないようです。
テスト環境
- Windows 10(64 ビット)
- Microsoft Office Excel 2003
以上、閲覧ありがとうございました。