目次

VBE に出力されてしまう

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

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

「Sub」の前に「a」が出力されている。
「Sub」の前に「a」が出力されている。

目次まで戻る

ご注意ください

私の場合、 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

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

目次まで戻る

前後の投稿