目次
VBE に出力されてしまう
VBE(Visual Basic Editor)から SendKeys を含んだマクロを実行すると、 VBE のコードペイン(マクロを打ち込む画面)に SendKeys で送った文字が出力されてしまいました。
今回の投稿では、 VBE の画面から SendKeys を含んだマクロを実行して、ワークシートに出力出来るようにマクロを修正してみたいと思います。

- 当投稿で使用している、関数、用語など
- Application , DoEvents , MainWindow , SendKeys , VBE , Visible
ご注意ください
私の場合、 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
以上、閲覧ありがとうございました。