「マクロ 複数 シート 保護」
「エクセル マクロ シートを一括で保護する ピポットだけ使える」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
複数のシートを一括して保護するマクロ、ピボットテーブルの含まれるシートを除いたその他のシートを保護するマクロを探している方による検索です。
(ちなみに、とてもよくあるミスですが、
ピポットテーブルではなく、
ピボットテーブルが正しい呼称です)
複数のシートを保護するサンプルマクロ
以下のようなマクロで複数のシートを一気に保護することができます。
Const PASS = "hogehoge" Dim i As Long
For i = ActiveSheet.Index To Sheets.Count
Sheets(i).Protect Password:=PASS
Next i
End Sub
上記のマクロを実行すると、アクティブなシートから後ろ(右側)のシートが、「hogehoge」というパスワードが設定されて保護されます。
定数・PASSに「hogehoge」という文字列を設定し、
Const PASS = "hogehoge"
アクティブなシートから最後のシートまでループを回して、
For i = ActiveSheet.Index To Sheets.Count
定数・PASSで設定した文字列を、引数・Passwordに指定しながら、Worksheetオブジェクト・ChartオブジェクトのProtectメソッドを実行しています。
Sheets(i).Protect Password:=PASS
For~Nextループ文を、
For i = ActiveSheet.Index To Sheets.Count
から
For i = 1 To Sheets.Count
に変更すれば、全シートの保護を行うことができます。
ピボットテーブル以外の全シートを保護するサンプルマクロ
以下のようなマクロで、ピボットテーブルの含まれない、すべてのシートを一気に保護することができます。
Const PASS = "hogehoge"
Dim i As Long
For i = 1 To Sheets.Count
With Sheets(i)
If .PivotTables.Count = 0 Then
.Protect Password:=PASS
End If
End With
Next i
はじめに定数・PASSにパスワードを設定しているのは先のマクロと同じです。
Const PASS = "hogehoge"
先頭のシートからすべてのシートに対してループを回して、
For i = 1 To Sheets.Count
シート上のPivotTablesコレクションオブジェクトのCountプロパティが「0」なら、ピボットテーブルが存在しないシートということなので、
With Sheets(i)
If .PivotTables.Count = 0 Then
定数・PASSで設定した文字列を、引数・Passwordに指定してProtectメソッドを実行しています。
.Protect Password:=PASS
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 複数のシートを保護するマクロ