Свернуть некоторые группы (не все) с помощью VBA

Я надеюсь, что кто-то сможет помочь мне здесь...

У меня есть огромный список, и я использую группирование для его организации:

Как видите, у меня есть строка Major Group, в которую входит ряд продуктов. Затем, некоторые продукты имеют аксессуары, которые затем группируются по этой части.

То, что я хочу, это свернуть ВСЕ группы аксессуаров ТОЛЬКО продуктов, показывающих. Приведенный ниже код будет расширять группы, которые не раскрываются, я не хочу этого.

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

Но...

КАК мне определить, является ли nextRow родительским?

КАК мне развалиться ТОЛЬКО ЭТО ГРУППА?

1 ответ

Решение

Я смог придумать короткий макрос для этого:

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

Я поместил "СМ" в ячейку "А" для аксессуаров, чтобы лучше их идентифицировать.

Другие вопросы по тегам