Clever-Excel-Forum

Normale Version: Bedingtes Ausblenden von Zeilen [Excel 2010]
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Morgen liebe Community :)

Ich habe ein kleines Problem und benötige bitte eure Hilfe, da ich leider nicht weiter komme :s 

Anbei ein Ausschnitt der Excel Tabelle.

[attachment=16343]
 
In dieser Tabelle sollen sich diverse Zeilen nach einer gewissen Zeit automatisch ausblenden.

Wenn Datum (D7) älter als 40 Tage (im Vergleich zu heute), dann Zeile 7 ausblenden, ausgenommen P7 = X, dann soll nichts passieren
(und dies soll dann auf alle Zeilen entsprechend übertragen werden --> D8, Zeile 8, P8 = X etc...)

Da dies nicht über eine Wenn Dann Formel o. Ä. funktioniert, sondern nur über Makro bin ich hier leider hilflos überfragt.

Ich hoffe ihr könnt mir hier weiterhelfen.

Vorab schon einmal vielen Dank für eure Unterstützung!

LG cRookzA / Markus :19:
Hallo Markus,

sollte z.B. so funktionieren:
(im Codebereich von DeineArbeitsmappe)
Code:
Private Sub Workbook_Open()

    Call AlteZeilenAusblenden(Sheets("DeineTabelle"), "D", "P", 40, 6)

End Sub

Private Sub AlteZeilenAusblenden(Blatt As Worksheet, Spalte As String, SpalteX As String, Alter As Long, Startzeile As Long)
'
Dim lngZ As Long
    
With Blatt
    For lngZ = Startzeile To .Cells(.Rows.Count, Spalte).End(xlUp).Row
        If IsDate(.Cells(lngZ, Spalte).Value) And _
            DateDiff("d", .Cells(lngZ, Spalte).Value, Date) > Alter And _
            .Cells(lngZ, SpalteX).Value <> "X" Then
                .Rows(lngZ).EntireRow.Hidden = True
        End If
    Next lngZ
End With

End Sub
Hallo Uwe,

schon mal vielen Dank für deine Hilfe!

Ich habe den Code gem. deines Beitrags in den Codebereich von DieseArbeitsmappe kopiert.

Es kommt leider jedoch ein Laufzeitfehler "9" "(Index außerhalb des gültigen Bereichs)

bei Zeile "Call AlteZeilenAusblenden(Sheets("DeineTabelle"), "D", "P", 40, 6)"


"DeineTabelle" habe ich im Code bereits in den Dateinamen abgeändert ("Test" bzw. ohne "" auch getestet)

Funktioniert leider beides nicht :(

_______

NACHTRAG:


Wo muss ich den die Tage (40 Tage in meinem Fall) hinterlegen,
damit dies entsprechend gezogen wird?

    DateDiff("d", .Cells(lngZ, Spalte).Value, Date) > Alter And _

Vielen Dank!
Hallo,
bei Sheets("DeineTabelle") mus der Blattname rein, NICHT der Dateiname der Arbeitsmappe
Hallo Uwe,

das habe ich auch schon probiert, leider erfolglos  Huh

Ich hänge mal die Testdatei an Blush

[attachment=16349]

Code:
Private Sub Workbook_Open()

   Call AlteZeilenAusblenden(Sheets("ABAS"), "D", "Q", 40, 6)

End Sub

Private Sub AlteZeilenAusblenden(Blatt As Worksheet, Spalte As String, SpalteX As String, Alter As Long, Startzeile As Long)
'
Dim lngZ As Long
   
With Blatt
   For lngZ = Startzeile To .Cells(.Rows.Count, Spalte).End(xlUp).Row
       If IsDate(.Cells(lngZ, Spalte).Value) And _
           DateDiff("d", .Cells(lngZ, Spalte).Value, Date) > Alter And _
           .Cells(lngZ, SpalteX).Value <> "X" Then
               .Rows(lngZ).EntireRow.Hidden = True
       End If
   Next lngZ
End With

End Sub
Hallo,
im Prinzip hat es daran gelegen, dass mit Startzeile 6 begonnen wurde, da aber die Überschriften waren und zu viele Prüfungen gleichzeitig hier stattfanden.
Es hätte gereicht beim Übergabe-Parameter für die Startzeile (beim Workbook_Open) den Wert von 6 auf 7 zu ändern.
Nichtsdestotrotz würd ich aber den ganzen Code, dann so anpassen, dass lediglich geprüft wird, ob in Spalte "D" ein Datum ist, und nur dann, falls es zutrifft die weiteren Prüfungen stattfinden.
Code:
Private Sub Workbook_Open()

    Call AlteZeilenAusblenden(Sheets("ABAS"), "D", "P", 40, 7)

End Sub

Private Sub AlteZeilenAusblenden(Blatt As Worksheet, Spalte As String, SpalteX As String, Alter As Long, Startzeile As Long)
'
Dim lngZ As Long

With Blatt
    For lngZ = Startzeile To .Cells(.Rows.Count, Spalte).End(xlUp).Row
        If IsDate(.Cells(lngZ, Spalte).Value) Then
            If DateDiff("d", .Cells(lngZ, Spalte).Value, Date) > Alter And _
                .Cells(lngZ, SpalteX).Value <> "X" Then
                .Rows(lngZ).EntireRow.Hidden = True
            End If
        End If
    Next lngZ
End With

End Sub

Alternativ würde der Code, wenn man ihn ohne Übergabe-Parameter schreiben wollte, so aussehen:
Code:
Sub StartProzedur()
'
Dim lngZ As Long
Dim strSpalte As String, strSpalteX As String, lngAlter As Long, lngStartzeile As Long

lngStartzeile = 7       'Startzeile ab der geprüft wird
lngAlter = 40           '40 Tage
strSpalte = "D"         'Prüfspalte für Alter
strSpalteX = "P"        'Prüfspalte für "X"

With Sheets("ABAS")  'hier muss dein Blatt angegeben werden auf dem die Prüfung gemacht werden soll
    For lngZ = lngStartzeile To .Cells(.Rows.Count, strSpalte).End(xlUp).Row
        If IsDate(.Cells(lngZ, Spalte).Value) Then
            If DateDiff("d", .Cells(lngZ, Spalte).Value, Date) > Alter And _
                .Cells(lngZ, SpalteX).Value <> "X" Then
                .Rows(lngZ).EntireRow.Hidden = True
            End If
        End If
    Next lngZ
End With

End Sub
Hallo Uwe,

super, vielen vielen Dank, habe es glaube ich hinbekommen.

Gibt es noch einen einfache Möglichkeit, dass dieses Makro bei jedem Start ausgeführt wird?

Vielen Dank!!!
Hallo,
meine erste Variante hatte ich ja bereits im Beispiel im "Workbook_Open" vorgesehen, sollte also bei jedem Start ausgeführt werden.
Falls Du lieber die zweite Variante bevorzugst muss an selbiger Stelle diese aufgerufen werden, nur ohne Übergabe-Parameter:
Code:
Private Sub Workbook_Open()
Call StartProzedur
End Sub
Hallo Uwe,

perfekt :)

Vielen lieben Dank für deine Hilfe und Unterstützung! :19: :19:

LG Markus