ワークシートの保護を設定・解除する
 他のユーザーにシートをいじられては困る、という場合はシートを保護
して変更禁止にしてしまいましょう。
 
 サンプルでは、シート1が保護されているかどうかを確認して、保護されてい
ない場合はパスワード付きで保護し、保護されている場合は、マクロからであ
ればシート内容を変更できる確認をするか、もしくは保護の解除をしています。 

 保護を設定する場合は、画面上ではシートの内容を変更できないけれど、マクロ
では変更可能という設定をしています。ですから、サンプルマクロを実行して
シート1が保護されている場合は、マクロでセル”A1”に”TEST”と入力してみる
か、保護を解除するか、どちらかを選択するようにメッセージボックスを表示して
促します。 

 手動でのシートの保護は、[ツール]−[保護]−[シートの保護]です。 
解除は、[ツール]−[保護]−[シートの保護の解除]です。 
保護されたシートを変更しようとすると、「変更しようとしているセルまたはグラフ
は保護されているため、読み取り専用となっています」というメッセージが表示され
ます。 

●準備● 
新規ブックにサンプルマクロを貼り付けてください。 

●サンプル● 

Sub Sample() 

    Dim myMsg As String, myStyle As String, myTitle As String, Answer As String

    Application.Worksheets(1).Activate 

    '<シートが保護されているかどうか表示します。> 
    MsgBox "シート1の保護非保護:" & ActiveSheet.ProtectContents '←(1) 

    '<シートが保護されていない場合> 
    If ActiveSheet.ProtectContents = False Then 
    '<シートの保護を設定します。> '←(2) 
    ActiveSheet.Protect password:="VBASample", _ 
      DrawingObjects:=True, _ 
      contents:=True, _ 
      Scenarios:=False, _ 
      userinterfaceonly:=True 
      MsgBox "シートを保護しました。" & Chr(13) & _ 
                      "シート内容が変更できない事を確認してください。" 
    Else 
    '<シートが保護されている場合、マクロでシート内容を変更してみるか 
    'シートの保護を解除するかのメッセージを表示します。> 
    '<メッセージを定義します。> 
    myMsg = "マクロでシート内容を変更しますか?" & Chr(13) & Chr(13) & _ 
                      "マクロでシート内容を変更する場合は[はい]を、" & Chr(13) & _ 
                      "シートの保護を解除する場合は[いいえ]をクリックしてください。" 
    '<ボタンを定義します。> 
    myStyle = vbYesNo + vbQuestion 
    '<タイトルを定義します。> 
    myTitle = "シートの保護" 
    '<メッセージを表示します。> 
    Answer = MsgBox(myMsg, myStyle, myTitle) 
    If Answer = vbYes Then 
    '<[はい] がクリックされた場合、マクロでシート内容を変更します。> 
      ActiveSheet.Range("A1") = "TEST" 
    Else 
    '<[いいえ] がクリックされた場合、シートの保護を解除します。> 
    ActiveSheet.Unprotect password:="VBASample" '←(3) 
    End If 

  End If 

End Sub 

●補足説明● 

(1) ProtectContentsプロパティは、シートが保護されている場合はTrueを、保護されて
いない場合はFalseを返します。 

(2) Protectメソッドは、対象オブジェクトを保護して変更を禁止します。 
    <構文> 
    object.Protect(Password, DrawingObjects, Contents, 
                               Scenarios, UserInterfaceOnly) 
Password:省略可。パスワード文字列(Variant)を指定します。省略するとパスワードの使用
無しで保護解除できます。パスワードは大文字小文字を区別します。パスワードを忘れてしま
わないように注意! 

DrawingObjects:省略可。ワークシート上の描画オブジェクトを保護する場合、Trueを設定
します。規定値はFalseです。 

Contents:省略可。グラフの場合はグラフ全体、ワークシートの場合はセルを保護させるには、
Trueを指定します。既定値はTrueです。 

Scenarios:省略可。シナリオを保護するには、True を指定します。 
既定値は True です。 

UserInterfaceOnly:省略可。Trueを指定すると、画面上からの変更は保護されますが、マクロ
からの変更は保護されません。 
この引数を省略すると、マクロからも、画面上も変更することができなくなります。 

(3) Unprotectメソッドは、シートの保護を解除します。 




戻る


Excel Word Access VBA! モーグ