Rozwijanie tylko wybranych wierszy w programie Excel za pomocą makr VBA


0

Napisałem następujący kod VBA, który zawiera warunek, w którym jeśli komórka # = „Tak”, to rozwiń dolny wiersz, w przeciwnym razie, jeśli komórka # = „Nie”, zwinąć dolny wiersz.

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("E15").Value = "Yes" Then
ActiveSheet.Outline.ShowLevels RowLevels:=3
ElseIf Range("E15").Value = "No" Then
ActiveSheet.Outline.ShowLevels RowLevels:=8
End If
End Sub

Teraz wydaje się, że działa dobrze bez żadnych problemów, ale z jakiegoś powodu rozszerza i zwija wszystkie wiersze, które są w tym samym poziomie wiersza, co wyświetlany w kodzie, naprawdę chcę, aby móc wybrać dokładnie ten wiersz, który chcę rozwinąć i zwinąć w zależności od warunku ”.

Jak widać, nie jestem zbytnio VB Pro, ale każda pomoc byłaby mile widziana.

Dzięki!


Mam problem ze zrozumieniem pytania. Masz grupy wierszy, w których komórka będzie miała wartość „tak” lub „nie” i chcesz, aby ta grupa się rozwijała, czy chcesz, aby wyświetlała ostatni wiersz grupy?
Raystafarian,

Odpowiedzi:


0

Jeśli dobrze cię rozumiem, powinieneś być w stanie ustawić i wyłączyć tę ShowDetailswłaściwość, aby rozwinąć i zwinąć określone wiersze podsumowania w swoim konspekcie.

Jak pokazano poniżej, Showdetailsjest to właściwość odczytu / zapisu całego wiersza (lub kolumny) w konturze. Aby wyświetlić szczegóły dla określonego wiersza podsumowania, odwołaj się do pojedynczej komórki w tym wierszu, jak pokazano w przykładowym kodzie poniżej. Program Excel zgłosi błąd, jeśli spróbujesz ustawić właściwość na Prawda dla poziomu podsumowania, który jest już rozwinięty. Jeśli wiersz podsumowania nie jest widoczny, ponieważ jest zwinięty w większym ugrupowaniu, Showdetails(po cichu) nie rozwinie wiersza.

Option Explicit

Sub Worksheet_Change(ByVal Target As Range)
    With ActiveSheet
        If .Range("E15").Value = "Yes" Then
            With .Range("A26").EntireRow
                If .ShowDetail = False Then
                    .ShowDetail = True
                End If
            End With
        ElseIf Range("E15").Value = "No" Then
            With .Range("A45").EntireRow
                If .ShowDetail = False Then
                    .ShowDetail = True
                End If
            End With
        End If
    End With
End Sub
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.