ワークシートを保護するにはProtectメソッドを実行します。次のコードはアクティブシートを保護します。
Sub Sample07() ActiveSheet.Protect End Sub
保護を解除するにはUnprotectメソッドを実行します。次のコードはアクティブシートの保護を解除します。
Sub Sample07_2() ActiveSheet.Unprotect End Sub
シートを保護するときはパスワードを設定できます。パスワード付きで保護されたシートは、解除するときにもパスワードが必要です。権限を持たないユーザーにはシートの内容を見せたくないときなどに有効ですね。パスワードを付けてシートを保護するには、Protectメソッドの引数Passwordにパスワードを指定します。次のコードはアクティブシートに「1234」というパスワードを付けて保護します。
Sub Sample07_3() ActiveSheet.Protect Password:="1234" End Sub
パスワード「1234」で保護されたシートを解除するには、Unprotctメソッドの引数にパスワードを指定して実行します。
Sub Sample07_4() ActiveSheet.Unprotect Password:="1234" End Sub
パスワードは大文字と小文字を区別しますから注意してください。パスワード付きで保護したシートに対して、パスワードを指定しないでUnprotectメソッドを実行すると、パスワードの入力を促すダイアログボックスが表示されます。パスワードを付けないで保護したシートに対して、パスワードを指定したUnprotectメソッドを実行してもパスワードは無視されて保護が解除されます。
ちなみに、同じProtectメソッドとUnprotectメソッドをWorkbookオブジェクトに使うと、ブックの保護/解除も可能です。ただし、パスワードを付けて保護したブックに対して、パスワードを指定しないUnprotectメソッドを実行するとエラーが発生します。
シートを保護すると一部の機能が使用できなくなります。手動操作の場合ならともかく、マクロで保護されたシートを操作するときには注意が必要です。使用不可の機能をマクロから操作しようとするとエラーになるからです。そこで、ユーザーの手動操作では一部の機能を使用不可としますが、マクロからは全ての操作を使用できるという便利な保護があります。これには、Protectメソッドの引数UserInterfaceOnlyにTrueを指定します。
Sub Sample07_5() ActiveSheet.Protect UserInterfaceOnly:=True End Sub
上記のコードを実行すると、ユーザーによる手動操作はできませんがマクロからは操作できるようになります。
なお注意しなければいけないのは、引数UserInterfaceOnlyにTrueを指定して保護したワークシートをそのまま保存して閉じた場合です。次にそのブックを開いたときには、ユーザーの手動操作だけでなくマクロによる操作も保護されています。マクロ操作だけを保護の対象からはずすには、再度引数UserInterfaceOnlyにTrueを指定してProtectメソッドを実行しなければなりません。