Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeilen ausblenden

Zeilen ausblenden
25.04.2023 14:58:21
Wolfgang101

Hallo Zusammen,
ich habe in kleines Problem mit Excel. Leider kann ich die Datei nicht hochladen, da ich damit gegen diverse Schutzrichtlinien hier im Unternehmen verstoßen würde, daher versuche ich Euch das Problem zu schildern.

Ich habe eine Tabelle so formatiert, dass 38 Zeilen in der Druckansicht einer DIN-A-4 Seite entsprechen. Von diesen "Formularen" habe ich 20 Stück erstellt. Die Formularnummer ist in B3, B4, B79 usw. über eine Index-Funktion mit einer Quelltabelle verbunden. Dort wo in der Quelltabelle Einträge vorhanden sind, erscheint die Formularnummer, für die restlichen der 20 Blätter gilt in der entsprechende Fehlwert = 0.

Zudem habe ich jede vorhandene Zeile in Spalte Q mit einem "einblenden" oder "ausblenden" in Abhängigkeit zum Wert in der Zeile für die Formularnummer versehen. So - zumindest in meiner Vorstellung - kann ich automatisch leeren Seiten ("ausblenden") für die Darstellung am Monitor oder zum Druck ausblenden. Dies soll zudem "dynamisch" gesehen, denn die Anzahl der benötigten Formularnummern variiert, mal benötige ich 15 Seiten, mal auch nur 3 Seiten.

Lösen wollte ich das Problem mit folgendem Code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim zeile As Long
If Not Intersect(Target, Range("Q1:Q")) Is Nothing Then
Application.EnableEvents = False
For zeile = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
If Cells(zeile, 17) = "ausblenden" Then
Rows(zeile).EntireRow.Hidden = True
Else
Rows(zeile).EntireRow.Hidden = False
End If
Next zeile
Application.EnableEvents = True
End Sub

Interessanterweise hat der Code einmal dafür gesorgt, das etwa 90% der Zeilen mit einem "ausblenden" ausgeblendet wurden, aber das einblenden bei Veränderung der Anzahl der Zellen mit einer Formularnummer hat schon nicht mehr funktioniert. Nach dem manuellen Wiedereinblenden blieb der Code dann plötzlich völlig wirkungslos, ohne dass ich bewusst etwas verändert hätte.

Ich weiß - ich kann auch einfach manuell einen Filter setzen, aber es gibt Kollegen, die können das nicht und hantieren dann immer mit Dokumenten herum die unnötig viele ungenutzte Seiten beinhalten.

Ich hoffe ich habe den Tabellenaufbau einigermaßen beschrieben und freue mich über jeden Hinweis, wo mein Fehler liegen könnte.

Viele Grüße
Wolfgang

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen ausblenden
25.04.2023 15:09:34
Daniel
Hi
setzte doch den Autofilter per Code.
Gruß Daniel


AW: Zeilen ausblenden
25.04.2023 15:17:36
UweD
Hallo

1)
Ich vermute, dass du bei ausgeschalteten Events in einen Fehler gelaufen bist und die Events dann ausgeschaltet blieben.
Deshalb ist dabei die Fehlerbehandlung besonders wichtig, damit die Events (und Weiteres) immer wieder eingeschaltet werden.

2)
Bei dem Range fehlt die 2. Zeilenangabe.
Habe mal 1000 eingetragen

3)
Es fehlte ein End if

4)
Die zweite IF... kannst du verkürzen

Private Sub Worksheet_Change(ByVal Target As Range)
    Const APPNAME = "Worksheet_Change"
    Dim zeile As Long
    
    On Error GoTo Fehler
    
    If Not Intersect(Target, Range("Q1:Q1000")) Is Nothing Then
        Application.EnableEvents = False
        For zeile = 1 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
            Rows(zeile).EntireRow.Hidden = (Cells(zeile, 17) = "ausblenden")
        Next zeile
    End If
        '*** Fehlerbehandlung
    Err.Clear
Fehler:
    Application.EnableEvents = True
    If Err.Number > 0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
        & "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear

End Sub
LG UweD


Anzeige
AW: Zeilen ausblenden
25.04.2023 16:28:06
GerdL
Hallo Wolfgang,

noch ein Gedicht.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim X As Range
    
    
    On Error GoTo Fehler
    
    If Not Intersect(Target, Range("Q1:Q1000")) Is Nothing Then
         If Application.CountIf(Range("Q1:Q1000"), "ausblenden") Then
            Application.EnableEvents = False
            Set X = Range("Q1:Q1000").ColumnDifferences(Range("Q1:Q1000").Find("ausblenden", LookIn:=xlValues))
            Range("Q1:Q1000").EntireRow.Hidden = True
            X.EntireRow.Hidden = False
        End If
    End If
    
Fehler:
    If Err.Number > 0 Then Err.Clear
    Set X = Nothing
    Application.EnableEvents = True


End Sub
Gruß Gerd

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige