【Excel VBA】シートが保護されているかを判定する(ProtectContents)

はじめに

今回は、シートが保護されているかを判定する方法について解説します。
例えば、シートが保護状態のシートに対して、Protectメソッドを使用するとエラーとなります。
そういったエラーを未然に防ぐために、シートの保護状態を確認する方法をご紹介します。

この記事を読むメリット
  • シートが保護されているかを判定する方法が分かります。
  • コピペで使える実践的なサンプルコードを掲載しています。

基本情報

ProtectContentsプロパティ

シートが保護されているかを判定するには、WorksheetオブジェクトのProtectContentsプロパティを使用します。

構文

Worksheetオブジェクト.ProtectContents

戻り値

  • True:保護されている
  • False:保護されていない
りゅう

使用例として、シートを保護するProtectメソッドはシートを保護されている状態で実行するとエラーが発生します。
シートを保護する直前で判定するのが良いでしょう。

サンプルコード

シートが保護されているかを判定する

シートが保護されているかを判定するサンプルコードです。
シートの保護状況を確認のうえ、メッセージボックスを表示します。

サンプルコード
Public Sub checkSheetProtect()
    Dim targetSheet As Worksheet    ' チェック対象シート

    ' 1番目のシートを取得する
    Set targetSheet = ThisWorkbook.Worksheets(1)

    ' シートの保護判定
    If targetSheet.ProtectContents Then

        MsgBox targetSheet.Name & "シートは保護されています。"
    Else

        MsgBox targetSheet.Name & "シートは保護されていません。"
    End If
End Sub

シートを保護する前に判定する

既に保護されているシートに対して、シートを保護する「Protectメソッド」を使用する場合はエラーとなってしまいます。
エラーを防ぐため、事前に判定するサンプルコードを示します。

サンプルコード
Public Sub execSheetProtect()
    Dim targetSheet As Worksheet    ' 保護対象シート

    ' 1番目のシートを取得する
    Set targetSheet = ThisWorkbook.Worksheets(1)

    ' シートの保護判定
    If Not targetSheet.ProtectContents Then

        ' シートが保護されていない場合は保護する
        targetSheet.Protect
    End If
End Sub

シートの保護が解除されたかを判定する

シートの保護状態を解除する「UnProtectメソッド」が成功したかどうかを判定するサンプルコードです。

サンプルコード
Public Sub checkSheetUnProtect()
    Dim targetSheet As Worksheet    ' 保護解除対象シート

    ' 1番目のシートを取得する
    Set targetSheet = ThisWorkbook.Worksheets(1)

    ' シートの保護解除
    targetSheet.Unprotect

    ' シートの保護判定
    If Not targetSheet.ProtectContents Then

        ' シートが保護解除されている場合
        MsgBox "シートの保護が解除されました。"
    End If
End Sub

最後に

今回は、シートが保護されているかを判定する方法について解説しました。
エラーを未然に防ぐためにも、ご活用いただければと思います。

本記事が皆さんのお力になれば幸いです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA