如果日期是当前日期减去两天,则锁定单元格

时间:2016-02-23 11:39:02

标签: excel excel-vba vba

我有500行excel。我有代码,如果列F中的单元格具有值500,它将锁定单元格。但是......如果有人试图在最后两行(即昨天和前天)中修改某些东西,它应该能够做到这一点。因此,如果今天是2016年2月23日,他可以修改最后2行而不是其余行。


 Sub Lock_cells(ByVal Target As Range)
    ActiveSheet.Unprotect
    Dim cl As Range
    If Target.Column = 6 Then
        For Each cl In Target.Cells
            If UCase(cl.Value) = UCase("500") And cl.Column = 6 Then
                Range("a" & cl.Row & ":f" & cl.Row).Locked = True
            Else
                Range("a" & cl.Row & ":f" & cl.Row).Locked = False
            End If
        Next
    End If
    ActiveSheet.Protect
End Sub

如果我将sub放在BeforeClose或Open中并且验证日期条件是否为真,它是否可以工作?谢谢。

2 个答案:

答案 0 :(得分:1)

实现此目的的一种方法是找到最后一行,然后按偏移量解锁最后两行。

Dim LastRow As Range

Set LastRow = Range("F" & Rows.Count).End(xlUp)
Range(LastRow, LastRow.Offset(-1, -5)).Locked = False
Set LastRow = Nothing

编辑: 如果您希望根据A列中的日期解锁行,则应修改If条件以比较日期

If UCase(cl.Value) = UCase("500") And cl.offset(0,-5).value < Today() - 2 Then
    Range("a" & cl.Row & ":f" & cl.Row).Locked = True
Else
    Range("a" & cl.Row & ":f" & cl.Row).Locked = False
End If

无需检查列= 6,因为仅当target = 6时才输入外部If

答案 1 :(得分:0)

对于任何感兴趣的人,我都会使代码检查当天是否为工作日(从星期一开始的5天工作周)并保留最近2天可修改(解锁)。该文件有499行。所以在第一列是日期,列2,3,4,5有字符,列F(第6列)是值500或0.宏将检查列F的值是否为500,如果是true将阻止该行。此外,宏将检查500的值是否具有作为共同对象的工作日,如果为真,则将阻止该行,但如果值500在周末,则它将保持可修改(未锁定)。感谢您PankajR的帮助。

information_schema