VBA からは操作可能なシートの保護方法
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
Excel VBA でアプリケーションを作った時に、ユーザーに触って欲しくないセルや設定などがあったりします。
そんな時はセルの設定で『ロック』する指定を行い、『シートの保護』を行えば、セルをロックすることができます。
しかし、 VBA からもロックしたセルの値の取得などが出来なくなります。
そこで、 VBA からの操作は出来るけど、ユーザーの操作は出来ないといった設定を行います。
プログラム
ソースコード
このソースコードは VBE の ThisWorkbook モジュールに記述します。VBE は Excel 画面が表示されている時に Alt+F11 を押すと起動します。
Private Sub Workbook_Open()
With ThisWorkbook.Worksheets("保護したいシート名")
' シートが保護されていない場合
If .ProtectContents = False Then
' VBAからの変更はできるパスワード付き保護をかける(描画オブジェクトの操作も出来る)
.Protect UserInterfaceOnly:=True, Password:="pass", DrawingObjects:=False
' シートが保護されている場合
Else
' パスワード付き保護の解除
.Unprotect Password:="pass"
' VBAからの変更はできるパスワード付き保護をかける(描画オブジェクトの操作も出来る)
.Protect UserInterfaceOnly:=True, Password:="pass", DrawingObjects:=False
End If
End With
End Sub
コメント
シートの保護の Protect メソッドの引数は以下の通りたくさんあります。
上のソースコードでは DrawingObjects の VBA 操作を許可しています。
必要に応じて、以下の引数を調べてみてください。
DrawingObjects
Contents
Scenarios
UserInterfaceOnly
AllowFormattingCells
AllowFormattingColumns
AllowFormattingRows
AllowInsertingColumns
AllowInsertingRows
AllowInsertingHyperlinks
AllowDeletingColumns
AllowDeletingRows
AllowSorting
AllowFiltering
AllowUsingPivotTables
以上