Tabelle füllen mit externer Datei

Hallo Rainer,

mich beeindruckt immer noch, wie man in so kurzer Zeit einen Code schreiben kann…

Habe es getestet, in dem ich auf einem Server in einem .yes file (das sind die , die synchronisiert werden sollen) zwei Zeilen zu einer gemacht habe:
„1231xx3lbff1j“,„14:36:53“,„01/05/06“,„MER10025Q0S3J“,„13:35:22“,„07/16/08“
Aber das Programm synchronisiert jetzt und schreibt auf allen 4 Servern dieses .yes file mit meiner Testzeile, also zwei Zeilen in einer.

Sorry ich halte Dich auf, ich weiß, aber ohne Dich schaffe ich es nicht!

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gerd,

Habe es getestet, in dem ich auf einem Server in einem .yes
file (das sind die , die synchronisiert werden sollen) zwei
Zeilen zu einer gemacht habe:
„1231xx3lbff1j“,„14:36:53“,„01/05/06“,„MER10025Q0S3J“,„13:35:22“,„07/16/08“

Der String sieht jetzt aber anders aus.
Vorhin hast Du geschrieben:

„nig100hqp1j1j“,„12:58:55“,"01/17/08"„nfk100g8tt81j“,„14:15:06“,„01/17/08“

Da stehen in der Mitte zwei Anführungszeichen direkt hintereinander, der zeilenvorschub fehlt. Jetzt hast Du zum testen ein zusätzliches Komma eingefügt. Entweder war Deine Beschreibung vorhin falsch, oder Du hast jetzt mit Daten getestet, die so gar nicht vorkommen können.
Weil die erste Beschreibung logisch klingt, vermute ich, daß nur der Test fehlerhaft war. :smile:

Aber das Programm synchronisiert jetzt und schreibt auf allen
4 Servern dieses .yes file mit meiner Testzeile, also zwei
Zeilen in einer.

Ja, es wird nicht erkannt, daß da zwei datensätze sind.
das verhindert das zusätzliche Komma, der Code sucht nach zwei aufeinanderfolgende Anführungszeichen und die gibt es in dem String ja nicht.

Sorry ich halte Dich auf, ich weiß, aber ohne Dich schaffe ich
es nicht!

Schon OK. Wenn ich keine Zeit habe, merkst Du das ja daran, daß eine Antwort mal länger braucht.

Gruß Rainer

Hallo Rainer,

sorry aber ich bin schon total kirre, weiß gar nicht mehr wo oben und unten ist vor lauter Änderungen.

Du hast wie immer Recht, ohne Komma, weil das File ja einfach einen zweiten Datensatz zu einer Zeile anfügt, die schon einen hat.

Und es funktioniert…DANKE!!!

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Rainer,

ja ich weiß…ich schon wieder…
Also dein neuer Code ist echt prima, aber ein Problem gibt es noch.

Ich denke der Repair ist das Problem, weil wir jetzt dort wo ein Datensatz nur einmal vorkommen sollte, er zweimal vorkommt (aber nicht immer!). Der Repair müsste vielleicht vor dem Distinct auf die Hostnamen kommen?

Ich teste noch etwas um Dir das Problem besser zu beschreiben.

Danke & Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Gerd,

Also dein neuer Code ist echt prima, aber ein Problem gibt es
noch.

Ich denke der Repair ist das Problem, weil wir jetzt dort wo
ein Datensatz nur einmal vorkommen sollte, er zweimal vorkommt
(aber nicht immer!). Der Repair müsste vielleicht vor dem
Distinct auf die Hostnamen kommen?

Stopp!!! Der Code besteht aus zwei Teilen, die praktisch nichts miteinamder zu tun haben.

1.) Lesen der Dateien von den Servern, die die Namen enthalten.
Die werden in Felder zerlegt, in eine Datenbank gepackt, mit Distinct gefiltert … und liefern eine Liste mit Dateien, die im zweiten Teil zu lesen sind.

