在Excel VBA中锁定单元格

时间:2016-01-20 11:10:23

标签: excel vba excel-vba

当我的工作簿受到保护时,下面的代码不起作用(当没有任何内容受保护时它可以正常工作)。我想要做的是保护工作簿和工作表,除了少数单元格,在特定数据后我希望所有单元格都受到保护,请帮忙。

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

1 个答案:

答案 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)