我在一个给定的对象范围,有时所有细胞的活动被删除(Range.Cells.Delete
)确定空“范围”删除后
我周围玩,发现这些:在删除后
- 所有的细胞,该变量的类型仍然是
Range
,它Is Not Nothing
- 调用任何的错误它的成员结果“对象需要”
这是我的小分来测试它:
Sub test()
Dim r As Range
Debug.Print r Is Nothing ' -> true
Set r = ActiveSheet.Range("a2")
Debug.Print TypeName(r) ' -> Range
r.Cells.Delete shift:=xlShiftUp
On Error GoTo ErrHandler
Debug.Print r Is Nothing ' -> False
Debug.Print TypeName(r) ' -> Range
Debug.Print r.Address ' -> "Err: Object required"
Debug.Print r.Cells.Count ' -> "Err: Object required"
Exit Sub
ErrHandler:
MsgBox "Err: " & Err.Description
Resume Next
End Sub
我的问题是:我怎么能确定(不希望错误处理)的对象是否是空Range
?
最短选项:
Function IsEmptyRange(testRange As Range) As Boolean
If TypeName(testRange) <> "Range" Then
IsEmptyRange = False
Else
On Error GoTo EmptyRange
IsEmptyRange = testRange.Cells.Count = 0
If False Then
EmptyRange:
Err.Clear
IsEmptyRange = True
End If
End If
End Function
'If False Then'是什么想法?避免'退出功能'?如果确实如此,请阅读本文 - > http://www.cpearson.com/excel/errorhandling.htm并遵循实践。 – Vityata
这个想法是保持代码的逻辑流程。我知道在函数的末尾放置错误处理程序,通常我会这样做,但是在这种情况下(我想使用'If',但VBA不允许我)使用此构造。这很容易阅读(至少对我而言) –