Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
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 aufgrund Datum ausblenden

Zeilen aufgrund Datum ausblenden
02.12.2020 18:19:57
Jvana
Liebes Forum
Anbei die Datei zu meiner Frage: https://www.herber.de/bbs/user/142016.xlsm
Ziel:
Im Tab "Einstellung Person" wird unter anderem ein Von- und ein Bis-Datum eingeben (Zellen C10 und C11). Im Tab "Zeiterfassung1" sollen dann alle Zeilen mit Datum (Spalte D) kleiner als das Von-Datum und Zeilen mit Datum grösser als das Bis-Datum ausgeblendet werden.
Das Von- und Bis-Datum übernehme ich zur Übersicht auch in den Tab "Zeiterfassung1" Zellen C7 und D7.
Ich habe bereits ein anderes "Worksheet_Change(ByVal Target As Range)" - Makro im Tab "Einstellung Person", damit im Tab "Zeiterfassung1" Spalten ausgeblendet werden.
Für das Zeilenausblenden aufgrund des Datums stehe ich jedoch an, habe etwas gebastelt, das aber nur funktioniert, wenn das Makro im Tabellenblatt "Zeiterfassung1" hinterlegt ist, dieses manuell vorgängig entsperrt und die Zelle C7 aktiviert und mit Enter bestätigt wird... und zudem braucht der Ausblenden-Vorgang über 30 Sekunden...
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "C7" Then 'Zeilen aufgrund Datum ausbblenden
Sheets("Zeiterfassung1").Unprotect
'Application.ScreenUpdating = False
For i = 1 To 380
If Cells(i, 4).Value  Range("D7") Then
Rows(i).Hidden = True
End If
Next i
' Application.ScreenUpdating = True
Range("D4").Select
End If
Sheets("Zeiterfassung1").Protect
End Sub

Wie schaffe ich es, damit das Makro ausgelöst wird, wenn ich die Änderung in "Einstellung Person" vornehme und damit es schneller die Zeilen ausblendet?
Liebe Grüsse
Jvana

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

Betreff
Datum
Anwender
Anzeige
AW: Zeilen aufgrund Datum ausblenden
02.12.2020 19:50:05
Werner
Hallo,
da würde ich das Activate-Event des Tabellenblattes "Zeiterfassung1" benutzen.
Der Code gehört also ins Codemodul vom Blatt "Zeiterfassung1".
Private Sub Worksheet_Activate()
Dim vaVon As Variant, vaBis As Variant, loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Einstellung Person")
If IsDate(Range("C10")) And IsDate(Range("C11")) Then
loLetzte = Cells(Rows.Count, "D").End(xlUp).Row
vaVon = Application.Match(CLng(.Range("C10")), Range("D8:D" & loLetzte), 0)
vaBis = Application.Match(CLng(.Range("C11")), Range("D8:D" & loLetzte), 0)
If Not IsError(vaVon) And Not IsError(vaBis) Then
ActiveSheet.Unprotect
Range("D9:D" & loLetzte).EntireRow.Hidden = True
Range("D" & vaVon + 7 & ":D" & vaBis + 7).EntireRow.Hidden = False
ActiveSheet.Protect
Else
MsgBox "Fehler beim Datum Zeitraum von bzw. Zeitraum bis. Bitte prüfen."
End If
Else
MsgBox "Fehler: Kein gültiges Datum in Zeitraum von bzw. Zeitraum bis."
End If
End With
End Sub
Gruß Werner
Anzeige
AW: Zeilen aufgrund Datum ausblenden
03.12.2020 00:36:15
Jvana
Lieber Werner
Vielen Dank für deine Hilfe. Der Code funktioniert super :-)
Ich habe noch eine ergänzende Frage: Es gibt in der Originalmappe zwei Tabs für die Zeiterfassung "Zeiterfassung1" und "Zeiterfassung2". Beide Tabs sind identisch aufgebaut. Ich habe den Code nun auch in das Codemodul von "Zeiterfassung2" eingefügt und die Zellbezüge und die Variabeln angepasst. Leider kommt dann die Fehlermeldung "Fehler: Kein gültiges Datum in Zeitraum von bzw. Zeitraum bis.", mit der im Code der Datumsfehler abgefangen wird.
Hier der abgeänderte Code im Codemodul von "Zeiterfassung2":
Private Sub Worksheet_Activate()
Dim vaVon2 As Variant, vaBis2 As Variant, loLetzte2 As Long
Application.ScreenUpdating = False
With Worksheets("Einstellung Person")
If IsDate(Range("g10")) And IsDate(Range("g11")) Then
loLetzte2 = Cells(Rows.Count, "D").End(xlUp).Row 'Zeile 373
vaVon2 = Application.Match(CLng(.Range("g10")), Range("D8:D" & loLetzte2), 0) 'suche  _
die Zeile mit dem von-Datum --> bspw Zeile 15
vaBis2 = Application.Match(CLng(.Range("g11")), Range("D8:D" & loLetzte2), 0) 'suche  _
die Zeile mit dem bis-Datum --> bspw Zeile 30
If Not IsError(vaVon2) And Not IsError(vaBis2) Then 'wenn beides vorhanden ist
ActiveSheet.Unprotect
Range("D9:D" & loLetzte2).EntireRow.Hidden = True 'alle Zeilen ausblenden
Range("D" & vaVon2 + 7 & ":D" & vaBis2 + 7).EntireRow.Hidden = False 'D22:D37  _
wieder einblenden
ActiveSheet.Protect
Else
MsgBox "Fehler beim Datum Zeitraum von bzw. Zeitraum bis. Bitte pr?fen."
End If
Else
MsgBox "Fehler: Kein g?ltiges Datum in Zeitraum von bzw. Zeitraum bis."
End If
End With
End Sub

