提问人:TheEndUK 提问时间:11/17/2023 更新时间:11/17/2023 访问量:64
测试 3 个不连续区域以确定是否所有单元格都为空
Test 3 non-contiguous ranges to determine if all cells are empty
问:
我需要检查 3 个不连续的范围,以确定它们是否填充了日期 - 如果没有,则返回一条消息,通知用户他们需要检查。
这就是我想出的(原谅我,我是 VBA 的初学者!)但它调试时出现运行时错误“424”:“If Range(”T2“)...”阶段。
Sub DateChecker()
Dim tlastRow As Long
Dim ulastRow As Long
Dim wlastRow As Long
tlastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ulastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
wlastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
If Range("T2" & tlastRow) Is Empty And Range("U2" & ulastRow) Is Empty And Range("W2" & wlastRow) Is Empty Then GoTo NoDates
NoDates:
MsgBox "Dates have not been populated", vbExclamation
Exit Sub
End Sub
希望有人能告诉我哪里出了问题。
提前非常感谢。
TE公司
答:
1赞
Black cat
11/17/2023
#1
在此上下文中,VBA 中不使用 Is Empty。此外,IsEmpty 函数不能用于具有多个单元格的区域。
尝试像这样使用函数 sg。WorksheetFunction.Counta
If WorksheetFunction.Counta(Range("T2:T" & tlastRow))=0 And _
WorksheetFunction.Counta(Range("U2:U" & ulastRow))=0 And _
WorksheetFunction.Counta(Range("W2:W" & wlastRow))=0 Then
MsgBox "Dates have not been populated", vbExclamation
End If
End Sub
只有当所有范围都完全为空时,您才会收到该消息。
评论
0赞
TheEndUK
11/17/2023
非常感谢 - 这非常有效!
3赞
CLR
11/17/2023
#2
我可能会建议做这样的事情:
Sub DateChecker()
Dim lastRow As Long
Dim rngT As Range, rngU As Range, rngW As Range
With ActiveSheet
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Set rngT = .Range("T2:T" & lastRow)
Set rngU = .Range("U2:U" & lastRow)
Set rngW = .Range("W2:W" & lastRow)
If Application.WorksheetFunction.CountA(rngT, rngU, rngW) = 0 Then
MsgBox "Dates have not been populated", vbExclamation
End If
End With
End Sub
注意:我只用一个替换了你的三个 lastRow 变量,因为每个变量都包含与读取 A 列相同的值。如果您愿意,可以撤消任何简单的更改。
评论
0赞
Domenic
11/17/2023
虽然,在这种情况下,您实际上不需要使用 Union。
0赞
CLR
11/17/2023
没错,我忘记了 COUNTA 处理多个范围。我将删除它。
0赞
TheEndUK
11/17/2023
非常感谢 - 这个解决方案也运行良好。:)
评论
If Len(Range("T" & tlastRow)) = 0
T2 & tlastRow
Range("T2" & tlastRow)
Range("T2:T" & tlastRow)
Is Empty
应仅用于对象。尝试。现在,您要检查是否有任何相应的单元格为空吗?如果是这样,则应使用 .然后,如上所述,您是否只想检查这三列中每一列的最后一行?If Range("T2" & tlastRow).value = ""
Or
And