他のユーザーにシートをいじられては困る、という場合はシートを保護
して変更禁止にしてしまいましょう。
サンプルでは、シート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メソッドは、シートの保護を解除します。
|