【Excel VBA】ブックの保護状態(シート構成・ウィンドウ)を確認する方法

マクロで新しいシートを追加しようとしたり、ウィンドウサイズを変更しようとしたりした際に、「ブックが保護されているため、操作を実行できません」というエラーに遭遇することがあります。

このようなエラーを未然に防ぐためには、処理の実行前にブックの保護状態をVBAで確認するのが有効です。この記事では、ブックの「シート構成」と「ウィンドウ」という2種類の保護状態を調べるためのプロパティを解説します。


目次

ブックの保護とは?

Excelの「ブックの保護」は、主に2つのレベルがあります。これらは、校閲タブのブックの保護から設定できます。

シート構成の保護 (Structure Protection)

シートの追加、削除、名前の変更、移動、非表示/再表示といった、シートタブの構成に関わる操作を禁止します。複数人でファイルを共有する際に、意図しないシート構成の変更を防ぐために利用されます。

ウィンドウの保護 (Window Protection)

ブックウィンドウのサイズ変更、移動、最小化/最大化といった、ウィンドウそのものに対する操作を禁止します。あまり使われることはありませんが、特定のサイズで表示を固定したい場合などに利用されます。


完成したVBAコード

以下が、現在アクティブなブックの2種類の保護状態を確認し、結果をメッセージボックスに表示するVBAコードです。

Sub CheckWorkbookProtectionStatus()

    ' 変数を宣言します
    Dim targetBook As Workbook
    Dim structureStatus As String
    Dim windowStatus As String
    
    ' 現在アクティブなブックを操作対象とする
    Set targetBook = ActiveWorkbook
    
    ' --- 1. シート構成の保護状態を確認 ---
    If targetBook.ProtectStructure = True Then
        structureStatus = "有効 (保護されています)"
    Else
        structureStatus = "無効 (保護されていません)"
    End If
    
    ' --- 2. ウィンドウの保護状態を確認 ---
    If targetBook.ProtectWindows = True Then
        windowStatus = "有効 (保護されています)"
    Else
        windowStatus = "無効 (保護されていません)"
    End If
    
    ' --- 3. 結果をメッセージボックスで表示 ---
    Dim message As String
    message = "ブック「" & targetBook.Name & "」の保護状態:" & vbCrLf & vbCrLf & _
              "▼ シート構成の保護 (.ProtectStructure)" & vbCrLf & "  " & structureStatus & vbCrLf & vbCrLf & _
              "▼ ウィンドウの保護 (.ProtectWindows)" & vbCrLf & "  " & windowStatus
              
    MsgBox message, vbInformation, "保護状態の確認"
    
End Sub

コードのポイント解説

シート構成の保護: .ProtectStructure

Workbookオブジェクトが持つ.ProtectStructureプロパティは、シート構成が保護されていればTrue、されていなければFalseを返します。

マクロで新しいシートを追加する(Worksheets.Add)前などにこのプロパティを確認し、もしTrueであれば、処理を中断したり、ユーザーに保護の解除を促したりといった制御が可能になります。

ウィンドウの保護: .ProtectWindows

同様に、.ProtectWindowsプロパティは、ウィンドウが保護されていればTrue、されていなければFalseを返します。

マクロでウィンドウの表示サイズをApplication.WindowStateなどで変更する前に、この状態を確認するのに役立ちます。


まとめ

ブックの保護状態は、2つのシンプルなBoolean型(True/False)のプロパティで簡単に確認できます。

  • シート構成の保護: myBook.ProtectStructure
  • ウィンドウの保護: myBook.ProtectWindows

シートの追加・削除など、ブックの構造を変更する可能性のあるマクロを組む際には、処理の冒頭でこれらの状態をチェックする習慣をつけることで、予期せぬ実行時エラーを防ぎ、より安定したプログラムを作成することができます。

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

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次