2.) Die Dateien werden anhand der Liste aus dem ersten Teil gelesen, und zwar von allen Servern. Diese Dateien werden nur in Zeilen zerlegt, nicht in Felder. Doppelt vorkommende Zeilen werden entfernt, dazu muss aber die Zeile wirklich vollkommen identisch sein. Ich habe ja jetz Beispielzeilen gesehen. Wenn da z.B. verschiedene Felder identisch sind, aber die Zeit, die auch in einem Feld vorkommt, abweicht, ist die Zeile nicht mehr identisch, beide Zeilen bleiben stehen.

Wenn eine Zeile schon dann entfernt werden soll, wenn nur der Inhalt eines Feldes mit einer anderen Zeile übereinstimmt, dann musst Du das sagen, auch welche entfernt werden soll, die Jüngere oder die Ältere?

Gruß Rainer

Hallo Rainer,

und wieder hast du Recht! Es war nicht der letzte Code von Dir, der macht einen prima Job und ALLES richtig.

Es liegt irgendwo anders dran…

Die 3 Daten die in der Zeile stehen haben folgendes Format:

„nfk100g8n7h1j“,„14:12:09“,„12/14/07“

Im Moment löscht das Program alles was doppelt (im .yes File) vorkommt und IDENTISCH ist, wenn ich aber die Zeile kopiere und das Datum am Ende z.B ändere, bleiben beide erhalten.

Beispiel:
„nfk100g8n7h1j“,„14:12:09“,„12/14/07“
„nfk100g8n7h1j“,„14:12:09“,„12/14/06“

Es soll aber nur der der Datensatz mit dem aktuellen Datum erhalten bleiben, wobei der Distict auf den ersten Wert (nfk100g8n7h1j)gelegt ist.

Sorry hat so lange gedauert weil ich alles testen musste und auch sorry für die vielen kleinen Änderungen, aber die vielen kleinen Dinge die zu beachten sind machen die Sache so kompliziert.

Hast du irgendwie mein Problem verstanden, oder soll ich versuchen es besser zu beschreiben? Hab den Text jetzt selber mal durchgelesen und auf die Entfernung ist es mir eh ein Rätsel wie du mich verstehst :smile:

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Gerd,

Hast du irgendwie mein Problem verstanden, oder soll ich
versuchen es besser zu beschreiben?

nein, alles klar. Die Änderung dauert nun aber doch etwas länger. Ich muss erst den Datensatz in seine drei Felder zerlegen, wenn Feld1 bei den Datensätzen übereinstimmt, muss ich aus den anderen beiden Felden jeweils ein Feld machen, das Datum und Zeit enthält. Damit kann ich dann rechnen, die Zeitdifferenz bilden und entscheiden, welcher Datensatz erhalten bleibt, welcher gelöscht wird.

Damit das auch läuft, muss ich mir jetzt erst mal Dateien mit Testdaten aufbauen, um etwas testen zu können. Nicht, daß ich Plus und Minus verwechsle und den falschen Datensatz verwerfe. 10 bis 15 neue Zeilen kommen dadurch schon hinzu, das muss ich testen, sonst brauchen wir wieder eine Woche, bis wir alle meine Tippfehler beseitigt haben. :smile:

Für die Zigarrettenpause im Büro ist das zu viel, ich muss Dich auf heute Abend vertrösten, hoffentlich schlafe ich nicht vorher ein. Ich verspreche mal noch keinen Termin.

Gruß Rainer

Hallo Gerd,

ich habe die Prozedur ‚Clean‘ geändert, das sieht schon recht ‚abenteuerlich‘ aus. :smile:

Aber das funktioniert, Du musst nur diese eine Prozedur ersetzen.

Zur Abwechslung ist der Code sogar auch mal getestet, funktioniert.

Gruß Rainer

