Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Bedingtes Ausblenden von Zeilen [Excel 2010]
#1
Sad 
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.

   
 
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:
Antworten Top
#2
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
Gruß
Uwe

Feedback? Aber selbstverständlich ;)
Antworten Top
#3
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!
Antworten Top
#4
Hallo,
bei Sheets("DeineTabelle") mus der Blattname rein, NICHT der Dateiname der Arbeitsmappe
Gruß
Uwe

Feedback? Aber selbstverständlich ;)
Antworten Top
#5
Hallo Uwe,

das habe ich auch schon probiert, leider erfolglos  Huh

Ich hänge mal die Testdatei an Blush


.xls   Test.xls (Größe: 159,5 KB / Downloads: 2)

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
Antworten Top
#6
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
Gruß
Uwe

Feedback? Aber selbstverständlich ;)
Antworten Top
#7
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!!!
Antworten Top
#8
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
Gruß
Uwe

Feedback? Aber selbstverständlich ;)
Antworten Top
#9
Hallo Uwe,

perfekt :)

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

LG Markus
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste