Excel2016 : イミディエイトウィンドウをクリアする

 なんだかんだ未だ便利だったり飯の種になったりしておりますVBA。

ユーザー企業様が内製で作って便利に使ってて、度重なる機能拡張で屋上屋重ねた温泉旅館状態になったり、Officeのバージョンアップ→仕様変更で動作がおかしくなったりして、レスキュー頼まれたりしております。

そんなこんなで動作確認や不具合調査時に便利なのがイミディエイトウィンドウ。
Debug.Print置いてトレースしたり、「? 変数」で文字列変数の中身を表示させたりするのに重宝しています。
ctrl+Gの1アクションで呼び出せるのも楽ちんですし。

ただ、出力が出っぱなしなので、「トレース開始するので現在の表示をいったん全部消したい」ってときにちょっと不便。
①イミディエイトウィンドウにフォーカス当てて②ctrl+A③Delete、の3アクションがめんどくさい。


コード

というわけで、イミディエイトウィンドウをクリアするVBAコードを書いてみました。
VBEのメニューから「ツール」→「参照設定」で「Microsoft Visual basic for Application Extensibility 5.3」にチェックをつけて
'******************************
' イミディエイトウィンドウのクリア
'******************************
Public Sub gsClearImmediate()

    Dim wd      As VBIDE.Window
    Dim wdwk    As VBIDE.Window
    
    '*** イミディエイトウィンドウの取得
    Set wd = Application.VBE.Windows("イミディエイト")
    If Not wd.Visible Then Exit Sub     '非表示だったら抜け
    
    '*** イミディエイトウィンドウのクリア
    wd.SetFocus
    SendKeys "^a", False
    SendKeys "{Del}", False

End Sub
ポイントは、イミディエイトウィンドウのオブジェクトを取得する際に"Immediate"ではなく"イミディエイト"で指定するところでしょうか。
Application.VBE.Windows("***") でウィンドウを指定する "***" が、Name ではなく Caption プロパティなんですね。ので、英語環境とか日本語環境とかのタイトルの表示次第で指定が変わっちゃうという何だそれな仕様になっております。


使い道

一応、デバッグしたいシステムの起動時に実行されるプロシージャ内に呼び出しを記述すると、毎回イミディエイトウィンドウがクリアされた状態からトレースとかを始められるかと。

上記3アクションのめんどくささを解消するにはショートカットキー割り当てとかすることになると思うんですけど、VBEのショートカットキー追加はたぶんアドインで作ってやらなきゃならないと思いますし、だったらVBAじゃなく.NETで作った方がいいような感じですので、本稿ではそこまで考えないことにします。
参考サイト

動作確認環境
Excel2016 16.0.7571.7063 64bit

1 件のコメント :

  1. SendKeys "^g", False
    SendKeys "^a", False
    SendKeys "{Del}", False

    ↑私はこれだけでできました

    返信削除