我在VBA中有一些代碼,它試圖根據行在活動工作表的特定列中的值對行進行分組。我看到的問題在If rngArea Is Nothing Then
線上,它給了我
424:需要對象
error.
我想我已經正確地將rngArea
變量聲明為Range
,如果這個變量最初是空的,那么Is Nothing
是正確的,對嗎?這是如此簡單的一行代碼,我看不出還有什么問題。
有人能幫忙嗎?
Sub GroupEpics()
FTESheet.Activate
Dim c, rngArea, EpicLink As Range
LstRow = FTESheet.Cells(Rows.Count, "B").End(xlUp).Row
Set EpicLink = FTESheet.Range(Cells(3, 4), Cells(LstRow, 4))
'undo any existing groupings
'suppress error if no rows are grouped
On Error Resume Next
Range("A1:A" & LstRow).Rows.Ungroup
On Error GoTo 0
'loop through all epic link values
For Each c In EpicLink
If c.Value <> 0 And c.Row() > 2 Then
'add this epic row to the cumulative range
If rngArea Is Nothing Then
Set rngArea = c
Else
Set rngArea = Union(rngArea, c)
End If
End If
Next c
' loop through Range's Areas and group each one of them
For Each c In rngArea.Areas
c.EntireRow.Group
Next c
End Sub
實際上,問題是您沒有聲明
rngArea As Range
。如果你申報
這意味著
在VBA中,您需要為每個變量指定一個類型,否則默認為
Variant
。所以如果你不把
rngArea
設為一個對象,它只是一個空的Variant
,而不是一個對象,但是Is Nothing
正在檢查對象,這就是它失敗的原因。如果聲明
Dim rngArea As Range
,則將變量定義為范圍對象。因此,如果沒有設置它,它就是Nothing
,因此可以用If rngArea Is Nothing Then
進行測試。