通常はセルをロック(Locked=True)しておいて、そのワークシートを保護(Protect)すると、そのセルに対しては手入力であろうと、マクロからであろうと値の入力はできません。
この時は、マクロ動作であってもこのようなエラーが発生します。
さて、そこでマクロ動作とユーザーインターフェース(マウスやキー操作)の動作を分けてしまいます。マクロ上からはセルロックの影響を受けないで値や式の書き換えができるようにします。
(画像をクリックすると、このサンプルがダウンロードできます)
このサンプルは、開いてTabキーを押してみて頂ければ全セルがロックされ、シート保護されているのが判ります。
ここで、「A1セルを加算する。」のボタンをクリックすると、A1セルが「1」ずつ加算されていくのが判ります。
「A1セルを加算する。」から呼ばれているマクロは、シート保護の操作はしておらず、
'***************************************************************************************************
' ロックしたセルに書き込むサンプル Module1(Module)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'03/07/16(1.00)新規作成
'04/02/26(1.01)初回修正
'20/02/22(1.10)*.xlsm化、他
'***************************************************************************************************
Option Explicit
Option Private Module
'***************************************************************************************************
' ■■■ ワークシート側からの呼び出し処理 ■■■
'***************************************************************************************************
'* 処理名 :ADD_A1
'* 機能 :A1セルを加算
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年07月16日
'* 作成者 :井上 治
'* 更新日 :2020年02月22日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Sub ADD_A1()
'-----------------------------------------------------------------------------------------------
Cells(1, 1).Value = Cells(1, 1).Value + 1
End Sub
'----------------------------------------<< End of Source >>----------------------------------------
'***************************************************************************************************
' ロックしたセルに書き込むサンプル ThisWorkbook(Class)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev 変更履歴内容------------------------------------------------------------------------>
'03/07/16(1.00)新規作成
'04/02/26(1.01)初回修正
'20/02/22(1.10)*.xlsm化、他
'***************************************************************************************************
Option Explicit
'***************************************************************************************************
' ■■■ ワークブックイベント ■■■
'***************************************************************************************************
'* 処理名 :Workbook_Open
'* 機能 :ブックを開くイベント
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年01月01日
'* 作成者 :井上 治
'* 更新日 :2020年02月22日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***************************************************************************************************
Private Sub Workbook_Open()
'-----------------------------------------------------------------------------------------------
'' 一旦、シート保護を解除 ← 不要!
'ActiveSheet.Unprotect
' シート保護を設定(UIのみ)
ActiveSheet.Protect UserInterfaceOnly:=True
' 保存済みにする
ThisWorkbook.Saved = True
End Sub
'----------------------------------------<< End of Source >>----------------------------------------