Click Here To see and understand my TABLE
如果A2为TRUE,我想锁定范围D2:I2
如果A3为TRUE,我想锁定范围D3:I3 ...
如果AxRow为TRUE,我想锁定范围DxRow:IxRow
我有744行(A2:A745),其中包含TRUE或FALSE语句,这些语句是以下等式A2 = IF($ C $ 2> B2,TRUE,FALSE)的结果。 C2 向我显示“ 30.1545”,这意味着现在11月30日15h45的时间会自动更新(即20分钟后将变为“ 30.1605”)。 B2到B745 单元格显示一个月的天和一个具有固定值的链接小时(B2 = 01.0700 [11月1日上午7点],B3 = 01.0800 [11月1日上午8点],...,B706 = 30.1500 [11月30日15PM],B707 = 30.1600 [11月30日16PM],...)。
出现FALSE语句时,以下所有单元格均为FALSE,因为您可以看到$ C $ 2 = 30.1545 实际示例:A2 = TRUE ... A704 = TRUE,A705 = TRUE,A706 = TRUE,A707 = FALSE,A708 = FALSE ... A745 = FALSE。 请我的代码有什么问题?它没有显示任何错误消息,只是感觉Excel锁定并解锁了本应锁定的单元格。Private Sub Block(ByVal Target As Excel.Range)
Dim xRow As Long
xRow = 2
ThisWorkbook.ActiveSheet.Unprotect Password:="123"
Do Until Cells(xRow, 1).Value = False
If Worksheets("HourlyCount").Cells(xRow, 1).Value = True Then
Range("D" & xRow & ":I" & xRow).Locked = True
End If
xRow = xRow + 1
Loop
ThisWorkbook.ActiveSheet.Protect Password:="123"
End Sub
答案 0 :(得分:0)
如果您的TRUE
/ FALSE
单元格实际上是文本值,而不是方程式的结果,则需要在下面的代码中用引号将FALSE
括起来(If ws.Range("A" & i) = "FALSE" Then
)
还......
Sheet1
)上Range(Cells(), Cells())
来构建一个多变量范围会更容易,它可以代替.Locked = True
语句。 Option Explicit
Sub Blockade()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim LR As Long, i As Long
LR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
ws.Unprotect "123"
For i = 2 To LR
If ws.Range("A" & i) = False Then
ws.Range(ws.Cells(i, 4), ws.Cells(i, 9)).Locked = True
End If
Next i
ws.Protect "123"
End Sub
您还可以将循环简化为以下代码。语句Range = False
会产生TRUE
或FALSE
,这将确定范围是否被锁定
ws.Unprotect "123"
For i = 2 To LR
ws.Range(ws.Cells(i, 4), ws.Cells(i, 9)).Locked = ws.Range("A" & i) = False
Next i
ws.Protect "123"