教えて!ExcelVBA!

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

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

       f:id:m_kbou:20200520201123p:plain

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

 

【目次】

 

構文

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

=======================================================================

Private Sub Worksheet_Deactivate()

   [実行する処理内容]

End Sub

=======================================================================

[説明]:

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

[記述例]:

Private Sub Worksheet_Deactivate()
  MsgBox "このシートはアクティブでなくなります。"
End Sub

 

作り方

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

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

【ExcelVBA 基本操作】マクロ/VBAを書く(記述する)ためにはどうすればいいの?教えて! - 教えて!ExcelVBA!

f:id:m_kbou:20200520115609p:plain

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

※今回は例としてSheet1をダブルクリックします。

f:id:m_kbou:20200520115634p:plain

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

f:id:m_kbou:20200520115736p:plain

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

f:id:m_kbou:20200520115752p:plain

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

f:id:m_kbou:20200520115838p:plain

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

f:id:m_kbou:20200520115907p:plain

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

f:id:m_kbou:20200520210803p:plain

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

f:id:m_kbou:20200520210848p:plain

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

f:id:m_kbou:20200520210905p:plain

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

 

実行例

今回の例としては、Sheet1シートに上記で説明したイベントプロシージャが記述されています。

(実行例1)

※Sheet1シートが選択(アクティブ)された状態からSheet2シートが選択(アクティブ)された場合、このシートはアクティブでなくなります。」が表示されます。(Sheet1シートが非アクティブになった事で、プロシージャが実行されてメッセージが表示されました)

f:id:m_kbou:20200520210944p:plain

(実行例2) 

※Sheet2シートが選択(アクティブ)された状態からSheet1シートが選択(アクティブ)された場合、メッセージは表示されません。

f:id:m_kbou:20200520211005p:plain

 

おわりに

今回はシートが非アクティブになった時に発生するイベントプロシージャの作成方法について説明しました。オブジェクトボックスでオブジェクトを選択すると、そのオブジェクト既定の「Worksheet_SelectionChange」イントプロシージャが自動的に作成されます。不要な場合は削除して下さい。また、類似の内容としてブックが非アクティブになった時に発生するイベントプロシージャもあります。ブックの場合とシートの場合との違いは、ブックは全シートに対してイベントが発生しますが、シートは対象のシートのみにイベントが発生します。状況により使い分けて下さい。