以下の内容はhttps://www.limecode.jp/entry/syntax/worksheet-deactivateより取得しました。


シートがアクティブでなくなった際にマクロを自動実行する - Deactivate

シートがアクティブでなくなった際にマクロを自動実行する方法を解説します。

シートモジュールのイベント「Worksheet_Deactivate」を使用します。


また、全シートのコードを一ヶ所に書きたい場合は、
「Workbook_SheetDeactivate」を使用する方法もあります。

処理をシートごとに記載したい場合 - Worksheet_Deactivate

以下のコードを設定したいシートモジュールに記載します。

Private Sub Worksheet_Deactivate()

    MsgBox "Sheet1がアクティブでなくなりました。"

End Sub

プロシージャ名を変更することはできません。

第1行は変更せずすべてこのままのコードを記述してください。


このイベントは行先のシートのActivateイベントよりも優先され、

  1. 元の選択シートのWorksheet_Deactivate
  2. 次の選択シートのWorksheet_Activate

この順番でイベントが実行されます。


よってPublic変数を使って選択情報を共有することで、
以下のように「AからBへシートが切り替わった際の処理」を実装できます。

' どこかの標準モジュール
Public ws直前の選択シート As Worksheet
' すべてのシートモジュール
Private Sub Worksheet_Deactivate()

    Set ws直前の選択シート =  Me

End Sub
' シートBのシートモジュール
Private Sub Worksheet_Activate()

    If ws直前の選択シート.Name = "シートA" Then
        ' ここにシートがA⇒Bに切り替わったときの処理
    End If

End Sub

 
シートの推移に応じたマクロを実装したい場合は、この仕様を活用してください。


このWorksheet_Deactivateを含めたイベントプロシージャは、
記述するシートモジュールの上部選択肢から選ぶことが出来ます。

Worksheetの選択

Worksheet_Deactivate


これを選択すると、↓の状態で空のイベントプロシージャが挿入されます。

Private Sub Worksheet_Deactivate()

End Sub

 
イベントプロシージャの構文はWEB検索で探したりする必要はなく、
使うときにこの選択肢から選べばよいことを覚えておきましょう。

処理を全シート分まとめて書きたい場合 - Workbook_SheetDeactivate

今回の処理をひとつのプロシージャにまとめて書きたい場合は、
ThisworkbookモジュールのWorkbook_SheetDeactivateイベント
を使用することも可能です。

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

    MsgBox Sh.Name & "がアクティブでなくなりました。"

End Sub

プロシージャ名、引数名を変更することはできません。

第1行は変更せずすべてこのままのコードを記述してください。


引数「sh」は判定用の引数で、
このプロシージャを呼び出した=アクティブでなくなったシートがSetされています。

例えば上記のコードのように「Sh.Name」を使ってコードを書けば、
アクティブでなくなった直前のシートの名称をMsgBoxに表示できます。


シートごとに処理を分岐したい場合はSelectCaseを用いて、
以下のようなコードを記載してください。

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

    Select Case Sh.Name
        Case "Sheet1"
            ' Sheet1から別シートにアクティブが移った時の処理
            
            
        Case "sheet2", "Sheet3"
            ' Sheet2、Sheet3から別シートにアクティブが移った時の処理
    
    End Select

End Sub

 
このように、Workbook_SheetDeactivateイベントを用いると、
ブック内の全シートのDeactivateイベントをまとめて書くことが出来ます。

  • 同じ処理であれば1回書くだけで済む
  • 全シートの処理の違いが一目瞭然になる

などのメリットがある代わりに、シートモジュールを見るだけではそのシートのイベントを一覧できなくなるデメリットもあります。

状況に応じて使い分けてください。




以上の内容はhttps://www.limecode.jp/entry/syntax/worksheet-deactivateより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14