即効テクニック |
他のユーザーにシートをいじられては困る、という場合はシートを保護して変更禁止にしてしまいましょう。 サンプルでは、シート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
●補足説明●
- ProtectContentsプロパティは、シートが保護されている場合はTrueを、保護されていない場合はFalseを返します。
- Protectメソッドは、対象オブジェクトを保護して変更を禁止します。 <構文> object.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly) Password:省略可。パスワード文字列(Variant)を指定します。省略するとパスワードの使用無しで保護解除できます。パスワードは大文字小文字を区別します。パスワードを忘れてしまわないように注意! DrawingObjects:省略可。ワークシート上の描画オブジェクトを保護する場合、Trueを設定します。規定値はFalseです。 Contents:省略可。グラフの場合はグラフ全体、ワークシートの場合はセルを保護させるには、Trueを指定します。既定値はTrueです。 Scenarios:省略可。シナリオを保護するには、True を指定します。 既定値は True です。 UserInterfaceOnly:省略可。Trueを指定すると、画面上からの変更は保護されますが、マクロからの変更は保護されません。 この引数を省略すると、マクロからも、画面上も変更することができなくなります。
- Unprotectメソッドは、シートの保護を解除します。