Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Gruppierung per VBA ausblenden

Forumthread: Gruppierung per VBA ausblenden

Gruppierung per VBA ausblenden
18.03.2013 19:45:19
Der
Hallo allerseits,
benötige Hilfe zu folgendem Problem:
Folgender Gedanke: In Spalte A von Zeile 21 bis 44 gehören immer 4 Zeilen zu einem Block und sind dementsprechend gruppiert(21,22,23,24 - 26,27,28,29 usw.).Nun möchte ich prüfen,welche Blöcke leer sind und diese Gruppierung dann ausblenden.
Die Prüfung läuft folgendermassen ab:

Sub GruppierungAusblenden()
Dim Zei As Long
With Sheets(1)
For Zei = 21 To 44 Step 5
If Application.CountBlank(.Range("A" & Zei & ":A" & Zei + 3)) = 4 Then
MsgBox "Es sind leere Blöcke vorhanden"
End If
Next Zei
End With
End Sub

Anstatt der MsgBox sollen nun über "ActiveSheet.Outline.showLevels RowLevels"(hab die Funktion im Forum gefunden) alle leeren Blöcke auf einmal oder auch nacheinander ausgeblendet werden.Die +-Zeichen zum manuellen Einblenden müssen dabei vorhanden bleiben.
Wie bewerkstellige ich das? Oder gibt es ne cleverere Lösung dafür?
LG Der Blondie

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Gruppierung per VBA ausblenden
18.03.2013 22:08:56
Luschi
Hallo Blondie,
hier mal 3 Makros zur Neufestlegung der Gruppierung und zum Öffnen/Schließen der
Gruppierung

Sub GruppierungNeuSetzen()
Dim Zei As Long
With Sheets(1)
On Error Resume Next
.Range("A21:A44").Rows.Ungroup
'End
On Error GoTo 0
For Zei = 21 To 44 Step 5
If Application.CountBlank(.Range("A" & Zei & ":A" & Zei + 3)) = 4 Then
.Range("A" & Zei & ":A" & Zei + 3).Rows.Group
End If
Next Zei
End With
End Sub
Sub GruppierungEinAus_1()
'mit Application.ExecuteExcel4Macro
Dim Zei As Long
With Sheets(1)
For Zei = 21 To 44 Step 5
If Application.CountBlank(.Range("A" & Zei & ":A" & Zei + 3)) = 4 Then
If .Rows(Zei).EntireRow.Hidden Then
Application.ExecuteExcel4Macro "SHOW.DETAIL(1," & Zei + 3 & ",True)"
Else
Application.ExecuteExcel4Macro "SHOW.DETAIL(1," & Zei + 3 & ",False)"
End If
End If
Next Zei
End With
End Sub
Sub GruppierungEinAus_2()
'mit CommandBars.FindControl
Dim cbc As CommandBarControl
Dim Zei As Long
With Sheets(1)
For Zei = 21 To 44 Step 5
If Application.CountBlank(.Range("A" & Zei & ":A" & Zei + 3)) = 4 Then
.Cells(Zei + 4, 1).Select
If Selection.Offset(-1, 0).EntireRow.Hidden Then
Set cbc = CommandBars.FindControl(, 462)
Else
Set cbc = CommandBars.FindControl(, 464)
End If
If Not cbc Is Nothing Then
cbc.Execute
End If
Set cbc = Nothing
End If
Next Zei
End With
End Sub
Erstaunlich, daß weder Excel E2007 ... E2013 das Auf- und Zuklappen der Gliederung aufzeichnet. Excel 2003 hatte damit keine Probleme, wenn man es über das Menü
'Daten- Gruppierung und Gliederung' macht.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Gruppierung per VBA ausblenden
19.03.2013 10:10:03
Der
Guten Morgen Luschi,
vielen Dank. Alle 3 laufen perfekt. Das Erste ist zwar nicht geeignet,aber die anderen beiden umso mehr. Nun muss ich mal testen ob es da Unterschiede gibt.Bisher habe ich noch keine entdeckt.
Was ich aber noch gerne gewusst hätte ist:
Was ist "CommandBars.FindControl" ? Ich finde dazu keine adäquate Erklärung. Ich vermute mal,dass dies irgendeine Schaltfläche oder sowas ist. Wenn ja,wo finde ich die?
Nochmals vielen Dank
Gruß Der Blondie

Anzeige
AW: Gruppierung per VBA ausblenden
19.03.2013 10:51:47
Luschi
Hallo Blondie,
M$ hat mit Office 2007 eigentlich das CommandBar-Object für den gewöhnlichen user abgeschaft und dafür die BLÖDEN!!! Ribbon/Menüband-Objekte eingeführt. Für den Vba-Programmierer stehen 'Commandbars' noch zur Verfügung, werden aber in das Add-Ins'-RibbonTab verschoben.
Wenn man aber einen Vergleich des Commandbar-Objektes von Excel 2003 zu 2007/2010/2013 vergleicht, dann muß man feststellen, daß das dieses Objekt weiter existiert und immer mehr ausgebaut wird.
Mein Verdacht, daß Ribbon nur die schöne Oberfläche bietet, aber im Hintergrund weiter das Commandbar-Objekt regiert, verstärkt sich immer mehr. So sind die Kontext-Menüs auch nur über das Commandbar-Objekt ansprechbar.
Will man also per Vba ein Objekt aus Ribbon/Menüband anklicken, so wie es sonst der User mit der Maus macht, dann benutzt man vom Commandbars-Objekt die FindControl-Methode über eine eineindeutige ID-Nummer. Diese kann man per Vba auslesen und wundert sich, wie dieses Objekt in jeder neuen Version wächst & wächst & ...
Gruß von Luschi
aus klein-Paris
PS: Wer jetzt einwendet, ja aber die Dateistruktur ist doch auf XML umgestellt worden, der soll sich mal Access 2013 ansehen. Nix xml, weiter eine propitäre Dateistruktur, Alles in Einem.

