【发布时间】:2017-07-19 22:03:19
【问题描述】:
我需要一些帮助来升级我的 VBA 代码。
我尝试找到一个可以根据当前日期解锁特定行的代码。问题是,我不希望解锁所有行的单元格,而只解锁一组特定范围。就像在“B”列中的当前日期一样,解锁的单元格将从(“D”到“K”); (“M”到“P”); (“R”到“S”)和(“U”到“V”)。
中间的单元格包含我不希望人们弄乱或错误更改的公式。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("B" & Selection.Row).Value <> Date Then
ActiveSheet.Protect Password:="3827"
MsgBox "Only today's date needs to be edited!", vbInformation, "REMINDER"
ElseIf Range("B" & Selection.Row).Value = Date Then
ActiveSheet.Unprotect Password:="3827"
ActiveSheet.EnableSelection = xlNoRestrictions
End If
End Sub
【问题讨论】:
-
在保护工作表之前尝试类似“range.locked = False”的操作。保护工作表时,只会保护锁定的单元格。未锁定的单元格(即,locked = false)不会在受保护的工作表上受到保护。
-
这可以让你看到多列范围
Range("D:K, M:P, R:S, U:V").Select...尽管使用这种方式:@Jarom 提到的Range("D:K, M:P, R:S, U:V").Locked = False -
对于那些列中的单行 ...
intersect(rows(8),Range("D:K, M:P, R:S, U:V")).Select和intersect(rows(8),Range("D:K, M:P, R:S, U:V")).Locked = False...不要忘记,.Select 仅用于调试,以便您可以看到结果范围。不要在生产代码中使用它,除非真的非常必要 -
或
Rows(8).Range("D1:K1, M1:P1, R1:S1, U1:V1") -
@TimWilliams 我比 intersect 更喜欢这种形式
标签: vba excel date locking unlock