我在一個給定的對象範圍,有時所有細胞的活動被刪除(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不允許我)使用此構造。這很容易閱讀(至少對我而言) –