目次

VBE に出力されてしまう

VBE(Visual Basic Editor)から SendKeys を含んだマクロを実行すると、 VBE のコードペイン(マクロを打ち込む画面)に SendKeys で送った文字が出力されてしまいました。

今回の投稿では、 VBE の画面から SendKeys を含んだマクロを実行して、ワークシートに出力出来るようにマクロを修正してみたいと思います。

「Sub」の前に「a」が出力されている。
「Sub」の前に「a」が出力されている。
当投稿で使用している、関数、用語など
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 の画面は以下のようになっていました。

マクロ実行前の VBE の画面。入力カーソルは「1 行 1 桁」になっている。
マクロ実行前の VBE の画面。入力カーソルは「1 行 1 桁」になっている。

上記マクロを実行してみると、以下の画像のようになりました。「Sub」の前に「a」と出力さています。入力カーソルのあった位置に文字が出力されたようです。

マクロ実行後の VBE の画面。「a」が出力されている。
マクロ実行後の VBE の画面。「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」セルが選択状態になっています。

マクロ実行前のワークシートの画面。「B2」セルが選択されている。
マクロ実行前のワークシートの画面。「B2」セルが選択されている。

VBE から「F5」キーでマクロを実行してみます。「F5」キーを押します。

マクロ実行前の VBE の画面。「Sub」の前に入力カーソルが合っている。
マクロ実行前の VBE の画面。「Sub」の前に入力カーソルが合っている。

マクロ実行後のワークシートの画面は以下のようになりました。「B2」セルに「a」が入力されています。

マクロ実行後のワークシートの画面。「B2」セルに「a」が入力されている。
マクロ実行後のワークシートの画面。「B2」セルに「a」が入力されている。

マクロ実行後の VBE のコードペインに変化はないようです。

マクロ実行後の VBE の画面。マクロ実行前と同じ状態になっている。「a」が出力されていない。
マクロ実行後の VBE の画面。マクロ実行前と同じ状態になっている。「a」が出力されていない。

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿( Excel VBA )

前後の投稿