こんにちは、Ryoです。
VBAで処理する場合単一のブックであることは少なく、複数のブックに跨ることが多いと思いますが、アクティブになる/非アクティブになる状態をイベントとして捉えることも出来ますので、例えば一通りデータを読み込んで別のブックをアクティブにしたら元データファイルは用済みですから「閉じる」とかですね。
今回はそんなアクティブ/非アクティブになった時に処理を実行する方法を紹介します。
1.コードの記述する場所
エディタ画面のプロジェクトウィンドウで表示される「This Workbook」に記述します。
今回は「SampleA」「SampleB」という名前のブックで説明します。
2.非アクティブとなった時にファイルを閉じる
先ずはアクティブではなくなった際の処理について説明します。
サンプルではブックが切り替わり非アクティブとなったら「ブックを閉じる」ものです。
コードは「SampleA」のThisWorkBookに記述しています。
Private Sub Workbook_deactivate() Application.DisplayAlerts = False ThisWorkbook.Close Application.DisplayAlerts = True End Sub
Private Sub Workbook_deactivate()とすることで、ブックがアクティブではなくなった際に処理が実行されるものです。
ファイルを閉じるだけの処理ですので、ThisWorkbook.Close で済みますが余計なアラートを非表示とする為にApplication.DisplayAlertsを使用しています。
処理実行前はこのようにSampleA,SampleBのブックがありますが、ここでSampleBに切り替えるとSampleAのブックは強制的に閉じられます。
この通り静かに何事もなかったように閉じられます。
「閉じる」という処理をThisWorkbookに書いていますので、VBAでの処理のみならず手動で切り替えても処理されて閉じられますから取り扱いには注意してくださいね!
自動で処理する際には便利ですが、手動で取り扱う頻度が多いブックの場合は使いにくいので私は計測データが保存されたブックから必要なデータを抽出した後の処理などに使ってます。
3.アクティブとなった時にメッセージを表示する
次にアクティブとなった際の処理ですが、サンプルとしてメッセージボックスを表示します。
コードはSampleBのThisWorkBookに記述しています。
Private Sub Workbook_activate() MsgBox "アクティブになりました!" & vbCrLf & _ ThisWorkbook.Name, vbInformation End Sub
Private Sub Workbook_activate()とすることでアクティブに切り替わったら処理が実行されますが、アクティブも非アクティブもExcelブック間の切り替わりで発生するものであり、
ワードやアクセスなど他アプリケーションからの切り替わりでは発生しません。
この処理を実行するとアクティブ状態でメッセージボックスが表示されます。
このようにアクティブ、非アクティブとなった際のイベント処理も出来ますから、覚えておくと使える局面が結構あるものなので、機会あれば活用してみてくださいね。
以上、ブックのアクティブ/非アクティブによる処理についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo