Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1628to1632
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

Datum in Tabellenspalte finden

Datum in Tabellenspalte finden
19.06.2018 09:13:25
Jonas
Hallo ihr habt mir jetzt schon so oft so gut weitergeholfen, dass ich hoffe ihr könnt mir auch dabei helfen ;)
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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datum in Tabellenspalte finden
19.06.2018 17:01:35
Robert
Hallo Jonas,
vielleicht klappt folgende Ergänzung Deines Makro. Am Anfang nachstehende Zeilen einfügen bzw. die For-Schleife wie folgt ändern.
Der Code prüft die Spalte E von der Zeile 2 (ggfs. die For-Schleife ändern) bis zur letzten befüllten Zelle in der Spalte E, ob in der entsprechenden Zelle ein Datum steht, das genau einen Tag vor dem Speicherdatum der aktuellen Datei liegt. Ist dies der Fall, wird ab dieser Zelle Dein Makro ausgeführt. Wird kein entsprechendes Datum gefunden, wird das Makro nach einer entsprechenden Meldung abgebrochen.
Dim eZ As Long, SuchDatum As Date
'Speicherdatum auslesen, einen Tag vorher in Variable schreiben
SuchDatum = DateAdd("d", -1, DateValue(ActiveWorkbook.BuiltinDocumentProperties(12)))
'Spalte E ab E2 prüfen, ob Datum gleich Suchdatum ist
For eZ = 2 To Range("E" & Rows.Count).End(xlUp).Row
If DateValue(Range("E" & eZ)) = SuchDatum Then Exit For
Next
'Wenn kein Suchdatum gefunden, abbrechen
If eZ > Range("E" & Rows.Count).End(xlUp).Row Then
MsgBox "Keine Zelle mit dem gesuchten Datum (" & Format(SuchDatum, "dd.mm.yyyy") & " = eine  _
Tag vor Speicherdatum der Datei) gefunden.", vbCritical, "Keine Zelle gefunden"
Exit Sub
End If
lZ = wksSchichtNeu.Range("A" & Rows.Count).End(xlUp).Row 'Erfassen des Bereichs in AccessDaten
'For Schleife beginnt jetzt in der Zeile mit dem ´gefundenen Datum
For Each cl In wksSchichtNeu.Range("A" & eZ & ":A" & lZ).Cells 'Für jedes Element im Range von  _
AeZ bis IZ
'... ab hier Dein Makro weiter
Gruß
Robert
Anzeige
AW: Datum in Tabellenspalte finden
20.06.2018 09:33:40
Jonas
Hey Robert, also ich hab das angefügt und er läuft das Makro durch aber vergleicht das Datum nicht richtig. Er liest es zwar richtig aus und speichert es in "SuchDatum", jedoch erfolgt der Abgleich anscheindend nicht und er nimmt alle Zeilen, egal welches Datum drin steht
AW: Datum in Tabellenspalte finden
20.06.2018 12:05:18
Jonas
Hallo Robert ich bins noch mal. Bin jetzt selbst zu einer etwas anderen Lösung gekommen:
DatumAktuell = Format(FileDateTime("P:\500_Production\Production_Capacity\Anwesenheit_neu\ _
Anwesenheit_XWB_test.xlsb"), "dd.mm.yyyy")
lZ = wksAnwesenheitsänderungen.Range("A" & Rows.Count).End(xlUp).Row 'Erfassen des Bereichs in " _
AccessDaten"
For a = 1 To lZ
If wksAnwesenheitsänderungen.Cells(a, 5) > DatumAktuell - 2 Then
cl = wksAnwesenheitsänderungen.Cells(a, 1)
wksAnwesenheitsänderungen.Range("A2:A" & lZ).Cells
lPersNr = Application.Match(cl, wksAnwesenheit.Range("C8:C22"), 0)'Suchen nach der  _
Personalnummer in "Anwesenheit"
iDat = Application.Match(wksAnwesenheitsänderungen.Cells(a, 3), 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 (wksAnwesenheitsänderungen.Cells(a, 2)  "KM") And ( _
wksAnwesenheitsänderungen.Cells(a, 2)  "KO") _
Or Weekday(iDat, 2) = 6 And (wksAnwesenheitsänderungen.Cells(a, 2)  "KM") And ( _
wksAnwesenheitsänderungen.Cells(a, 2)  "KO") And (wksAnwesenheitsänderungen.Cells(a, 2)  "S") And (wksAnwesenheitsänderungen.Cells(a, 2)  "F") And (wksAnwesenheitsänderungen.Cells(a, 2)  "E") And (wksAnwesenheitsänderungen.Cells(a, 2)  "N") _
Or Arbeitstag(wksAnwesenheit.Cells(5, iDat)) = 0 Then
wksAnwesenheit.Cells(lPersNr, iDat) = ""
iDat = iDat + 1
Else
wksAnwesenheit.Cells(lPersNr, iDat) = wksAnwesenheitsänderungen.Cells(a, 2)
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 wksAnwesenheitsänderungen.Cells(a, 4) >= wksAnwesenheit.Cells(5, iDat)
End If
Next a

Anzeige
AW: Datum in Tabellenspalte finden
20.06.2018 12:06:36
Jonas
Vielen Dank für deine Hilfsbereitschaft!!

193 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige