锁定范围(在同一行中),当 A "counter"为 TRUE 时



单击此处查看并理解我的TABLE

如果A2为真,我想锁定范围D2:I2

如果A3为真,我想锁定范围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=0.01700[11月1日上午7点],B3=0.01800[11月8日上午1点],…,B706=30.1500[11月30日下午15点],B707=30.1600[11月16日下午30点],..(。

当出现FALSE语句时,以下所有单元格都为FALSE,如您所见$C$2=30.1445<B707=30.1600,因此A707=FALSE,依此类推。

实际示例:A2=TRUE。。。A704=真,A705=真,a006=真,A707=假,A708=假。。。A745=错误。

请问,我的代码有什么问题?它没有显示任何错误消息,只是感觉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

如果TRUE/FALSE单元格实际上是文本值,而不是公式的结果,则需要在以下代码(If ws.Range("A" & i) = "FALSE" Then(中用引号括住FALSE

此外。。。。

  • 您需要使用有效的工作表来限定对象(区域、单元格等(。否则,您可能指的是错误的表格。我的代码假设所有有问题的对象都存在于同一张图纸上(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将生成TRUEFALSE,这将确定范围是否锁定

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"

最新更新