VBAによるワークブックの保護(パスワードによる保護/保護解除)
In this Article
Excelでは、ワークブックを変更から保護する機能があります。このチュートリアルでは、VBAを使用してワークブックの構成を保護または保護解除する方法について説明します。
VBAによるワークブックの保護
VBA ワークブックの保護では、ワークブックの構成をロックすることができます。ワークブックが保護されると、ユーザーはワークシートの追加、削除、非表示/非表示解除、保護/保護解除ができなくなります。モデルを構築している場合、ユーザー(またはあなた!)が誤ってワークシートを削除するのを防ぐために、おそらくワークブックの保護を有効にしたいと思うことでしょう。
ワークブックの保護解除 VBA
ワークブックの保護を解除するには、次のコードを使用するだけです。
Workbooks("Book1").Unprotect
注意:このコードは、ワークブックがパスワードなしで保護されている場合にのみ機能します。パスワード付きで保護されている場合は、パスワードを入力して保護を解除する必要があります。
パスワード付きワークブックの保護を解除する
次のコードは、パスワードで保護されているワークブックの保護を解除します。
Workbooks("Book1").Unprotect Password:="password"
Password:= を省略することもできます。
Workbooks("Book1").Unprotect "password"
ThisWorkbookの保護を解除する
このコードはThisWorkbookの保護を解除します(ThisWorkbookは実行中のコードが保存されているワークブックで、変わることはありません)。
ThisWorkbook.Unprotect
またはパスワードでThisWorkbookの保護を解除する。
ThisWorkbook.Unprotect "password"
ActiveWorkbookの保護を解除する
このコードでは、ActiveWorbookのプロテクトを解除します。
ActiveWorkbook.Unprotect
またはパスワード付きのActiveWorkbookの保護を解除します。
ActiveWorkbook.Unprotect "password"
開いているすべてのワークブックの保護を解除する
このコードでは、開いているすべてのワークブックの保護を解除します。
Sub UnprotectAllOpenWorkbooks()
Dim wb As Workbook
For Each wb In Workbooks
wb.Unprotect
Next wb
End Sub
ワークブックの保護を解除する – パスワードを知らない場合
パスワードを知らずにワークブックの保護を解除する必要がある場合、いくつかのアドインが役に立ちます。 おすすめは、Ribbon Commanderです。
ワークブック内のすべてのシートの保護を解除する
ワークブックの保護を解除した後、ワークブック内のすべてのシートの保護も解除したい場合があります。 以下は、すべてのシートの保護を解除するプロシージャです。
Sub UnProtectWorkbookAndAllSheets()
Dim ws As Worksheet
ActiveWorkbook.Unprotect
For Each ws In Worksheets
ws.Unprotect
Next
End Sub
ワークブックを保護する
保護解除と同様に、ワークブックの構成を保護することができます。
パスワードなしでワークブックを保護する
次のコードは、ワークブックを保護します(パスワードなし)。
Workbooks("Book1").Protect
注:パスワードなしのワークブック保護を適用することがよくありますが、これは単にワークブックが誤って変更されるのを防ぐためです。
パスワードでワークブックを保護する
このコードでは、ワークブックの構造を(パスワードで)保護します。
Workbooks("Book1").Protect "password"
または
Workbooks("Book1").Protect Password:="password"
Excelファイルのパスワード保護
ワークブックの保護の代わりに、Excelファイル全体をパスワードで保護したい場合があります。 VBAを使用してそれを行うには、パスワード付きのワークブックとして保存します。
Workbooks("Book1").SaveAs "password"
ワークブックの保護/保護解除の例
保護されたワークブックのすべてのワークシートの非表示を解除する
このプロシージャは、ワークブックの保護を解除し、すべてのワークシートを非表示にしてから、ワークブックを再度保護します。
Sub UnprotectWB_Unhide_All_Sheets()
Dim ws As Worksheet
ActiveWorkbook.Unprotect
For Each ws In Worksheets
ws.Visible = xlSheetVisible
Next
ActiveWorkbook.Protect
End Sub
ワークブックとすべてのシートの保護
このプロシージャは、ワークブック内のすべてのワークシートを保護し、その後、ワークブックを保護します。
Sub ProtectWB_Protect_All_Sheets()
Dim ws As Worksheet
ActiveWorkbook.Unprotect
For Each ws In Worksheets
ws.Protect
Next
ActiveWorkbook.Protect
End Sub
パスワード保護も追加することができます。
Sub ProtectWB_Protect_All_Sheets_Pswrd()
Dim ws As Worksheet
ActiveWorkbook.Unprotect "password"
For Each ws In Worksheets
ws.Protect "password"
Next
ActiveWorkbook.Protectの "password"
End Sub