当我的工作簿受到保护时,下面的代码不起作用(当没有任何内容受保护时它可以正常工作)。我想要做的是保护工作簿和工作表,除了少数单元格,在特定数据后我希望所有单元格都受到保护,请帮忙。
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
答案 0 :(得分:1)
当我测试它时似乎工作 - 可能是它不保护每张纸,只是第一张符合测试的纸张。因此,2月If Date >= DateSerial(2016, 1, 19)
将为真,因此它会再次保护1月并退出程序 - 它甚至从未查看过FEB表。
我假设1月份的日期应该是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
测试更改dSheet = CDate("1-" & wrkSht.Name & "-" & Year(dSheet))
至dSheet = CDate("1-" & wrkSht.Name & "-" & 2015)