Vba ';范围类的解组方法失败';错误
我正在尝试对存储在数组中的一系列组进行解组和重新分组。但是,当我运行它时,会出现以下错误: 运行时错误“1004”: 范围类的解组方法失败 我的代码如下。Vba ';范围类的解组方法失败';错误,vba,excel,loops,grouping,Vba,Excel,Loops,Grouping,我正在尝试对存储在数组中的一系列组进行解组和重新分组。但是,当我运行它时,会出现以下错误: 运行时错误“1004”: 范围类的解组方法失败 我的代码如下。xxxDim变量用于标识数组是否存在。我之前已经正确识别了所有sSub、eSub、sGroup、eGroup、sCat和eCat变量,因此不需要考虑实际值。我已经使用我所指的精确范围手动进行了解组和重新分组,因此我不认为我指的是一个范围,它很难确定要解组/分组什么 我以前使用过ungroup和group方法,使用这种格式(.Range(“A”&
xxxDim
变量用于标识数组是否存在。我之前已经正确识别了所有sSub
、eSub
、sGroup
、eGroup
、sCat
和eCat
变量,因此不需要考虑实际值。我已经使用我所指的精确范围手动进行了解组和重新分组,因此我不认为我指的是一个范围,它很难确定要解组/分组什么
我以前使用过ungroup和group方法,使用这种格式(.Range(“A”&variable&“:A”&variable)。ungroup
)
''''' START WITH UNGROUPING EVERYTHING '''''
''''' SUB-MODELS '''''
If sSubDim = True Then 'This Array has been dimensioned and therefore has at least one entry
For i = LBound(sSub) To UBound(sSub)
.Range("A" & sSub(i) & ":A" & eSub(i)).Ungroup 'Receive error on this line first
Next
End If
''''' GROUPS '''''
If sGroupDim = True Then 'Multiple groups exist
For i = LBound(sGroup) To UBound(sGroup)
.Range("A" & sGroup(i) & ":A" & eGroup(i)).Ungroup
Next
End If
''''' CATEGORY '''''
.Range("A" & sCat & ":A" & eCat).Ungroup
''''' NOW GROUP EVERYTHING '''''
''''' SUB-MODELS '''''
If sSubDim = True Then 'This Array has been dimensioned and therefore has at least one entry
For i = LBound(sSub) To UBound(sSub)
.Range("A" & sSub(i) & ":A" & eSub(i)).Group
Next
End If
''''' GROUPS '''''
If sGroupDim = True Then 'Multiple groups exist
For i = LBound(sGroup) To UBound(sGroup)
.Range("A" & sGroup(i) & ":A" & eGroup(i)).Group
Next
End If
''''' CATEGORY '''''
.Range("A" & sCat & ":A" & eCat).Group
问题来了
在执行此操作之前:
您首先需要确保将这些内容分组
对未分组的单元格调用Range.Ungroup
,将导致出现错误
在我花了30秒的时间尝试时,我还没有找到避免错误的方法,因此一个快速而肮脏的解决方法是将“危险”调用包装到它自己的过程中,并吞下它抛出的任何错误:
Private Sub UngroupSafely(ByVal target As Range)
On Error Resume Next
target.Ungroup
Err.Clear ' Err.Number will be 1004 if target was already ungrouped
On Error GoTo 0
End Sub
因此:
我要取消分组的所有组肯定已经分组了。最后,我将
.Range(“A”&变量&“:A”&变量)。解组
为.Rows(变量&“:”&变量)。解组
解决了我的问题。不确定为什么我在其中使用的部分使用的是上一个范围,而不是这里。如果它们已经分组,那么它们将毫无疑问地取消分组。如果在未分组的范围内调用.Ungroup
,则得到的错误正好是您得到的错误。验证您的输入。
Private Sub UngroupSafely(ByVal target As Range)
On Error Resume Next
target.Ungroup
Err.Clear ' Err.Number will be 1004 if target was already ungrouped
On Error GoTo 0
End Sub
If sSubDim Then
For i = LBound(sSub) To UBound(sSub)
UngroupSafely .Range("A" & sSub(i) & ":A" & eSub(i))
Next
End If