Excel VBAでセルのダブルクリックを利用して図形を追加・削除する仕組みは、チェック表や確認表の作成などで便利です。しかし、シート保護を有効にすると図形の追加ができなくなることがあります。
これは、シート保護によって図形オブジェクトの編集や追加が制限されるためです。この記事では、既存のマクロを活用しながら、シート保護中でも図形を操作できるようにする方法や、複数シートへ同じ設定を適用する方法を解説します。
シート保護中に図形が挿入できない原因
Excelのシート保護は、セルの編集だけでなく、図形や画像などのオブジェクト操作にも影響します。
通常、シートを保護するとユーザーは図形の追加や削除ができなくなります。そのため、Worksheet_BeforeDoubleClickイベントでShapes.AddShapeを実行しても、図形作成処理が正常に動作しない状態になります。
マクロ自体に問題があるのではなく、保護されたシート上で図形操作を許可していないことが原因です。
VBAのUserInterfaceOnlyを使ってマクロだけ保護を解除する
シート保護を維持したままマクロによる変更を許可する場合は、ProtectメソッドのUserInterfaceOnly:=Trueを利用します。
UserInterfaceOnlyを設定すると、ユーザーによる編集操作は制限したまま、VBAコードからセルや図形を変更できるようになります。
例えば、以下のようにシート保護を設定します。
Sub ProtectSheets()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Protect Password:="password", UserInterfaceOnly:=True
Next ws
End Sub
この設定を行うことで、シートは保護された状態を維持しながら、既存のダブルクリックによる丸印追加マクロを動作させることができます。
UserInterfaceOnly設定は一度だけでよいのか
注意点として、UserInterfaceOnly:=Trueの設定はExcelファイルを閉じるとリセットされます。
そのため、ブックを開くたびにWorkbook_Openイベントで再設定する方法がおすすめです。
例えば、ThisWorkbookモジュールに以下のコードを入れておくと、ファイルを開くたびに自動で設定されます。
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
ws.Protect Password:="password", UserInterfaceOnly:=True
Next ws
End Sub
この方法なら利用者が毎回手動で保護解除や設定変更をする必要がありません。
プルダウン選択後に丸印を表示する仕組みについて
質問のように、セルのプルダウン選択によって丸を表示したい場合は、ダブルクリックではなくWorksheet_Changeイベントを利用する方法もあります。
例えば、B6:B25のセルで「○」など特定の値を選択した場合だけ丸図形を追加し、それ以外の場合は削除する仕組みにできます。
具体的には、以下のような流れになります。
- セルの入力値を監視する
- 指定した文字が入力されたら図形を追加する
- 指定以外の値なら図形を削除する
- シート保護中でもVBAで図形操作を行う
この方法なら利用者はセルを選択するだけでチェック用の丸印を表示できるため、操作ミスを減らせます。
10枚のシートへ同じ設定を適用する方法
複数シートへ同じマクロ設定を行う場合は、各シートに同じコードを書くより、Workbookイベントや共通プロシージャを利用すると管理しやすくなります。
例えば、10枚すべてのシート名が異なっていても、For Each文で全ワークシートを順番に処理できます。
以下のようなコードにしておけば、シート数が増えても対応できます。
Dim ws As Worksheet
For Each ws In Worksheets
ws.Protect Password:="password", UserInterfaceOnly:=True
Next ws
このように共通処理にまとめておくことで、後からシートを追加した場合でも同じ保護設定を自動的に適用できます。
図形の名前管理も重要なポイント
現在使用しているマクロでは、図形名を「Circle_セル位置」のように設定しているため、同じセルで追加と削除を切り替える仕組みとして適しています。
シート保護環境で運用する場合も、このように図形名を管理しておくと、不要な図形だけを正確に削除できます。
例えばB6セルならCircle_B6という名前にすることで、他のセルにある丸印へ影響を与えず、安全に操作できます。
まとめ:シート保護中でもVBAで図形操作は可能
Excelで図形を追加するマクロがシート保護後に動かなくなる場合は、マクロの問題ではなく保護設定が原因であることが多いです。
UserInterfaceOnly:=Trueを利用し、Workbook_Openイベントで毎回設定することで、シート保護を維持したままVBAによる図形操作が可能になります。
また、複数シートへ展開する場合はFor Eachで一括設定することで、10シート以上の管理でも効率的に運用できます。チェック表や管理表を安全に配布しながら自動化したい場合に有効な方法です。


コメント