教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA ブック操作】ブックが非アクティブになった時に発生するイベントプロシージャを作成するにはどうすればいいの?教えて!

f:id:m_kbou:20200506170926p:plain

非アクティブとは今まさに操作対象となっている状態から外れる事を言います。このブックが非アクティブになった時に発生するイベントプロシージャの作り方について紹介します。

 

 

構文

イベントプロシージャの記述方法は以下の通りです。

Private Sub Workbook_Deactivate()

   [実行する処理内容]

End Sub

[説明]:

ブックが非アクティブになった時に発生するイベントプロシージャにはDeactivateプロシージャを使用します。[実行する処理内容]にはブックが非アクティブになった際に実行させる内容を記述します。内容を纏めると、「ブックが非アクティブになった場合には[実行する処理内容]を実行して下さい。」との意味になります。

[記述例]:

Private Sub Workbook_Deactivate()
  MsgBox "このブックはアクティブでなくなります。"
End Sub

 

作り方

(1)VBE(VBA記述画面)を開きます。

※画面の開き方はこちらの手順を参考にして下さい。

f:id:m_kbou:20200505222240p:plain

(2)ブックオブジェクトをダブルクリックします。

f:id:m_kbou:20200505222303p:plain

(3)オブジェクトボックスの▼ボタンをクリックします。

f:id:m_kbou:20200505222317p:plain

(4)プルダウン一覧の中から「WorkBook」を選択します。

f:id:m_kbou:20200505222332p:plain

※この時点で「Workbook_Open」イベントプロシージャが表示されます。(これは自動的に作成される仕組みとなっている様です。)

f:id:m_kbou:20200505222348p:plain

(5)プロシージャボックスの▼ボタンをクリックします。

f:id:m_kbou:20200505222405p:plain

(6)プルダウン一覧の中から「Deactivate」を選択します。

f:id:m_kbou:20200506170630p:plain

(7)「Workbook_Deactivate」イベントプロシージャが表示されます。

f:id:m_kbou:20200506170702p:plain

(8)(7)で作成したイベントプロシージャに実行させる内容を記述します。今回は実行された際に「このブックはアクティブでなくなります。」がMsgBoxで表示される内容を記述しました。

Private Sub Workbook_Deactivate()

    MsgBox "このブックはアクティブでなくなります。"

End Sub

f:id:m_kbou:20210324171131p:plain

ブックが非アクティブになった時に発生するイベントプロシージャの作成方法についての説明は以上です。

 

実行例

今回の例としては、Book1.xlsmブックとBook2.xlsxブックが開かれており、Book1.xlsmブックには上記で説明したイベントプロシージャが記述されています。

(実行前)

Book1.xlsmブックがアクティブ(選択状態)になっています。

f:id:m_kbou:20200506170818p:plain

(実行後) 

Book2.xlsxブックをアクティブ(選択状態)にすると「このブックはアクティブでなくなります。」が表示されます。(※Book2.xlsxブックが選択された事で、Book1.xlsmブックが非アクティブとなりプロシージャが実行されてメッセージが表示されました。)

f:id:m_kbou:20200506170836p:plain

 

サンプル

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

 

おわりに

今回はブックが非アクティブになった時に発生するイベントプロシージャの作成方法について説明しました。オブジェクトボックスでオブジェクトを選択すると、そのオブジェクト既定の「Workbook_Open」イントプロシージャが自動的に作成されます。不要な場合は削除して下さい。