VBA イベントプロシージャーを外部から呼び出す方法


例えばコマンドボタンのClickイベントプロシージャーに記述した処理を標準モジュールなどから再利用できたら便利なのに、と長年思いつつ、できないものと思い込んでいました。しかし、できるんです。しかも、とても簡単に。

イベントプロシージャーはデフォルトではPrivateになっていますが、それをPublicに変更します。

後は、イベントを参照してあげるだけです。

ユーザーフォームのイベントプロシージャーの場合は、

[フォーム名].[コントロール名].[イベント名]

例えば、

Call Userform1.CommandButton1.Click

ワークシートの場合は、

[ThisWorkbook].[シート名].[イベント名]

例えば、

Dim rng as Range: Set rng = ThisWorkbook.Sheets("Sheet1").Range("A1")

Call ThisWorkbook.Sheets("Sheet1").Worksheet_Change(rng)

このように書くだけです。

ついさっき、他の人の作ったVB6ソフトを改修している時に、初めて知りました。

実用的な使い方はすぐに思いつきませんが、いざと言うときには役に立つでしょう。

#Excel #Excelvba #イベント