Workbook_BeforeSave を使用して、Excel 2010 でロックされたシートの一部のセルを更新しています。サブルーチンは、ctrl-s を使用して保存すると目的どおりに機能しますが、vba で .Save を使用するとシートのロックが解除されません。
ThisWorkbook(コード)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim MyPassword As String
MyPassword = "password"
ActiveWorkbook.Worksheets("Sheet1").Unprotect (MyPassword)
ActiveWorkbook.Worksheets("Sheet1").Range("A1").Value = Now
ActiveWorkbook.Worksheets("Sheet1").Range("A2").Value = ThisWorkbook.BuiltinDocumentProperties("Author")
ActiveWorkbook.Worksheets("Sheet1").Protect (MyPassword)
End Sub
Module1(コード)
Sub SaveMe()
ActiveWorkbook.Save
End Sub
SaveMe() を呼び出すボタンがあります。SaveMe() はドキュメントを保存し、Workbook_BeforeSave を有効にします。Worsheet は保護解除に失敗し、A1 への書き込み時にエラーが発生します。
エラーは次のように述べています。
Run-time error '1004':
Application-defined or object-defined error