シート保護状態でオートフィルタを使用できるようにする。

オートフィルタだけならマクロがなくても可能です。   シート保護の設定
Excel2007以降ではマクロを使用しなくても、シート保護の際に「オートフィルタの使用」にチェックを付けるだけでオートフィルタが使用できるようになります。

但し「オートフィルタの使用」はデフォルトではチェックが付かないので忘れるとロックされます。
このページでは「オートフィルタの使用」にチェックを付けていない状態からオートフィルタが使用できるようにするマクロをご紹介します。
マクロが有効になった時の起動時のイベントマクロにセットしています。
本ページの先頭で説明した通り「オートフィルタの使用」にチェックを付けてシート保護していればこのようなマクロは必要ないのですが、 このマクロを実装させておけばチェックを付けずにシート保護して(あるいはシート保護を忘れて)保存してしまってもオートフィルタが使用できる状態でシート保護し直されます。(この例ではパスワードは付けていません)

Private Sub Workbook_Open()
    Dim objSh As Worksheet                      ' ワークシート(Work)
    ' 各ワークシートを巡回
    For Each objSh In ThisWorkbook.Worksheets
        ' オートフィルタが配置されているか
        If objSh.AutoFilterMode Then
            objSh.Protect AllowFiltering:=True  ' シート保護再セット(フィルタ可)
        End If
    Next objSh
End Sub
実装は「ThisWorkbook」の「Workbook_Open」イベントか、標準モジュールの「Auto_Open」に記述します。
なお、「マクロ有効ブック(*.xlsm)」で保存させる必要があります。



オートフィルタ操作については先頭コラムの通りマクロは必要ないのですが、グループ操作を含めるとマクロは必要です。

Option Explicit

Private Sub Workbook_Open()
    Dim objSh As Worksheet                      ' ワークシート(Work)
    ' 各ワークシートを巡回
    For Each objSh In ThisWorkbook.Worksheets
        With objSh
            ' グループ操作とオートフィルタ操作を可能としてシート保護
            .EnableOutlining = True
            .EnableAutoFilter = True
            .Protect UserInterfaceOnly:=True
        End With
    Next objSh
    ' 非保存になるため保存済み状態にする
    ThisWorkbook.Saved = True
End Sub