イベントによりツールバー表示を制御する

複数のワークブックを開いた時や、シートを切り替えた時にツールバーの表示、非表示を切り替える。

Excelは複数のワークシートや複数のワークブックを扱いますが、作成したツールバーは関係ないシートやワークブックが選択された時に表示されたままでは不都合です。


'***************************************************************************************************
'   ツールバーテスト2                                              ThisWorkbook(Class)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev   変更履歴内容---------------------------------------------------------------------->
' 19/12/03(1.0.0)新規作成
'***************************************************************************************************
Option Explicit

'***************************************************************************************************
'   ■■■ ワークブックイベント ■■■
'***************************************************************************************************
'* 処理名 :Workbook_WindowActivate
'* 機能  :このワークブックがアクティブになったイベント
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(既定)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2019年12月03日
'* 作成者 :井上 治
'* 更新日 :2019年12月03日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    '-----------------------------------------------------------------------------------------------
    Dim xlAPP As Application                                        ' Excel.Application
    Set xlAPP = Application
    On Error Resume Next
    ' Sheet1が選択されていたらツールバーを表示させる
    xlAPP.CommandBars(g_cnsTitle).Visible = ActiveSheet.Name = "Sheet1"
    On Error GoTo 0
End Sub

'***************************************************************************************************
'* 処理名 :Workbook_WindowActivate
'* 機能  :このワークブックが非アクティブになったイベント
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(既定)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2019年12月03日
'* 作成者 :井上 治
'* 更新日 :2019年12月03日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    '-----------------------------------------------------------------------------------------------
    Dim xlAPP As Application                                        ' Excel.Application
    Set xlAPP = Application
    On Error Resume Next
    ' ツールバーを非表示にさせる
    xlAPP.CommandBars(g_cnsTitle).Visible = False
    On Error GoTo 0
End Sub

'----------------------------------------<< End of Source >>----------------------------------------
これは、ThisWorkbookのコードページの記述です。ここでのイベント処理でワークブックが切り替わりを判定し、ツールバーの表示制御を行ないます。実際に他のブックを上から開いたりウィンドウを切り替えたりして見て下さい。

さらにシートの切り替えにも対応できます。

'***************************************************************************************************
'   ツールバーテスト2                                              Sheet1(Class)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev   変更履歴内容---------------------------------------------------------------------->
' 19/12/03(1.0.0)新規作成
'***************************************************************************************************
Option Explicit

'***************************************************************************************************
'   ■■■ ワークシートイベント ■■■
'***************************************************************************************************
'* 処理名 :Worksheet_Activate
'* 機能  :Sheet1がアクティブになった時のイベント
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2019年12月03日
'* 作成者 :井上 治
'* 更新日 :2019年12月03日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub Worksheet_Activate()
    '-----------------------------------------------------------------------------------------------
    Dim xlAPP As Application                                        ' Excel.Application
    Set xlAPP = Application
    On Error Resume Next
    ' ツールバーを表示させる
    xlAPP.CommandBars(g_cnsTitle).Visible = True
    On Error GoTo 0
End Sub

'***************************************************************************************************
'* 処理名 :Worksheet_Deactivate
'* 機能  :Sheet1が非アクティブになった時のイベント
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2019年12月03日
'* 作成者 :井上 治
'* 更新日 :2019年12月03日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub Worksheet_Deactivate()
    '-----------------------------------------------------------------------------------------------
    Dim xlAPP As Application                                        ' Excel.Application
    Set xlAPP = Application
    On Error Resume Next
    ' ツールバーを非表示にさせる
    xlAPP.CommandBars(g_cnsTitle).Visible = False
    On Error GoTo 0
End Sub

'----------------------------------------<< End of Source >>----------------------------------------
これはSheet1のコードページのイベント処理です。このサンプルにはSheet2(空のシートですが)があります。シートを切り替えるとSheet1が選択された時だけツールバーが表示されるのが確認できます。

「配布の問題」の「アドイン動作のサンプル」で複数のワークブックを開いている時のツールバー制御の実例があります。