解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

VBA からは操作可能なシートの保護方法



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


Excel VBA でアプリケーションを作った時に、ユーザーに触って欲しくないセルや設定などがあったりします。

そんな時はセルの設定で『ロック』する指定を行い、『シートの保護』を行えば、セルをロックすることができます。

しかし、 VBA からもロックしたセルの値の取得などが出来なくなります。

そこで、 VBA からの操作は出来るけど、ユーザーの操作は出来ないといった設定を行います。



動作環境


Windows 7
Excel 2007



プログラム

ソースコード

このソースコードは VBE の ThisWorkbook モジュールに記述します。

VBE は Excel 画面が表示されている時に Alt+F11 を押すと起動します。

図1 VBE 画面

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



結果

ソースコードを書き込んだ Excel ファイルを起動すると、 VBA が自動でシートを保護します。

セルに何か入力しようとすると図2 の様なアラートが表示されます。

図2 保護成功



コメント

シートの保護の Protect メソッドの引数は以下の通りたくさんあります。

上のソースコードでは DrawingObjects の VBA 操作を許可しています。

必要に応じて、以下の引数を調べてみてください。

DrawingObjects
Contents
Scenarios
UserInterfaceOnly
AllowFormattingCells
AllowFormattingColumns
AllowFormattingRows
AllowInsertingColumns
AllowInsertingRows
AllowInsertingHyperlinks
AllowDeletingColumns
AllowDeletingRows
AllowSorting
AllowFiltering
AllowUsingPivotTables



以上