Vba ';范围类的解组方法失败';错误

Vba ';范围类的解组方法失败';错误,vba,excel,loops,grouping,Vba,Excel,Loops,Grouping,我正在尝试对存储在数组中的一系列组进行解组和重新分组。但是,当我运行它时,会出现以下错误: 运行时错误“1004”: 范围类的解组方法失败 我的代码如下。xxxDim变量用于标识数组是否存在。我之前已经正确识别了所有sSub、eSub、sGroup、eGroup、sCat和eCat变量,因此不需要考虑实际值。我已经使用我所指的精确范围手动进行了解组和重新分组,因此我不认为我指的是一个范围,它很难确定要解组/分组什么 我以前使用过ungroup和group方法,使用这种格式(.Range(“A”&

我正在尝试对存储在数组中的一系列组进行解组和重新分组。但是,当我运行它时,会出现以下错误:

运行时错误“1004”:

范围类的解组方法失败

我的代码如下。
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