シートが保護されていたら確認メッセージを表示する

シートの操作

シートの保護するVBAコードを実行したらエラーになった経験ありませんか?

それはすでにシートの保護状態なのに実行したからです。

このようにマクロエラーを防ぐ方法として利用しませんか?

ここでは、エクセルファイルを開くと自動的にシートの保護を設定していることをメッセージで知らせて、保護されていない場合は指定セルのみ部分的に保護解除して、パスワード付きのシート保護を設定するようにVBAコードを書きます。

目次

ProtectContentsでシートの保護状態を確認

シートの現在の状態が、シートの保護設定状態なのか解除状態なのかを把握する必要がありますので、ProtectContentsプロパティを使います。

シートの保護状態を取得するVBAコード

If ActiveSheet.ProtectContents Then

この1行で、「もし表示中のシートが保護状態だったら」となりますね。

続けて保護状態ならば、「保護設定状態です」とメッセージを表示して保護状態確認プログラムをいったん終了(End If)します。

メッセージを表示するVBAコード

If ActiveSheet.ProtectContents Then
MsgBox “保護設定状態です”
Exit Sub

次に、保護設定状態でない(End If)場合(解除状態)には、シートの保護状態になってもセルの入力が可能にできる範囲を指定します。

シート保護状態でもセル操作可能にするVBAコード

End If
Range(“A1:C3”).Locked = False

これで、セルA1~C3の範囲がシートの保護設定(Locked)になっても解除状態(False)に指定しました。

そして最後にパスワード(1234)設定してシートを保護します。

パスワード設定してシートを保護するVBAコード

ActiveSheet.Protect Password = “1234”

最後にエクセルファイルを開くと自動的にプログラムを実行させるために、This WorkBookに記載し、sheet1のセルA1を選択してから実行させると以下のようになり完成します。

This WorkBookに書き込んで完成

Private Sub Workbook_Open()
Sheets(“sheet1”).Select
Range(“A1”).Select
If ActiveSheet.ProtectContents Then
MsgBox “保護設定状態です”
Exit Sub
End If
Range(“A1:C3”).Locked = False
ActiveSheet.Protect Password = “1234”
End Sub

シートの保護関連VBAコード
目次