ワークシートでひな形を作って、マクロで処理をさせるような物を作ったとき、
ひな形を壊さないようにシートに保護をかけることはよく出てきます。
また、マクロでは書き込みをしたいのだけれど、ユーザーからは書き込みを
させたくない場所というのもあります。
そんなときの処理は、どうしたらいいのでしょうか。
ワークシートを保護したり、解除したりするには次のようなメソッドを使います。
ワークシートに保護をかけると、文字の入力ができなくなります。
マクロで書き込むこともできません。
Sub test11() ActiveSheet.Protect ←@ End Sub |
@ ワークシートに保護をかけます。 |
Sub test12() ActiveSheet.Unprotect ←A End Sub |
A ワークシートの保護を解除します。 |
保護のかかっているワークシートにマクロから書き込もうと思うと、
いったん保護を解除しないといけません。
次のプロシージャでは、処理の前に解除し、処理後に保護をかけています。
このプロシージャは、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 ここでまた保護をかけます。 |
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)のデータを削除しようとしたり、編集したりしようとしてみてください。 エラーメッセージが出て、書き込みができません。 |