2013-07-09 122 views
0

我正在生成每日計劃表,其中我想在保存後鎖定一些評估單元格。我在Excel工作簿代碼中編寫了以下代碼。該宏要求在保存之前輸入密碼。爲什麼要求輸入密碼?(我有53張爲周計劃。我已經表明只有2此處)Excel-VBA保存之前鎖定一系列單元格

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
Sheets("Sheet18").Unprotect Password:="****" 
Sheets("Sheet19").Unprotect Password:="****" 
ActiveSheet.Protect Contents:=False 
For Each Cell In Range("H5:H24,J5:J24") 
If Cell <> "" Then Cell.Locked = True 
If Cell = "" Then Cell.Locked = False 
Next 
ActiveSheet.Protect Contents:=True 
Sheets("Sheet18").Protect Password:="****" 
Sheets("Sheet18").Protect UserInterfaceOnly:=True 
Sheets("Sheet19").Protect Password:="****" 
Sheets("Sheet19").Protect UserInterfaceOnly:=True 
End Sub 

回答

0

您的代碼將表現不同,這取決於活動工作表保存時。

另外,我不建議用本地循環變量重載保留名稱「Cell」。這會導致意想不到的行爲。

您應該刪除對ActiveSheet的引用。 如果你的願望是保護整個工作簿,我建議遍歷所有工作表:

Sub ProtectAll() 
    Dim wSheet As Worksheet 
    Dim myCell As Range 
    For Each wSheet In Worksheets 
     wSheet.Unprotect Password:="****" 
     For Each myCell In Range("H5:H24,J5:J24") 
      myCell.Locked = (myCell <> "") 
     Next myCell 
     wSheet.Protect Contents:=True, Password:="****", UserInterfaceOnly:=True 
    Next wSheet 
End Sub 

注意:你必須把代碼中的代碼模塊。

+0

此代碼給出了鎖定代碼中的調試錯誤。 – user2564105

+0

我剛更新了代碼示例以顯示如何使用它。如果您有運行時錯誤,請告訴哪個錯誤代碼以及哪條線......幫助兩種方式。 –