0

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
4

2 に答える 2

1

これは私にとってはうまくいきましたが、あまりエレガントではありません。保護解除と書き込みの両方が機能する個別のモジュールは見つかりませんでした。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    UnlockWorksheets
    With ThisWorkbook.Worksheets("Sheet1")
        .Range("A1").Value = Now
        .Range("A2").Value = ThisWorkbook.BuiltinDocumentProperties("Author")
    End With
    LockWorksheets
End Sub

Sub SaveMe()
    UnlockWorksheets
    ThisWorkbook.Save
    LockWorksheets
End Sub

Sub UnlockWorksheets()
    ThisWorkbook.Worksheets("Sheet1").Unprotect Password:="password"
End Sub

Sub LockWorksheets()
    ThisWorkbook.Worksheets("Sheet1").Protect Password:="password"
End Sub
于 2013-01-22T01:16:18.563 に答える
0

「保存前」モジュールを新しいサブルーチンに入れて、閉じる前に呼び出す

例えば。

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Call SomeSub
End Sub

sub someSub()
'Code here
end sub

sub Button()
call SomeCub
activeworkbook.save
end sub
于 2013-01-18T23:36:48.763 に答える