以下の内容はhttps://www.limecode.jp/entry/utility/protect-unprotect-all-worksheetsより取得しました。


すべてのシートの保護を一括で設定/解除する

すべてのシートの保護を一括で設定/解除する方法を解説します。

すべてのシートの保護を一括で設定/解除する

Sub すべてのシートを一括で保護する()
    
    Dim シート As Worksheet
    For Each シート In ThisWorkbook.Worksheets
        
        ' 例:書式変更だけは許可して他をロック
        シート.Protect _
            AllowFormattingCells:=True, _
            AllowFormattingColumns:=True, _
            AllowFormattingRows:=True
        
    Next
    
End Sub
Sub すべてのシートの保護を一括で解除する()
    
    Dim シート As Worksheet
    For Each シート In Thisworkbook.Worksheets
        シート.Unprotect
    Next
    
End Sub

保護の解除は特に引数はなくシンプルですが、
設定については許可する操作を選択する必要があります。


とりあえず「すべての設定を許可するコード」を置いておきますので、
禁止したい操作を消してご利用ください。

Sub すべてのシートを一括で保護する()
    
    Dim シート As Worksheet
    For Each シート In ThisWorkbook.Worksheets
        
        ' 禁止する操作を消してご利用ください。
        シート.Protect, _
            Password:="xxx", _
            AllowFormattingCells:=True, _
            AllowFormattingColumns:=True, _
            AllowFormattingRows:=True, _
            AllowInsertingColumns:=True, _
            AllowInsertingRows:=True, _
            AllowInsertingHyperlinks:=True, _
            AllowDeletingColumns:=True, _
            AllowDeletingRows:=True, _
            AllowSorting:=True, _
            AllowFiltering:=True, _
            AllowUsingPivotTables:=True, _
            DrawingObjects:=False, _
            Scenarios:=False
        
    Next
    
End Sub

シートの保護ダイアログ

ダイアログの表示 引数名 規定値
パスワード Password
ロックされたセル範囲の選択 別プロパティ(後述)
ロックされていないセル範囲の選択 別プロパティ(後述)
セルの書式設定 AllowFormattingCells False
列の書式設定 AllowFormattingColumns False
行の書式設定 AllowFormattingRows False
列の挿入 AllowInsertingColumns False
行の挿入 AllowInsertingRows False
ハイパーリンクの挿入 AllowInsertingHyperlinks False
列の削除 AllowDeletingColumns False
行の削除 AllowDeletingRows False
並び替え AllowSorting False
オートフィルターの使用 AllowFiltering False
ピボットテーブル(グラフ)の使用 AllowUsingPivotTables False
オブジェクトの編集 DrawingObjects True
シナリオの編集 Scenarios True


セル選択の許可設定については専用のコードが必要です。
詳しくはこちらのページをご覧ください。
シートの保護 - セル選択の制限について

現在の保護設定と同じ設定でシートを保護

シートの保護設定は保護を解除しても記憶されており、
以下のコードで「前回と同じ設定でシートを保護」することが出来ます。

Sub すべてのシートを前回と同じ設定で保護する()
    
    Dim シート As Worksheet
    For Each シート In ThisWorkbook.Worksheets
        
        シート.Protect , _
            AllowFormattingCells:=シート.Protection.AllowFormattingCells, _
            AllowFormattingColumns:=シート.Protection.AllowFormattingColumns, _
            AllowFormattingRows:=シート.Protection.AllowFormattingRows, _
            AllowInsertingColumns:=シート.Protection.AllowInsertingColumns, _
            AllowInsertingRows:=シート.Protection.AllowInsertingRows, _
            AllowInsertingHyperlinks:=シート.Protection.AllowInsertingHyperlinks, _
            AllowDeletingColumns:=シート.Protection.AllowDeletingColumns, _
            AllowDeletingRows:=シート.Protection.AllowDeletingRows, _
            AllowSorting:=シート.Protection.AllowSorting, _
            AllowFiltering:=シート.Protection.AllowFiltering, _
            AllowUsingPivotTables:=シート.Protection.AllowUsingPivotTables, _
            DrawingObjects:=シート.ProtectDrawingObjects, _
            Scenarios:=シート.ProtectScenarios

        シート.EnableSelection = シート.EnableSelection
        
    Next
    
End Sub

一つ一つのプロパティを代入し直しているため長たらしいですが、
コード自体は単純なコードです。

細かい引数は特に理解する必要はないと思いますので、
このままコピペで使っていただいてOKです。

汎用関数化

この手の「簡単だけど面倒なコード」は汎用関数にしておきましょう。

Sub すべてのシートを前回と同じ設定で保護する(対象ブック As Workbook)
    
    Dim シート As Worksheet
    For Each シート In 対象ブック.Worksheets
        
        シート.Protect , _
            AllowFormattingCells:=シート.Protection.AllowFormattingCells, _
            AllowFormattingColumns:=シート.Protection.AllowFormattingColumns, _
            AllowFormattingRows:=シート.Protection.AllowFormattingRows, _
            AllowInsertingColumns:=シート.Protection.AllowInsertingColumns, _
            AllowInsertingRows:=シート.Protection.AllowInsertingRows, _
            AllowInsertingHyperlinks:=シート.Protection.AllowInsertingHyperlinks, _
            AllowDeletingColumns:=シート.Protection.AllowDeletingColumns, _
            AllowDeletingRows:=シート.Protection.AllowDeletingRows, _
            AllowSorting:=シート.Protection.AllowSorting, _
            AllowFiltering:=シート.Protection.AllowFiltering, _
            AllowUsingPivotTables:=シート.Protection.AllowUsingPivotTables, _
            DrawingObjects:=シート.ProtectDrawingObjects, _
            Scenarios:=シート.ProtectScenarios

        シート.EnableSelection = シート.EnableSelection
        
    Next
    
End Sub

Sub すべてのシートの保護を一括で解除する(対象ブック As Workbook)
    
    Dim シート As Worksheet
    For Each シート In 対象ブック.Worksheets
        シート.Unprotect
    Next
    
End Sub
' 使用例
Call すべてのシートの保護を一括で解除する(ThisWorkbook)

' ここにブックを加工する処理

Call すべてのシートを前回と同じ設定で保護する(ThisWorkbook)

使用例の通り、メインロジックが劇的に読みやすくなりますね。


このように「簡単だけど書くのが面倒なコード」は、
関数化が簡単な割に、汎用関数にするメリットが大きいです。

汎用関数集を作っている方は、ぜひそのメンバーに加えてあげてください。


汎用関数集の作り方・使い方についてはこちらをどうぞ。




以上の内容はhttps://www.limecode.jp/entry/utility/protect-unprotect-all-worksheetsより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14