コマンドーバーと数式バーの表示方法をブックの開閉時に設定するには?

Question 16p 拙著「組み方講座・プロの定番」 Previous Next
294ページ 4章2-2 合わせ技[3] ◆ 環境・・ Excel 2003 & Windows XP
詳細は こちら
コマンドバーと数式バーの表示状況の取得、非表示、復元をそれぞれのマクロで表現したいですが、どうすればいいですか?
例えば、ブックを開くときに、現在の表示状況を取得し、非表示にする。ブックを閉じるときに、復元する。 教えてください。
Answer   Copyright (C) 2007.2.23 永井善王
拙著「Excel VBA マクロ組み方講座 プロの定番・裏技・合わせ技[編]」をご購読、ありがとうございます
そのサンプルは 「コマンドーバーと数式バーの表示状態を取得してから非表示にする等して後で復元する」 と 題する
マクロです。

「コマンドバーと数式バーの表示状況の取得、非表示、復元」するためのコードは、ズバリ、本に載っていますので、
あなたがお知りになりたいことは、どうすれば、ブックを開くときと閉じるときに、そうすることができるようになるか? ですね。

結論から申し上げます。
ブックを開くときに自動的に実行される Auto_Openプロシージャと、閉じるときに自動実行される Auto_Closeプロシージャを作成すれば実現できます。両方とも標準モジュールに作成します。

ブックを開くときにコマンドバーと数式バーの表示状況を取得してから非表示にするマクロ
(中身のコードは本と同じです。)
Sub auto_open()
    ReDim 覚え(CommandBars.Count)
    インデックス = 0
    For Each 各バー In CommandBars
        If 各バー.Visible Then                  '表示されていれば
            インデックス = インデックス + 1
            覚え(インデックス) = 各バー.Name    '名前
        End If
    Next

    MsgBox "表示中のコマンドバーの数: " & インデックス & vbCr & "非表示にします"
    For I = 1 To インデックス
        名前 = 覚え(I)
        If "Worksheet Menu Bar" = 名前 Then
            CommandBars(名前).Enabled = False   '非表示にする
        Else
            CommandBars(名前).Visible = False
        End If
    Next

    数式バーの現状 = Application.DisplayFormulaBar
    MsgBox "数式バーの現状: " & 数式バーの現状 & " (現状に拘らず非表示にします)"
    Application.DisplayFormulaBar = False
End Sub
ブックを閉じるときにコマンドバーと数式バーの表示を復元するマクロ
(中身のコードは本と同じです。)
Sub auto_close()
    MsgBox "戻します"
    Application.ScreenUpdating = False          '画面を更新しない
    For I = 1 To インデックス
        名前 = 覚え(I)
        If "Worksheet Menu Bar" = 名前 Then
            CommandBars(名前).Enabled = True    '表示する
        Else
            CommandBars(名前).Visible = True
        End If
    Next
    Application.DisplayFormulaBar = 数式バーの現状
    With ActiveWindow
        .DisplayHorizontalScrollBar = True
        .DisplayVerticalScrollBar = True
        .DisplayWorkbookTabs = True
    End With
    Application.DisplayFormulaBar = 数式バーの現状
End Sub
標準モジュールの冒頭に変数を宣言するコードを作成する
(Auto_OpenとAuto_Closeの2つのプロシージャに跨って使用する変数があるため、宣言が必要です。)
Option Explicit
Dim 覚え() As String
Dim インデックス, 各バー, 名前
Dim 数式バーの現状, I
2つのプロシージャの中のメッセージボックスを表示するコードは、削除してもかまいません。
なお、ここではご説明を割愛しますが、Auto_Open・Auto_Closeプロシージャに代えて、Workbook_Opene・Workbook_BeforeCloseイベントプロシージャを ThisWorkbookのコード画面で作成する方法もあります。
では、以上を参考にして挑戦してみて、結果をお知らせください。

Excel VBA Macro