CoCoのYDブログ

心に思い浮かんだことを少し掘り下げ発信します

【VBA】プログラム実行タイミング【Book編】

こんにちは

 

今日はプログラムの実行するタイミングについてのお話です。

プログラムを実行してもらうときに毎回ボタンを押すのは面倒だし、他人に渡したらExcelを開いただけでプログラムが実行できたほうがスマートですよね。

 

ちなみに私はボタンを消されてプログラムが実行できないと起こられたことがあります。(理不尽だー

 

今回のプログラムはすべてThisWorkbookに作成します。

注意しましょう。

f:id:takataka2743:20181003230628p:plain

ブック起動時

簡単に説明するとこれだけです。

Sub Workbook_Open()
    処理
End Sub

プロシージャの名前は必ずWorkbook_Openにしてください。

 

ブック保存時

Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    処理
End Sub

 

 保存時は引数が二個ついてきます。

SaveAsUIはユーザーインターフェイスを使用するかという意味らしいですが、自分ではさっぱりでした。

Cancelは保存の有無です。

保存しない場合はFalseに設定しましょう。

 

ブックを閉じる

Sub Workbook_BeforeClose(Cancel As Boolean)
    処理
End Sub

これも上と同じで、CancelがFalseの場合終了できませんw

タスクから落とさないと閉じれないのかな?

 

シートを切り替える

これはなかなか使い道が・・・

シートを切り替え時に保存するとか?

Sub Workbook_SheetActivate(ByVal Sh As Object)
    処理
End Sub

今回は引数にObjectが入っています。

このObjectにはアクティブになったシートが格納されています。

 

ウインドウを切り替える

切り替えるのはExcelファイルから別のExcelファイルに切り替わった場合のみだそうです。

VBAを使用できるWordやOutlookでは反応しませんでした。

ウインドウを切り替えてファイルがアクティブになった場合

Sub Workbook_WindowActivate(ByVal Wn As Window)
    処理
End Sub

 

ウインドウを切り替えてファイルがアクティブでなくなった場合

Sub Workbook_WindowDeactivate(ByVal Wn As Window)
     MsgBox "Workbook_WindowDeactivateイベントが発生しました。"
End Sub

 

どちらも引数にWindowが入っています。

このWindow型にはマクロが入力されたウインドウが入っています。

 

いかがでしたか?

今回紹介したのはまだ一部です。

したの画像のようにWorkbookとタイミングを組み合わせることで様々なタイミングでマクロを実行することができます。

興味があれば色々と触ってみるのも楽しいと思います。

f:id:takataka2743:20181003234159p:plain