HOME > 即効テクニック > Excel VBA > シート操作関連のテクニック > シートを保護する(Protect/Unprotectメソッド)

即効テクニック

シート操作関連のテクニック

シートを保護する(Protect/Unprotectメソッド)

(Excel 2000)
Protectメソッドは対象シートを保護し、ユーザーの変更を禁止します。保護の解除はUnprotectメソッドを使用しますが、その際にはProtectメソッドで指定した
パスワードを引数Passwordで指定する必要があります。なお、パスワードは大文字と小文字を区別します。

構文  Object.Protect(Password, DrawingObjects, Contents, Scenarios,
                       UserInterfaceOnly)   シートの保護
        Object.Unprotect(Password)          シートの保護解除

設定項目           内容
  Object             Worksheet, Chartオブジェクト
  Password           保護解除の際に必要なパスワード [省略可能]
  DrawingObjects     描画オブジェクトを保護する(True)、
                     しない(False:規定値)[省略可能]
  Contents           シートの内容を保護する(True:規定値)、
                     しない(False)[省略可能]
  Scenarios          シナリオを保護する(True:規定値)、しない(False)
                     対象がワークシートの場合のみ有効 [省略可能]
  UserInterfaceOnly  マクロからの変更は可能にする(True)、
                     マクロからも変更できない(False:規定値) [省略可能]

次のサンプル1は、アクティブシート内の内容と図形を手動操作による変更から保護します。
●サンプル1●
Sub ProtectSamp1()

    ActiveSheet.Protect Password:="pass", DrawingObjects:=True, _
        contents:=True, UserInterfaceOnly:=True
    MsgBox "マクロ以外からの変更はできなくなりました"
    Range("A1").Value = "▼Excelのオブジェクト"        '----(1)

End Sub
引数UserInterfaceOnlyにTrueを指定していますので、マクロからの変更は可能です。
(1)のステートメントでセルに値が入力されたことに注目してください。
なお、引数UserInterfaceOnlyをTrueにした設定が有効なのは、設定後からブックを閉じるまでです。
一旦閉じたファイルに対しては、再度Protectメソッドを実行してUserInterfaceOnlyをTrueに設定しなおしてください。

保護を解除するコードは次のようになります。

●サンプル2●
Sub Unprotectsamp1()

    ActiveSheet.Unprotect Password:="pass"  '---パスワードを指定して保護を解除

End Sub
●手動操作からシートの内容を保護しアウトラインは操作可能にする●
手操作からシートを保護した場合、オートフィルター、ピボットテーブル、アウトラインに関しても操作できなくなりますが、この3つに関してはそれぞれ、操作を可能にするかどうかを設定できるように次の3つのプロパティが用意されています。

・オートフィルター      EnableAutoFilterプロパティ
・ピボットテーブル      EnablePivotTableプロパティ
・アウトライン          EnableOutlinigプロパティ

これらのプロパティも、UserInterfaceOnlyの設定と同様、有効なのはブックを閉じるまでの間だけですので注意してください。
手操作からシートの内容は保護しながら、アウトラインは操作できるようにするコードはサンプル3のようになります。引数UserInterfaceonlyにTrueを指定しない
と動作しませんので注意してください。なお、パスワードは省略していますので、保護解除の際にもパスワードは不要です。
●サンプル3●
Sub ProtectSamp2()

    ActiveSheet.EnableOutlining = True  '---アウトラインの操作を可能にする
    ActiveSheet.Protect DrawingObjects:=True, contents:=True, _
        UserInterfaceonly:=True         '--- UserInterfaceonly:=Trueは必須
    MsgBox "アウトラインの操作は可能です。操作してみてください。"

End Sub