ray88’s diary

お仕事で困ったとき用の自分用の覚書

Excel VBA シートに保護がかかっていてもマクロを実行する

関数が入っているシートなど、ユーザに編集してほしくないシートに保護をかけてもマクロを実行する方法

■下準備:Excelの保護したい対象シートの関数が入っているセル等、編集不可にしたい
   セル範囲を選択し、書式設定でロックする。
※シート全体を編集不可にしたい場合はシート全体を選択し書式設定でロックする。

※ポイント:セルのロックはシートの保護を設定しないと有効にならないため、この段階ではロックはかからず、編集可能だがここではまだシート保護の設定はしない。
f:id:ray88:20201027192839p:plain

■プロシージャ冒頭に以下コードを追加し、VBAコードでシート保護をかける
(1度コードを実行して以降はシートに保護がかかる。)
 ワークシートオブジェクト.Protect UserInterfaceOnly:=True
(例)

Worksheets("シート名").Protect UserInterfaceOnly:=True

■解説
上記のコードを実行すると、ユーザーによる手動編集は不可だがマクロからは操作できるようなる。
次にそのブックを開いたときには、ユーザーの手動操作だけでなくマクロによる操作も保護されている。
マクロ操作だけを保護の対象からはずすには、再度引数UserInterfaceOnlyにTrueを指定してProtectメソッドを実行する。
(つまり、マクロ内にこのコードがあれば普通にブックを開いたとき手動操作は不可でマクロ実行時は上記コードによりマクロ操作のみ可能となる)