在Excel VBA中locking单元格

当我的工作簿受到保护时,下面的代码不起作用(当没有任何东西被保护时,它可以工作)。 我想要做的是有一个工作簿和表保护,除了less数几个单元格和特定的数据后,我希望所有单元格保护,请帮助。

Sub Workbook_Open() If Date >= DateSerial(2016, 1, 19) Then Worksheets("Jan").Protect Password:="123" ElseIf Date >= DateSerial(2016, 2, 28) Then Worksheets("FEB").Protect Password:="123" ElseIf Date >= DateSerial(2016, 3, 31) Then Worksheets("MAR").Protect Password:="123" ElseIf Date >= DateSerial(2016, 4, 30) Then Worksheets("Apr").Protect Password:="123" End If End Sub 

当我testing它时似乎有效 – 可能是因为它不能保护每张纸,只是符合testing的第一张纸。 所以,在二月份, If Date >= DateSerial(2016, 1, 19)将为TRUE,那么它将再次保护一月份并退出程序 – 它甚至不会查看FEB表单。

我假设一月份的date应该是31而不是19。

尝试:

 Private Sub Workbook_Open() Dim wrkSht As Worksheet Dim dSheet As Date 'Look at each sheet. For Each wrkSht In ThisWorkbook.Worksheets 'Create first of month date from sheet name. dSheet = CDate("1-" & wrkSht.Name & "-" & Year(dSheet)) 'Calculate last day of month (day zero of the following month). dSheet = DateSerial(Year(dSheet), Month(dSheet) + 1, 0) 'Check the date against todays date and protect. If Date >= dSheet Then wrkSht.Protect Password:="123" End If Next wrkSht End Sub 

要testing变化dSheet = CDate("1-" & wrkSht.Name & "-" & Year(dSheet))dSheet = CDate("1-" & wrkSht.Name & "-" & 2015)