使用VBA折叠某些组(不是全部)

使用VBA折叠某些组(不是全部),vba,excel,grouping,collapse,outline,Vba,Excel,Grouping,Collapse,Outline,我希望有人能帮我找到这里 我有一个庞大的列表,正在使用分组来组织它: 正如您所看到的,我有一个主要的组行,其中包含许多产品。然后,一些产品的配件被归类在该零件下 我想要的是,把所有的配件组都拆下来,只展示产品。下面的代码将扩展未扩展的组,我不希望这样 shtOTP.Outline.ShowLevels RowLevels:=4 shtOTP.Outline.ShowLevels RowLevels:=3 shtOTP.Outline.ShowLevels RowLevels:=2 Active

我希望有人能帮我找到这里

我有一个庞大的列表,正在使用分组来组织它:

正如您所看到的,我有一个主要的组行,其中包含许多产品。然后,一些产品的配件被归类在该零件下

我想要的是,把所有的配件组都拆下来,只展示产品。下面的代码将扩展未扩展的组,我不希望这样

shtOTP.Outline.ShowLevels RowLevels:=4
shtOTP.Outline.ShowLevels RowLevels:=3
shtOTP.Outline.ShowLevels RowLevels:=2
ActiveWindow.ScrollRow = shtOTP.Range("A3").row 'Go to top of sheet
我试过查看
.Outline.Parent
.Outline.SummaryRow
函数,但据我所知,它们没有识别组的“父级”

我可以执行如下循环:

For i = 3 To getLastRow
    Dim nextRow As Integer
    nextRow = shtOTP.Rows(i+1).row
    If nextRow = ParentRow And i.EntireRow.Hidden = False Then
        'Collapse the group below the product
    End If
Next
但是

如何识别下一个行是否为父行


我如何才能只折叠该组?

我想出了一个简短的宏来执行此操作:

Application.ScreenUpdating = False

    Dim row As Range

    For i = 3 To getLastRow
        Set row = shtOTP.Range("A" & i)

        If row.EntireRow.Hidden = True Then                 
            'Do nothing
        ElseIf row.Value = "SM" Then                        'Minor Sub-model row, needs to be collapse
            If shtOTP.Rows(i).EntireRow.ShowDetail = True Then
                shtOTP.Rows(i).EntireRow.ShowDetail = False
            End If
        End If
    Next

Application.ScreenUpdating = True

为了更好地识别附件,我将“SM”放在了行的A单元格中。

对于那些希望显示/隐藏列的人来说,这个答案有点误导。仅仅使用
.EntireColumn
是不够的,您需要使用
.Columns
属性,如
.EntireColumn.Columns.showdeail=