Private Sub Clean()
 Dim i As Long, n As Long, Zl As String, T1 As String, t2 As String
 Dim Tmp() As String, Dt1 As String, Dt2 As String, Pos1 As Integer, Pos2 As Integer
 Dim Ja As String, Mo As String, Ta As String
 ReDim Tmp(UBound(Feld))
 For i = LBound(Feld) To UBound(Feld)
 T1 = ""
 If Len(Zl) \> 2 Then
 T1 = Left(Zl, InStr(2, Zl, """"))
 End If
 If Len(Feld(i)) \> 2 Then
 t2 = Left(Feld(i), InStr(2, Feld(i), """"))
 If T1 t2 Then
 Tmp(n) = Feld(i)
 n = n + 1
 Zl = Feld(i)
 Else
 Pos1 = InStr(2, Zl, ",")
 Pos1 = InStr(Pos1, Zl, """")
 Pos2 = InStr(Pos1 + 1, Zl, """")
 Dt1 = Mid(Zl, Pos1 + 1, Pos2 - Pos1 - 1)
 Pos1 = Pos2 + 3
 Pos2 = Len(Zl)
 Mo = Mid(Zl, Pos1, 2)
 Ta = Mid(Zl, Pos1 + 3, 2)
 Ja = "20" + Mid(Zl, Pos1 + 6, 2)
 Dt1 = Ta + "." + Mo + "." + Ja + " " + Dt1
 Pos1 = InStr(2, Feld(i), ",")
 Pos1 = InStr(Pos1, Feld(i), """")
 Pos2 = InStr(Pos1 + 1, Feld(i), """")
 Dt2 = Mid(Feld(i), Pos1 + 1, Pos2 - Pos1 - 1)
 Pos1 = Pos2 + 3
 Pos2 = Len(Feld(i))
 Mo = Mid(Feld(i), Pos1, 2)
 Ta = Mid(Feld(i), Pos1 + 3, 2)
 Ja = "20" + Mid(Feld(i), Pos1 + 6, 2)
 Dt2 = Ta + "." + Mo + "." + Ja + " " + Dt2
 If Sgn(DateDiff("n", Dt2, Dt1)) 

Hallo Rainer,

das mit dem Code ist mir ja schon ein Rätsel, aber das du auch immer noch verstehst was ich schreibe, übertrifft alle :smile:

Danke für die tolle Hilfe!

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Guten Morgen, Rainer!

Mal eben den Code umschreiben, verstehe…ist ja sonst nix dabei, wie Beschweiden du doch bist :smile:

Wahnsinn, es scheint auch irgendwie zu laufen, bleibt aber bei:
If Sgn(DateDiff(„n“, Dt2, Dt1)) [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Guten Morgen Gerd,

Du hast mir ja Beispieldatensätze gegeben, da steht ja:

„Kennung“,„Zeit“,„Datum“

Um Kennung müssen wir uns nicht kümmern, dann setze ich für Zeit und Datum mal Zahlen ein.

„Kennung“,„08:21:00“,„07/24/08“

Daraus muss ich „24.07.2008 08:21:00“ zusammensetzen.

Wenn die Zahlen in den Datensätzen von einem Programm geschrieben würden, würde das Format auch immer passen. Offensichtlich steht da aber irgendwo ein Datum wie: „07/-4/08“ und wenn ich das neu zusammensetze, ergibt das Unfug.

In die Zeile vor der Berechnung der Zeitdifferenz (Datediff) muss dann also noch …

If IsDate(dt1) and IsDate(dt2) Then

und irgendwo weiter hinten ein Endif.

Das vermeidet aber noch nicht, daß Datensätze mit einem defekten Datum erhalten bleiben … Das muss ich noch mal umbauen. :smile:

Das wird wieder etwas dauern …

Gruß Rainer

Hallo Rainer,

hab den Datensatz gefunden…
„nfk10059y0n3j“,„15:12:10“,„20/8-/21“

Warum er so aussieht weiß ich auch nicht, das wird so „geliefert“.
Meinst du wir können solche Dinge abfangen? Das Problem kann wenn überhaupt nur im Datum und/oder Zeit vorkommen.

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gerd,

umgebaut. Der Code prüft jetzt erst, ob bei Zeit und Datum etwas sinnvolles steht. Das Datum wird als „MM/DD/YY“ interpretiert, anders hat das Beispiel keinen Sinn ergeben.

Wenn ich nichts falsch gemacht habe, wird auch geprüft, ob das Datum in der Zukunft liegt und das ebenfalls verworfen.

Wenn gar nichts mehr kopiert wird, habe ich mich an der Stelle geirrt, denn ich habe den Code mal wieder nicht getestet. :smile:

Dann schreib die Zeile

If IsDate(Dt2) And Sgn(DateDiff(„n“, Dt2, Now)) = 1 Then

mal um

If IsDate(Dt2) And Sgn(DateDiff(„n“, Now, Dt2)) = 1 Then

Das verwechsle ich oft.
Erklärung: Berchne die Zeitdifferenz in Minuten („n“) zwischen Jetzt (Now) und dem Datum Dt2 (Now - Dt2, wenn ich nicht irre), ermittle davon das Vorzeichen (Sgn - Signum) und wenn das 1 ist darfst Du den datensatz verarbeiten.

Der alte Datensatz, der inzwischen in ‚Zl‘ steht, ist ja schon geprüft.

Versuch mal … :smile:

Gruß Rainer

Private Sub Clean()
 Dim i As Long, n As Long, Zl As String, T1 As String, t2 As String
 Dim Tmp() As String, Dt1 As String, Dt2 As String, Pos1 As Integer, Pos2 As Integer
 Dim Ja As String, Mo As String, Ta As String
 ReDim Tmp(UBound(Feld))
 For i = LBound(Feld) To UBound(Feld)
 T1 = ""
 If Len(Zl) \> 2 Then
 T1 = Left(Zl, InStr(2, Zl, """"))
 End If
 If Len(Feld(i)) \> 2 Then
 t2 = Left(Feld(i), InStr(2, Feld(i), """"))
 Pos1 = InStr(2, Feld(i), ",")
 Pos1 = InStr(Pos1, Feld(i), """")
 Pos2 = InStr(Pos1 + 1, Feld(i), """")
 Dt2 = Mid(Feld(i), Pos1 + 1, Pos2 - Pos1 - 1)
 Pos1 = Pos2 + 3
 Pos2 = Len(Feld(i))
 Mo = Mid(Feld(i), Pos1, 2)
 Ta = Mid(Feld(i), Pos1 + 3, 2)
 Ja = "20" + Mid(Feld(i), Pos1 + 6, 2)
 Dt2 = Ta + "." + Mo + "." + Ja + " " + Dt2
 If IsDate(Dt2) And Sgn(DateDiff("n", Dt2, Now)) = 1 Then
 If T1 t2 Then
 Tmp(n) = Feld(i)
 n = n + 1
 Zl = Feld(i)
 Else
 Pos1 = InStr(2, Zl, ",")
 Pos1 = InStr(Pos1, Zl, """")
 Pos2 = InStr(Pos1 + 1, Zl, """")
 Dt1 = Mid(Zl, Pos1 + 1, Pos2 - Pos1 - 1)
 Pos1 = Pos2 + 3
 Pos2 = Len(Zl)
 Mo = Mid(Zl, Pos1, 2)
 Ta = Mid(Zl, Pos1 + 3, 2)
 Ja = "20" + Mid(Zl, Pos1 + 6, 2)
 Dt1 = Ta + "." + Mo + "." + Ja + " " + Dt1
 If Sgn(DateDiff("n", Dt2, Dt1)) 

Hi Gerd,

hab den Datensatz gefunden…
„nfk10059y0n3j“,„15:12:10“,„20/8-/21“

Warum er so aussieht weiß ich auch nicht, das wird so
„geliefert“.
Meinst du wir können solche Dinge abfangen? Das Problem kann
wenn überhaupt nur im Datum und/oder Zeit vorkommen.

Ja, mit ‚IsDate‘ kann ich prüfen, ob das zusammengesetzte Datum einen Sinn ergibt. Der 31.02.2008 kann dann auch nicht verarbeitet werden. :smile:
Ein Datum aus der Zukunft wie 23.07.2012 habe ich auch als falsch angesehen, der Datensatz wird verworfen.

Gruß Rainer

Hallo Rainer,

ich musste die Zeile:
If IsDate(Dt2) And Sgn(DateDiff(„n“, Now, Dt2)) = 1 Then
benutzen, da der Fehler blieb, aber nun bleibt er bei:
ReDim Feld(n - 1) mit der Meldung:
„Index ausserhalb des gültigen Bereichs“ stehen.
n ist in diesem Fall 0 (null), das konnte ich auslesen.

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

If IsDate(Dt2) And Sgn(DateDiff(„n“, Now, Dt2)) = 1 Then
benutzen, da der Fehler blieb,

hmmm. Dann habe ich etwas anderes falsch gemacht, denn …

aber nun bleibt er bei:
ReDim Feld(n - 1) mit der Meldung:
„Index ausserhalb des gültigen Bereichs“ stehen.
n ist in diesem Fall 0 (null), das konnte ich auslesen.

… das bedeutet, daß kein Datensatz kopiert wurde, alle verworfen wurden. Der Zähler für die kopierten Datensätze ist Null, nichts wurde kopiert. Da muss auch noch eine Prüfung hin, daß das Programm die Arbeit einstellt, wenn nichts gefunden wird, statt abzustürzen.

Wichtig ist erst mal: Die andere Zeile war die richtige.
Warum die nicht tut, was sie sollte muss ich erst herausfinden, mir mal wieder einen Test zusammenbauen.

Poste doch noch mal den gesamten Code, wie Du ihn jetzt hast, nicht daß Fehler entstehen, weil ich an einem anderen Code bastle als Du.

Gruß Rainer

Hallo Rainer,

das kann ich verstehen, wunder mich wie gesagt schon die ganze Zeit wie du den Überblick behälst :smile:

Private Declare Function PathFileExists Lib „shlwapi.dll“ Alias „PathFileExistsA“ (ByVal pszPath As String) As Long

Dim objRS As ADODB.Recordset
Dim objConnection As ADODB.Connection
Dim Feld() As String
Dim Pfd() As String

Private Sub Start_Click()
Dim i As Integer

e = Forms!SDS!Ex1 'Textfeld für Exception
d = Forms!SDS!Ex2 'Textfeld für Exception
r = Forms!SDS!Ex3 'Textfeld für Exception

If IsNull(Me.Ex1) Then 'Geprüft ob Textfeld null is
e = leer
End If

If IsNull(Me.Ex2) Then 'Geprüft ob Textfeld null is
d = leer
End If

If IsNull(Me.Ex3) Then 'Geprüft ob Textfeld null is
r = leer
End If

OpenDB
strSQL = „SELECT [Sds-task].* FROM [Sds-task]“

OpenRS strSQL

Transfer „c:\server1\sds-task.lst“ 'Standort von .lst Datei
Transfer „c:\server2\sds-task.lst“
Transfer „c:\server3\sds-task.lst“
Transfer „c:\server4\sds-task.lst“

objRS.Close

strSQL = „SELECT DISTINCT [Sds-task].[SDS-Typ], [Sds-task].[SDS-Name], [Sds-task].[CDS-ID], [Sds-task].Datum From [Sds-task] WHERE ((([Sds-task].[SDS-Typ]) Like ‚allusers‘));“

OpenRS strSQL

objRS.MoveFirst
ReDim Pfd(i)
While objRS.EOF = False
If objRS(„SDS-Name“) e And objRS(„SDS-Name“) d And objRS(„SDS-Name“) r Then 'Exception von SDS-Load
ReDim Preserve Pfd(i)
Pfd(i) = objRS(„SDS-Name“)
i = i + 1
End If
objRS.MoveNext
Wend

objRS.Close
objConnection.Close

Sync
End Sub

Private Sub Transfer(ByVal Datei As String)
Dim ff As Integer, Zl As String
Dim Fld() As String, i As Integer

ff = FreeFile
Open Datei For Input As #ff
While Not EOF(ff)
Line Input #ff, Zl
Fld = Split(Zl, " „)
objRS.AddNew
For i = 0 To 3
objRS(i) = Replace(Fld(i), „““", „“)
Next
objRS.Update
Wend
Close #ff
End Sub

Private Sub OpenDB() ’ Öffnen der DB
Dim strSQL As String
Dim DB As String
DB = „c:\SDS.mdb“
Set objConnection = New ADODB.Connection
With objConnection
.CursorLocation = adUseClient
.Mode = adModeShareDenyNone
.Provider = „Microsoft.Jet.OLEDB.4.0“
.ConnectionString = DB
.Open
End With
End Sub

Private Sub OpenRS(ByVal strSQL As String) ’ Öffnen des Datensatzes
Set objRS = New ADODB.Recordset
With objRS
Set .ActiveConnection = objConnection
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Source = strSQL
Call .Open
End With
End Sub

Private Sub QuickSort(ByVal LB As Long, ByVal UB As Long)
Dim P1 As Long, P2 As Long, Ref As String, TEMP As String
P1 = LB
P2 = UB
Ref = Feld((P1 + P2) / 2)
Do
Do While (Feld(P1) Ref)
P2 = P2 - 1
Loop
If P1 P2)
If LB Zl Then
Tmp(n) = Feld(i)
n = n + 1
Zl = Feld(i)
End If
Next
ReDim Feld(n - 1)
For i = 0 To n - 1
Feld(i) = Tmp(i)
Next
End Sub
Private Sub Repair() 'Verhindert das zwei Datensätze in einer Zeile stehen beim .yes File
Dim i As Long, Pos As Integer, Zl As String
For i = LBound(Feld) To UBound(Feld)
Zl = Feld(i)
Pos = InStr(1, Feld(i), „“"""")
If Pos 0 Then
Feld(i) = Left(Zl, Pos)
ReDim Preserve Feld(UBound(Feld) + 1)
Feld(UBound(Feld)) = Right(Zl, Len(Zl) - Pos)
End If
Next
End Sub

Private Sub Sync() ’ Synchronisiert die .yes Files von den verschiedenen Servern
Dim Txt As String, Daten As String
Dim i As Integer, c As Integer, ff As Integer, l As Long
Dim Server(3) As String, Pfad As String, Pos As Integer
Server(0) = „c:\server1\Daten“ 'Standort von .yes Files
Server(1) = „c:\server2\Daten“
Server(2) = „c:\server3\Daten“
Server(3) = „c:\server4\Daten“
ff = FreeFile
For i = LBound(Pfd) To UBound(Pfd)
Daten = „“
For c = 0 To 3
Pfad = Server© + Pfd(i) + „.yes“
If PathFileExists(Pfad) Then
l = FileLen(Pfad)
Txt = Space(l)
Open Pfad For Binary As #ff
Get #ff, , Txt
Close #ff
Daten = Daten + Txt
End If
Next
If Trim(Daten) „“ Then
Feld = Split(Daten, vbCrLf)
Repair
QuickSort LBound(Feld), UBound(Feld)
Clean
Daten = Join(Feld, vbCrLf)
For c = 0 To 3
Pfad = Server© + Pfd(i) + „.yes“
Open Pfad For Output As #ff
Print #ff, Daten
Close #ff
Next
End If
Next
End Sub

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Gerd,

ein Problem habe ich entdeckt und eine Zeile in zwei zerlegt, jezt scheint der Code zu laufen.

Ich habe ein Testprogramm gebaut und mit folgenden Daten getestet:

"nfk100g9n7h1j","14:12:09","-2/14/06"
"nfk100g8n7h1j","14:12:09","12/14/07"
"nfk100g8n7h1j","14:12:09","12/15/07"
"nfk100g8n7h1j","14:13:09","12/14/17"
"nfk100g8n7h1j","14:12:09","12/-4/08"

Die Dtaensätze mit dem Minus werden ignoriert, nicht mit kopiert.
Der Datensatz mit dem Jahr 17 wird ebenfalls ignoriert.
Übrig bleibt nur die Zeile:
„nfk100g8n7h1j“,„14:12:09“,„12/15/07“

Und das ist richtig so.

Müsste klappen. :smile:

Gruß Rainer

Private Sub Clean()
 Dim i As Long, n As Long, Zl As String, T1 As String, t2 As String
 Dim Tmp() As String, Dt1 As String, Dt2 As String, Pos1 As Integer, Pos2 As Integer
 Dim Ja As String, Mo As String, Ta As String
 ReDim Tmp(UBound(Feld))
 For i = LBound(Feld) To UBound(Feld)
 T1 = ""
 If Len(Zl) \> 2 Then
 T1 = Left(Zl, InStr(2, Zl, """"))
 End If
 If Len(Feld(i)) \> 2 Then
 t2 = Left(Feld(i), InStr(2, Feld(i), """"))
 Pos1 = InStr(2, Feld(i), ",")
 Pos1 = InStr(Pos1, Feld(i), """")
 Pos2 = InStr(Pos1 + 1, Feld(i), """")
 Dt2 = Mid(Feld(i), Pos1 + 1, Pos2 - Pos1 - 1)
 Pos1 = Pos2 + 3
 Pos2 = Len(Feld(i))
 Mo = Mid(Feld(i), Pos1, 2)
 Ta = Mid(Feld(i), Pos1 + 3, 2)
 Ja = "20" + Mid(Feld(i), Pos1 + 6, 2)
 Dt2 = Ta + "." + Mo + "." + Ja + " " + Dt2
 If IsDate(Dt2) Then
 If Sgn(DateDiff("n", Dt2, Now)) = 1 Then
 If T1 t2 Then
 Tmp(n) = Feld(i)
 n = n + 1
 Zl = Feld(i)
 Else
 Pos1 = InStr(2, Zl, ",")
 Pos1 = InStr(Pos1, Zl, """")
 Pos2 = InStr(Pos1 + 1, Zl, """")
 Dt1 = Mid(Zl, Pos1 + 1, Pos2 - Pos1 - 1)
 Pos1 = Pos2 + 3
 Pos2 = Len(Zl)
 Mo = Mid(Zl, Pos1, 2)
 Ta = Mid(Zl, Pos1 + 3, 2)
 Ja = "20" + Mid(Zl, Pos1 + 6, 2)
 Dt1 = Ta + "." + Mo + "." + Ja + " " + Dt1
 If Sgn(DateDiff("n", Dt2, Dt1)) 

Hallo Rainer,

es klappt auch! Super gemacht, wir verlieren zwar jetzt einen Datensatz, aber wenn es nicht anders geht ist es OK.

Teste jetzt nochmal alles durch.

DANKE Dir!!!

Gruss Gerd

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Gerd,

es klappt auch! Super gemacht, wir verlieren zwar jetzt einen
Datensatz, aber wenn es nicht anders geht ist es OK.

Wenn durch ein falsches Zeichen eine Information verloren ist, hilft raten nicht viel, da könnte dann alles Mögliche gestanden haben.

Wenn keine falschen Daten geschrieben werden, gehen ja auch keine verloren. Das Problem verursacht also der Lieferant der Daten, nicht Dein Programm. Zaubern können wir eben auch nicht. :smile:

Gruß Rainer