教えて!ExcelVBA!

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

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

f:id:m_kbou:20200508081621p:plain

VBAでは操作をきっかけとして自動的に実行されるプロシージャの事を「イベントプロシージャ」と言います。自動実行のきっかけとなる操作の事を「イベント」と呼び、「イベント」はブックやワークシート、ユーザーフォーム等のオブジェクトに対して発生します。このイベントを利用して「ブック内のシートがアクティブになった時に発生するイベントプロシージャの作り方」について紹介します。

 

 

構文

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

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  [実行する処理内容]
End Sub

[説明]:

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

[記述例]:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    MsgBox "選択したシートがアクティブになりました。"
End Sub

 

作り方

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

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

f:id:m_kbou:20200508081640p:plain

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

f:id:m_kbou:20200508081655p:plain

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

f:id:m_kbou:20200508081709p:plain

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

f:id:m_kbou:20200508081726p:plain

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

f:id:m_kbou:20200508081743p:plain

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

f:id:m_kbou:20200508081757p:plain

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

f:id:m_kbou:20200508081813p:plain

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

f:id:m_kbou:20200508081826p:plain

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

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  MsgBox "選択したシートがアクティブになりました。"
End Sub

f:id:m_kbou:20210404111148p:plain

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

 

実行例

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

(実行前)

Book1.xlsmブック内のSheet1シートが選択されています。

f:id:m_kbou:20210406171840p:plain

(実行後) 

Book1.xlsmブック内のSheet2シートが選択されたと同時に「選択したシートがアクティブになりました。」が表示されます。(※別シート(Sheet2シート)が選択された事で、プロシージャが実行されてメッセージが表示されました。)

f:id:m_kbou:20210406171854p:plain

 

サンプル

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

drive.google.com

 

おわりに

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

 

紹介動画

youtu.be