我有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中并且验证日期条件是否为真,它是否可以工作?谢谢。
答案 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