按日期锁定Excel列

时间:2018-09-27 13:41:01

标签: excel vba ms-office

我正在尝试创建一个简单的代码,用于根据日期锁定单元格列。我有从单元格C1到BA1的日期(每个星期五)设置。我正在使用的代码如下,并且似乎锁定了所有内容,或者出现了类型不匹配错误。

Private Sub worksheet_selectionChange(ByVal Target As Range)

If Range("C1:BA1").Value < Date Then
    ActiveSheet.Protect Password:="1234"
ElseIf Range("C1:BA1").Value > Date Then
    ActiveSheet.Unprotect Password:="1234"
    ActiveSheet.EnableSelection = xlNoRestrictions
End If
End Sub

任何帮助将不胜感激。

谢谢!! -D

1 个答案:

答案 0 :(得分:2)

ProtectUnprotect作用于工作表,而不作用于范围。您确实需要解锁工作表,但是随后需要在重新锁定之前将Range.Locked属性设置为true / false。另外,这需要循环,您无法立即对整个范围进行操作以达到此结果。

我建议将其放入Workbook_Open,因此除非您更改日期,否则它只能运行一次。那么应该进入Worksheet_Change

Private Sub Workbook_Open()

    Dim col As Range

    'Set the correct sheet name here:
    With ThisWorkbook.Sheets("Sheet1")

        .Unprotect "1234"

        For Each col In .UsedRange.Columns

            col.EntireColumn.Locked = col.Range("A1").Value < Date

        Next col

        .Protect "1234"

        .EnableSelection = xlNoRestrictions

    End With

End Sub