如果date是当前date减去两天,则locking单元格

我有500行的excel。 我有代码,如果列F中的单元格的值为500,它将locking单元格。 但是,如果有人试图在最后2行(总是昨天和前天)修改某些东西,那应该可以做到这一点。 所以如果今天是23.02.2016他可以修改最后2行,但不是其他的。


  Sub Lock_cells(ByVal Target As Range)
     ActiveSheet.Unprotect
     Dim cl As Range
    如果Target.Column = 6那么
         Target.Cells中的每个cl
            如果UCase(cl.Value)= UCase(“500”)并且cl.Column = 6那么
                范围(“a”&cl.Row&“:f”&cl.Row).Locked = True
            其他
                范围(“a”&cl.Row&“:f”&cl.Row).Locked = False
            万一
        下一个
    万一
    个ActiveSheet.Protect
结束小组

它可以工作,如果我把这个子在BeforeClose或打开,并validation是否date条件为真? 谢谢。

一种方法是find最后一行,然后通过偏移解锁最后两行。

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

编辑:如果你想要根据A列中的date解锁行,那么你应该修改你的If条件来比较date

 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,因为你input外部If只有目标= 6

对于任何感兴趣的人,我都会提供代码来检查这一天是否为工作日(星期一开始的5天工作周),并保持最后2天可以修改(解锁)。 该文件有499行。 所以在第一列是date,第2,3,4,5列有字符,在列F(第6列)是值500或0.macros将检查列F的值是否是500,如果是真会阻止行。 此外,macros将检查500的值是否有一个工作日为核心,如果是真的,它将阻止该行,但如果值500在周末,它将保持可修改(解锁)。 谢谢PankajR的帮助。


Sub Lock_cells() Dim rng As Range Dim x As Date x = Now() - 3 ActiveSheet.Unprotect "password" Dim cl As Range Set rng = Range("F3:F499") For Each cl In rng.Cells If UCase(cl.Value) = UCase("500") And cl.Offset(0, -5).Value < x Then If Weekday(cl.Offset(0, -5).Value, vbMonday) < 6 Then Range("a" & cl.Row & ":F" & cl.Row).Locked = True Else Range("a" & cl.Row & ":F" & cl.Row).Locked = False End If End If Next ActiveSheet.Protect "password" End Sub