Registriert seit: 21.02.2018
Version(en): 2010
21.02.2018, 12:35
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:
Registriert seit: 21.04.2017
Version(en): 2013
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
Registriert seit: 21.02.2018
Version(en): 2010
21.02.2018, 14:44
(Dieser Beitrag wurde zuletzt bearbeitet: 21.02.2018, 14:44 von cRookzA.)
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!
Registriert seit: 21.04.2017
Version(en): 2013
Hallo, bei Sheets("DeineTabelle") mus der Blattname rein, NICHT der Dateiname der Arbeitsmappe
Registriert seit: 21.02.2018
Version(en): 2010
Hallo Uwe, das habe ich auch schon probiert, leider erfolglos  Ich hänge mal die Testdatei an
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
Registriert seit: 21.04.2017
Version(en): 2013
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
Registriert seit: 21.02.2018
Version(en): 2010
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!!!
Registriert seit: 21.04.2017
Version(en): 2013
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
Registriert seit: 21.02.2018
Version(en): 2010
Hallo Uwe,
perfekt :)
Vielen lieben Dank für deine Hilfe und Unterstützung! :19: :19:
LG Markus
|