参考元:【VBA】シートの保護と解除、パスワード設定と判定【ProtectとUnprotectを使う】
https://daitaideit.com/vba-sheet-protect/
シートの保護をする
Sub TEST1()
'シートを保護
Sheets("Sheet1").Protect
End Sub
シート保護を解除する(.UnProtect)
Sub TEST2()
'シートの保護を解除
Sheets("Sheet1").Unprotect
End Sub
シートの保護のパスワード設定と解除と判定
パスワードを設定してシート保護
Sub TEST3()
'パスワードを設定して、シートを保護
Sheets("Sheet1").Protect Password:=123
End Sub
パスワード付きシート保護を解除
Sub TEST4()
'パスワード付きのシート保護を解除
Sheets("Sheet1").Unprotect Password:=123
End Sub
シート保護でパスワード設定の有無を判定
「Password:=""」で、保護を解除して、エラーが発生する場合は「パスワードあり」、エラーが発生しない場合は「パスワードなし」と判定します。
Sub TEST5()
On Error Resume Next
'空欄のパスワードで、保護を解除しようとしてみる
Sheets("Sheet1").Unprotect Password:=""
'エラーが出る場合は、パスワードの設定あり
If Err.Number <> 0 Then
Debug.Print "パスワードが設定されています"
'エラーなしは、パスワード設定なし
Else
Debug.Print "パスワードは設定されていません"
End If
On Error GoTo 0
End Sub
一部のセルのロックを解除してシート保護をする
セルロックの解除は「セル範囲.Locked = False」を使います。
※1回下記コードを実行した後、再実行できない。
セルロック再度設定するように、Sheets("Sheet1").Unprotect解除する必要。
Sub TEST6()
'A1のセルロックを解除
Sheets("Sheet1").Range("A1").Locked = False
'シートを保護
Sheets("Sheet1").Protect
'A1に値を入力
Sheets("Sheet1").Range("A1") = "ABC"
End Sub
「UserInterFaceOnly:=True」を使う
マクロからの入力を有効にして、シート保護
Sub TEST8()
'マクロからの操作は許可して、シートをロック
Sheets("Sheet1").Protect UserInterFaceOnly:=True
End Sub
シート保護の状態で、マクロから値を入力
Sub TEST9()
'マクロから値を入力してみる
Sheets("Sheet1").Range("A1") = "ABC"
End Sub