Hast du eine Idee, was ich hier falsch gemacht habe?
Gruss
Jvana
Anzeige
AW: Zeilen aufgrund Datum ausblenden
03.12.2020 10:30:03
Werner
Hallo,
zwei Fehler - von mir.
1. hier muss jeweils ein Punkt vor Range, damit der Bezug zum Blatt Einstellung Person hergestellt wird
If IsDate(.Range("C10")) And IsDate(.Range("C11")) Then

Ohne den Punkt davor schaut der Code in den Blättern Zeiterfassung1 bzw. Zeiterfassung2 nach einem gültigen Datum. Das passt (zufällig) bei Zeiterfassung1, weil dort in Spalte C ein Datum ist. Beim Blatt Zeiterfassung2 ist aber in Spalte G kein Datum. Der Code soll natürlich in Beiden Fällen die Zellen C10-C11 bzw. G10 G11 im Blatt Einstellung Person auf ein gültiges Datum prüfen. Das natürlich bei den Codes in beiden Blättern entsprechend ändern.
2. Denkfehler meinerseits
Wenn durch den Code Zeilen z.B. im Blatt Zeiterfassung1 ausgeblendet wurden, dann bleiben die auch ausgeblendet, wenn du wieder auf ein anderes Blatt wechselst. Ist jetzt beispielsweise nur der Bereich vom 1.08.2020 bis 10.08.2020 eingeblendet und du gibst jetzt einen neuen Zeitraum vom 1.11.2020 bis 10.1.2020 ein, dann wird dieser Zeitraum durch Match nicht gefunden, weil nur im sichtbaren (nicht ausgeblendeten Bereich) gesucht wird. Dieser Zeitraum ist aber ausgeblendet.
Langer Rede kurzer Sinn: Bei Verlassen der Blätter Zeiterfassung1 und Zeiterfassung2 müssen wieder alle Zeilen eingeblendet werden.
Also ins Codemodul beider Blätter zusätzlich noch diesen Code:
Private Sub Worksheet_Deactivate()
Application.ScreenUpdating = False
With Worksheets("Zeiterfassung1")
.Unprotect
.Range("D9:D" & .Cells(Rows.Count, "D").End(xlUp).Row).EntireRow.Hidden = False
.Protect
End With
End Sub

Blattnamen entsprechend anpassen.
Gruß Werner
Anzeige
AW: Zeilen aufgrund Datum ausblenden
04.12.2020 08:47:37
Jvana
Lieber Werner
Nochmals herzlichen Dank, deine Hilfe hat mir sehr viel geholfen :-)
Beim "Worksheet Deactivate" hat das ".End(xlUp).Row" nicht funktioniert. Vermutlich, weil je nachdem unten noch Zeilen ausgeblendet sind, wenn das Makro startet. Da es sich in meinem File immer um ein Jahr handelt, sind die Zeilen, die benötigt werden, beschränkt. Somit habe ich beim "Deactivate" einfach bis zur 500sten Zeile definiert zum wieder einblenden.
Für das Archiv der letztendliche Code, der Mein Problem perfekt löst:
Private Sub Worksheet_Activate()
Dim vaVon As Variant, vaBis As Variant, loLetzte As Long
Application.ScreenUpdating = False
With Worksheets("Einstellung Person")
If IsDate(.Range("C10")) And IsDate(.Range("C11")) Then
loLetzte = Cells(Rows.Count, "D").End(xlUp).Row
vaVon = Application.Match(CLng(.Range("C10")), Range("D8:D" & loLetzte), 0)
vaBis = Application.Match(CLng(.Range("C11")), Range("D8:D" & loLetzte), 0)
If Not IsError(vaVon) And Not IsError(vaBis) Then
ActiveSheet.Unprotect
Range("D9:D" & loLetzte).EntireRow.Hidden = True
Range("D" & vaVon + 7 & ":D" & vaBis + 7).EntireRow.Hidden = False
ActiveSheet.Protect
Else
MsgBox "Fehler beim Datum Zeitraum von bzw. Zeitraum bis. Bitte pr?fen."
End If
Else
MsgBox "Fehler: Kein g?ltiges Datum in Zeitraum von bzw. Zeitraum bis."
End If
End With
End Sub

Private Sub Worksheet_Deactivate()
Application.ScreenUpdating = False
With Worksheets("Zeiterfassung1")
.Unprotect
.Range("D9:D500").EntireRow.Hidden = False
.Protect
End With
End Sub

Nochmals vielen Dank und liebe Grüsse
Jvana
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
04.12.2020 11:47:26
Werner

285 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige