シートに保護をかける。

ワークシートでひな形を作って、マクロで処理をさせるような物を作ったとき、
ひな形を壊さないようにシートに保護をかけることはよく出てきます。
また、マクロでは書き込みをしたいのだけれど、ユーザーからは書き込みを
させたくない場所というのもあります。
そんなときの処理は、どうしたらいいのでしょうか。

1.シートを保護する。

ワークシートを保護したり、解除したりするには次のようなメソッドを使います。
ワークシートに保護をかけると、文字の入力ができなくなります。
マクロで書き込むこともできません。

Sub test11()

ActiveSheet.Protect ←@

End Sub
 
@ ワークシートに保護をかけます。
Sub test12()

ActiveSheet.Unprotect ←A

End Sub
A ワークシートの保護を解除します。

2.保護してあるシートにマクロで書き込む。

保護のかかっているワークシートにマクロから書き込もうと思うと、
いったん保護を解除しないといけません。
次のプロシージャでは、処理の前に解除し、処理後に保護をかけています。
このプロシージャは、Celss(1,1)に、1〜10000まで書き込んでいます。

Sub test13()

ActiveSheet.Unprotect ←@

  Dim n As Integer

  For n = 1 To 10000
    Cells(1, 1) = Cells(1, 1)+1 ←A
  Next n

ActiveSheet.Protect ←B

End Sub
@ ここでいったん保護を解除します。

A ここで、処理をします。
  Cells(1,1)に1を足していきます。

B ここでまた保護をかけます。 

3.ユーザーの書き込みは禁止し、マクロからは書き込む。

Protectメソッドの引数で、UserInterfaceOnlyを設定すると、マクロからだけ書き込むことができます。

Sub test14()

ActiveSheet.Protect userinterfaceonly:=True ←@

  Dim n As Integer

  For n = 1 To 10000
    Cells(1, 1) = Cells(1, 1)+1 ←A
  Next n

End Sub
@ ここで、ユーザーからの書き込みだけ禁止しています。

A マクロからの書き込みはできます。


※ ユーザーからの書き込みが禁止されていることを確かめるのは、
  Cells(1,1)のデータを削除しようとしたり、編集したりしようとしてみてください。
  エラーメッセージが出て、書き込みができません。