ブックの保護を設定/解除する方法を解説します。
とその前に、「ブックの保護」という名称ですが、実際に保護されるのはシートです。
ブックを保護した場合に禁止される操作は、
ワークシートの「追加」「表示/非表示」「削除」「移動」「名前変更」です。
シート構成の変更を禁止するのが「ブックの保護」ですので、
機能を勘違いしないようにしましょう。
ちなみに本当にブックを保護したい(ブック名の変更や削除を禁止したい)場合は、
Excelの外、Windowsの話になりますので、Excel/VBAの機能ではできません。
適当にググって対応してください。
では始めます。
ブックを保護する/保護を解除する
ブックの保護を設定/解除する場合は、
WorkbookオブジェクトのProtect/Unprotectメソッドを使用します。
コードは以下の通り非常に簡単です。
' ブックを保護 Workbooks("○○.xlsx").Protect ' ブックの保護を解除 Workbooks("○○.xlsx").Unprotect ' ブックを保護(パスワードあり) Workbooks("○○.xlsx").Protect "1234" ' ブックの保護を解除(パスワードあり) Workbooks("○○.xlsx").Unprotect "1234"
ブックを保護するだけならマクロでやる理由があまりないので、
このコードを使う目的としては、
「保護を解除→マクロでシートを編集→再度保護」
というマクロを作成し、マクロでしかシート構成を変更できないファイルを作ることが多いかなと思います。
そのような場合は、以下のようなコードを書けばOKです。
ThisWorkbook.Unprotect ~シート構成を変更する処理~ ThisWorkbook.Protect
ブックが保護されているか調べる
ブックが保護されているか調べるには、
WorkbookオブジェクトのProtectStructureプロパティを調べます。
If Workbooks("○○.xlsx").ProtectStructure = True Then MsgBox "ブックが保護されているため処理を中断します。 Exit Sub End If
といっても、
- 保護されたブックにProtectメソッドを実行
- 保護されていないブックにUnprotectメソッドを実行
は、どちらもエラーにはなりません。
つまり「ブックが保護されていれば保護を解除する」処理にIf文は不要で、
Workbooks("○○.xlsx").Unprotect
とするだけでよいです。
なのでこのプロパティを使うことはあまりないかもしれません。
ブックの保護に関する解説は以上です。
一応補足しておきますと、WorkbookオブジェクトのProtectメソッドには、
第1引数「Password」のほかに、Structure、Windowsの2つの引数があります。
これは「ブックの保護」を手作業で行ったときに出る
このダイアログの「シート構成」「ウィンドウ」のチェックに該当していますが、
このチェックボックスは古い機能の名残です。
(昔はウィンドウの大きさを変更できなくすることができました)
現行のExcelでは画像の通り「ウィンドウ」はグレーアウトしており、
その上で「シート構成」のチェックまで外すと「OK」が押せません。
マクロで無理やりこの引数を指定した場合は、
ThisWorkbook.Protect Structure:=False ' ↑シートの保護はされない(保護されていた場合は解除される) ThisWorkbook.Protect Windows:=True ' ↑引数が無視されウィンドウロックはかからない(シートの保護はかかる)
このような挙動になります。
Protect Structure:=False がUnprotectと同じ動きをしますが、
もちろんそんなことをする意味はありません。
Workbook.Protectの引数は事実上Password1つですのでご安心?ください。
ほぼ豆知識になりますが、ブックが保護されているか調べるのに使うプロパティの名前が「ProtectStructureプロパティ」だったのはそういう理由です。