Datum in Tabellenspalte finden
19.06.2018 09:13:25
Jonas
Ich brauche einen Code der in Spalte E eines Tabellenblatts nach einem Datum sucht und mit dem Zeitpunkt der letzten Speicherung des Dokuments vergleicht. Wird ein Datum gefunden welches ein Tag vor der letzten Speicherung liegt, soll ab dieser Zeile ein Makro beginnen (s. Code unten). Im Moment läuft das Makro die komplette Tabelle durch, was mir persönlich etwas zu lange dauert. Deswegen habe ich es um jene eben erwähnte Spalte erweitert und diese mit einem Datumsstempel versehen. Leider weiß ich nicht wie ich beibringen kann eben nicht die komplette Tabelle durchzugehen, sondern erst in der Zeile des beschriebenen Datums zu beginnen
lZ = wksSchichtNeu.Range("A" & Rows.Count).End(xlUp).Row 'Erfassen des Bereichs in "AccessDaten"
For Each cl In wksSchichtNeu.Range("A2:A" & lZ).Cells 'Für jedes Element im Range von A2 bis IZ
lPersNr = Application.Match(cl, wksAnwesenheit.Range("C1:C46"), 0) 'Suchen nach der Personalnummer in "Anwesenheit"
iDat = Application.Match(cl.Offset(0, 2), wksAnwesenheit.Range("5:5"), 0) 'aktuelle cl + 2 (Startdatum) und Datumszeile in "Anwesenheit" auf Übereinstimmung vergleichen
Do
'Überprüfung ob Datum ein Feiertag (Function Arbeitstag) oder ein Sonntag und ungleich "KM", "KO" ist-> Dann kein Eintrag vornehmen.
'Wenn Datum ein Samstag, dann keinen Eintrag wenn Schichtart ungleich "KM", "N", "S", "F", "E" und "KO" ist:
If Weekday(iDat, 2) = 7 And (cl.Offset(0, 1) <> "KM") And (cl.Offset(0, 1) <> "KO") Or Weekday(iDat, 2) = 6 And (cl.Offset(0, 1) <> "KM") _
And (cl.Offset(0, 1) <> "N") And (cl.Offset(0, 1) <> "S") And (cl.Offset(0, 1) <> "F") And (cl.Offset(0, 1) <> "E") _
And (cl.Offset(0, 1) <> "KO") Or Arbeitstag(wksAnwesenheit.Cells(5, iDat)) = 0 Then
wksAnwesenheit.Cells(lPersNr, iDat) = ""
iDat = iDat + 1
'Sonst Übertragung in entsprechende Zelle Übertragung der Schichtart aus Tabellenblatt "Anwesenheitsänderung"
Else
wksAnwesenheit.Cells(lPersNr, iDat) = cl.Offset(0, 1) 'Schicht aus "Anwesenheitsänderungen" wird in Zelle aus Zeile der Personalnummer und Spalte des Datums eingesetzt
iDat = iDat + 1 'Weiterrücken um eine Spalte in Zeile der aktuellen Personalnummer
End If
'Schleife wiederholen bis Enddatum aus AccessDaten größer oder gleich Zelle (5,idat) in Anwesenheit ist
Loop While cl.Offset(0, 3) >= wksAnwesenheit.Cells(5, iDat)
Next
Vielleicht hat ja einer von euch eine Idee.
LG Jonas