Anzeige
AW: Gruppierung per VBA ausblenden
19.03.2013 18:53:21
Der
Hallo Luschi,
diese Erklärung ist mir eindeutig zu hoch. Da ich wie zunächst gedacht,keine besondere Schaltfläche oder ähnliches betätigen muss,messe ich dieser Methode erstmal keine weitere Bedeutung zu.
Nochmals vielen Dank für die Makro´s. Eine Frage hätte ich noch. Worin liegt der Unterschied zwischen GruppierungEinAus_1(Code 2)und GruppierungEinAus_2(Code 3). Ich merke immer noch keinen Unterschied.
Gruß Frank

Anzeige
AW: Gruppierung per VBA ausblenden
19.03.2013 22:49:33
Luschi
Hallo Blondie,
beide Prozeduren machen das Selbe, nur auf 2 unterschiedlichen Wegen.
Die 1. Methode funktionierte schon zu Zeiten von Excel 5.0 für Windows 3.1 (1994), als es noch kein Vba gab, sondern eine spezielle länderspezifische Makrossprache. Die 2. Routine sieht etwas vba-Moderner aus.
Gruß von Luschi
aus klein-Paris
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Gruppierung per VBA ausblenden


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul, indem du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" wählst.

  3. Füge den folgenden Code in das Modul ein:

    Sub GruppierungAusblenden()
       Dim Zei As Long
       With Sheets(1)
           For Zei = 21 To 44 Step 5
               If Application.CountBlank(.Range("A" & Zei & ":A" & Zei + 3)) = 4 Then
                   .Rows(Zei & ":" & Zei + 3).Hidden = True
               End If
           Next Zei
       End With
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, indem du ALT + F8 drückst, das Makro auswählst und auf "Ausführen" klickst.

Mit diesen Schritten kannst du die Gruppierung für leere Blöcke in deiner Excel-Tabelle ausblenden.


Häufige Fehler und Lösungen

  • Fehler: "Laufzeitfehler 1004"

    • Lösung: Stelle sicher, dass das Arbeitsblatt, auf das du zugreifst, auch wirklich "Sheets(1)" ist. Möglicherweise musst du den Namen des Arbeitsblattes anpassen.
  • Fehler: Keine Änderungen sichtbar

    • Lösung: Überprüfe, ob die Zeilen wirklich leer sind. Der Code zählt nur leere Zellen in den angegebenen Bereichen.

Alternative Methoden

Falls du eine andere Methode bevorzugst, kannst du den Code von Luschi verwenden, um die Gruppierung neu zu setzen und leere Blöcke auszublenden. Hier ist ein Beispiel aus dem Thread:

Sub GruppierungNeuSetzen()
    Dim Zei As Long
    With Sheets(1)
        On Error Resume Next
        .Range("A21:A44").Rows.Ungroup
        On Error GoTo 0
        For Zei = 21 To 44 Step 5
            If Application.CountBlank(.Range("A" & Zei & ":A" & Zei + 3)) = 4 Then
                .Range("A" & Zei & ":A" & Zei + 3).Rows.Group
            End If
        Next Zei
    End With
End Sub

Diese Methode gruppiert die Blöcke erneut, falls sie leer sind.


Praktische Beispiele

  • Beispiel 1: Angenommen, du hast die Werte in Spalte A von Zeile 21 bis 44. Die Zeilen 21 bis 24 sind leer. Nach dem Ausführen des Makros werden diese Zeilen ausgeblendet.

  • Beispiel 2: Wenn du nur bestimmte Zeilen ausblenden möchtest, kannst du den Code anpassen, um nur bestimmte Bereiche zu überprüfen.


Tipps für Profis

  • Nutze Application.ScreenUpdating = False vor dem Start deines Makros, um die Ausführung zu beschleunigen und das Flackern des Bildschirms zu verhindern.

  • Erstelle eine Schaltfläche in Excel, um das Makro einfach ausführen zu können, ohne in den VBA-Editor wechseln zu müssen.

  • Dokumentiere deinen Code mit Kommentaren, um ihn später leichter nachvollziehen zu können.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen GruppierungEinAus_1 und GruppierungEinAus_2? Beide Prozeduren erreichen das gleiche Ziel, aber auf unterschiedliche Weise. GruppierungEinAus_1 verwendet die Excel4-Makro-Funktion, während GruppierungEinAus_2 die CommandBars für den Zugriff auf das Menüband verwendet.

2. Welche Excel-Versionen unterstützen diese Makros? Die vorgestellten Makros funktionieren in Excel 2007 bis 2013. In Excel 2003 sind sie ebenfalls kompatibel, wobei einige Unterschiede in der Benutzeroberfläche bestehen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige