category name  »  page title date

リボンを点けたり消したり

できあがったブックを、ユーザに好きにいじってもらいたくない場合があります。その時は、シートを保護することになりますが、リボンや数式バーが表示されたままだと、ちょっと不安です。場合によると、行列の見出しや目盛り線も隠しておきたい、ついでに、シートのタブも表示したくない、ということもあります。
ちなみに、これを全部やってみると、次のようになります。

標準モジュール           ChangeDisplay()

'----- 表示モードの切り替え
Public Property Let ChangeDisplayMode(sw)
Dim swStr
    swStr = CStr(sw)
    With Application    
        .DisplayFormulaBar = True
        .FormulaBarHeight = 1   
        .DisplayFormulaBar = sw
        .DisplayStatusBar = sw
        .ExecuteExcel4Macro "show.toolbar(""ribbon""," & swStr & ")"
    End With
    With ActiveWindow   
        .DisplayWorkbookTabs = sw
        .DisplayHeadings = sw
        .DisplayGridlines = sw
    End With
End Property

これで、アクティブな画面のリボンからシートタブまで一括して、表示の ON/OFF ができます。残るはスクロールバーだけ。これは消さないでおきました。

ChangeDisplayMode = True で全表示(左図)、False で全隠蔽(右図)となります。

さて、できあがって配布時に右図のようになっていれば、ひとまず安心・・・・と思ったら大変! これでは不具合があったり改修しようとしたりした時に、VBEを表示してデバッグすることができないではないか。

それで、表示モードを切り替えるためのショートカットを用意することにしました。ユーザーには内緒なので、できるだけ想像できないような組み合わせとして、「Ctrl」+「Alt」+「]」で OFF、「Ctrl」+「Alt」+「[」で ON となるようにしてあります。
SetShortCutKeys = True でショートカットキーが設定、False で解除されます。

標準モジュール(RibbonModule)      SetShortCutKeys()

'----- ショートカットキーで実行するマクロを記載したモジュール名を定義
Private Const moduleName = "RibbonModule"
'----- ショートカットキーと実行するマクロ名のペアを定義
Private Const scKeysStr = _
      "^%{[},  displayOn,  ^%{]},  displayOff"

'----- ショートカットキーの設定/解除
Public Property Let SetShortCutKeys(sw)
Dim keyCount, scKeys, n, scKey, procName
    scKeys = Split(scKeysStr, ",")  
    keyCount = UBound(scKeys)
    For n = 0 To keyCount Step 2
        scKey = Trim(scKeys(n))
        procName = Trim(scKeys(n + 1))
        Application.OnKey scKey     'その設定を解除して
        If sw Then
            Application.Wait [now()] + 200 / 86400000   'ちょっと待ってから
            'ショートカットキーを設定する
            Application.OnKey scKey, moduleName & "." & procName
        End If
    Next
End Property
'----- 実行するマクロ
Private Sub displayOn(): ChangeDisplayMode = True: End Sub
Private Sub displayOff(): ChangeDisplayMode = False: End Sub

これで、ThisWorkbook に

ThisWorkbook

Private Sub Workbook_Open()
    SetShortCutKeys = True
    ChangeDisplayMode = False
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    SetShortCutKeys = False
End Sub

と書いておけば、ブックを開いたとたんに上の右図のようになり、ショートカットを知らないユーザーにはシートの保護の解除もマクロの編集もできなくなります。でも、それを知っているあなたは Ctrl + Alt + [ で通常の表示に切り替え、Ctrl + Alt + ] でもとに戻すことができます。
めでたし、めでたし。