ワークシートが非アクティブになった時にマクロを自動実行します。

非アクティブとは現在のシートから他のシートに移った場合のことをいいます。

構文は、Worksheet.OnSheetDeactivateプロパティを使います。


シートが非アクティブになった時にマクロを自動実行する

VBA入力画面
マクロ入力画面

入力したコードです。

Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)

Sub シートがアクティブになった時に自動実行マクロ()
    Worksheets("Sheet2").OnSheetActivate = "自動実行マクロ"
End Sub

Sub 自動実行マクロ()
    Range("B4") = ""
    Range("B3") = "2秒後にメッセージを表示します。"
    Sleep (2000)
    Range("B3") = ""
    Range("B4") = "自動実行マクロで入力しました。"

    Worksheets("Sheet2").OnSheetDeactivate = "非アクティブ時自動実行マクロ"
End Sub

Sub 非アクティブ時自動実行マクロ()
    MsgBox "Sheet2が非アクティブになりました。"
End Sub

プログラムの説明


Windows APIの宣言 (Windows API Sleepを参照)
Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Subプロシージャの宣言
Sub シートがアクティブになった時に自動実行マクロ()
OnSheetActivateubプロパティの設定
Worksheets("Sheet2").OnSheetActivate = "自動実行マクロ"
プロシージャの終了
End Sub
Subプロシージャの宣言
Sub 自動実行マクロ()
B4セルをクリア
Range("B4") = ""
B3セルに入力
Range("B3") = "2秒後にメッセージを表示します。"
2秒待ち  (Windows API Sleepを参照)
Sleep (2000)
B3セルをクリア
Range("B3") = ""
B4セルに入力
Range("B4") = "自動実行マクロで入力しました。"
OnSheetDeactivateプロパティの設定
Worksheets("Sheet2").OnSheetDeactivate = "非アクティブ時自動実行マクロ"
プロシージャの終了
End Sub
Subプロシージャの宣言
Sub 非アクティブ時自動実行マクロ()
メッセージの表示 (MsgBox関数を参照)
MsgBox "Sheet2が非アクティブになりました。"
プロシージャの終了
End Sub

シートが非アクティブになった時に自動実行マクロの実行画面

ワークブックのシートがアクティブになった時に自動実行マクロを実行します。
一覧よりマクロを実行

Sheet1からSheet2に移すと、B3セルに「2秒後にメッセージを表示します。」と表示されます。
アクティブ時のシート

2秒経過すると、B4セルに「自動実行マクロで入力しました。」と表示されます。
2秒後の画面

Sheet1に移すと、「Sheet2が非アクティブになりました。」とメッセージが表示されます。
非アクティブ時の画面

Excelマクロのサンプルファイル:フリーダウンロード








Copyright (C) excel.usefulhp.com All rights reserved.