Text in Datum umwandeln? Access?

Hallo, ich habe in einem Memo-Feld Datumsangaben wie 18 Mar 2018 oder 15 Jan 2018. Leider sind diese importierten Daten im String-Format. Kann man diese mittels einer Funktion einerseits extrahieren und andererseits in ein normales Datumsformat umwandeln? Vielen Dank für jede Hilfe.

Hallo,

hast Du meinen letzten Post nicht gelesen??? Dort ist doch diese Konvertierung eingebaut…

Gruß
Franz
DF6GL

Hallo,

das mit dem „string parsing“ hatten wir ja schon.

Für Datumswerte gibt es die Funktion CDate(varStr).

Vor Verwendung von CDate sollte man immer mittels IsDate(varStr) prüfen ob die Zeichenfolge auch konvertiert werden kann, ansonsten läuft die Funktion CDate auf einen Fehler.

Aber… idF „18 Mar 2018“ kann damit nicht konvertiert werden, „18 März 2018“ würde aber funktionieren. Das bedeutet du musst den String selbst zerlegen, entsprechend neu zusammensetzen und dann CDate darauf loslassen.,

Noch eine Anmerkung: Alle Funktionen wie CDate, IsDate, DateAdd, DateDiff etc. sind abhängig von den Datums- / Ländereinstellungen des Windows Systems. z.B. „6-8-2018“ auf einem US System ist nicht das gleiche als auf einem DE System.

Tschau
Peter

Hallo Peter
Vielen Dank für Deine Hilfe.
Inhaltlich habe ich es verstanden. Aber wie man den String erst zerlegt und dann wieder zusammenfügt, damit habe ich meine leidliche Mühe. Bitte entschuldige; ich bin halt nicht auf „Deinem“ oder „Eurem“ Accesss-Niveau. Aber ich finde es sehr nett, wenn Du und andere sich mir mir „abmühen“. Herzliche Grüsse aus Koh Samui. Und wenn Du hier mal in meinem kleinen Hotel verweilen willst, dann hast Du Dir garantiert einen Sonderrabatt „eingehandelt“.
Tschüüs
Thomas

Hallo Franz
Vielen Dank für Deine Hilfe.
Ich weiss, Du hast Dir mit dem ausführlichen Code sehr viel Mühe gegeben.
Ich denke, dass mein Problem darin besteht, dass ich den Code inhaltlich nur wenig nachvollziehen kann.
Und vermutlich gelingt es mir deshalb nicht, den Code an meine Software exakt anzupassen.
Was habe ich gemacht:
a) Da mein Feld auf dem Form nicht sRemarks sondern Remarks heisst (und auch solchen Dateninhalt hat) habe ich im Code „sRemarks“ auf „Remarks“ geändert. Dann das ganze als Modul gespeichert.
b) Dann habe auf meinem Form eine Schaltfläche angebracht (neben dem Memofeld) und auf die Eigenschaft „Beim Klicken“ folgenden Code hinterlegt: MsgBox fktExtrValues(„Departure Date“).
c) alles gespeichert
d) Klick auf die Schaltfläche ergibt dann die Fehlermeldung:
„Fehler im Kompilieren. Argument nicht optional“.
Anmerkung: Keine Ahnung ob das eine Rolle spielt, aber ich habe ein 64 Bit Version auf meinem PC.
Und so kam ich halt einfach nicht weiter.

Falls Du mir wieder weiterhelfen möchtest und Du weitere Angaben benötigst, sag es mir einfach. Und ganz herzlichen Dank im Voraus.
Gegenleistung: Ich habe auf Koh Samui ein kleines Hotel. Wenn Du mal Lust hast hierhin zu kommen, mache ich Dir sein Super Preis. Versprochen. Aber bitte direkt kontaktieren. Vielen Dank + Tschüüüs

Thomas

Ich noch einmal.
Ich bin da irgendwie mangels besserem Wissen am Rumwursteln.
Manches funktioniert trotzallem, anderes nicht.
Es ist schlicht zu kompliziert für mein bescheidenes Fachwissen in VBA.
Gerne würde ich Dir mal meine MDB senden.
Und beschreiben, was ich im Ablauf genau mache und was die MDB leisten soll.
Wäre so was möglich? Ich denke, dann würdest Du besster verstehen können, was der Code eigentlich leisten sollte.
Sorry, für die vielen Fragen.
Liebe Grüsse
Thomas

Hallo,

ja, sorry, da habe ich eine „Kleinigkeit“ vergessen. Der Aufruf muss natürlich das Memofeld einschließen:

Die Funktion darf nicht verändert werden und sollte in einem Standard-Modul (Navi-Berich „Module“) stehen.

Msgbox fktExtrValues (Me!Remarks, „Departure Date“)
Msgbox fktExtrValues (Me!Remarks,„Booking ID“)

und für die Namen:

Msgbox fktExtrValues (Me!Remarks,„Vorname“)
Msgbox fktExtrValues (Me!Remarks,„Nachname“)

Du kannst mir auch die DB mal schicken: de ef sechs ge el ät ge em ix punkt de ee (sechs als Zahl)

Gruß
Franz
DF6GL

Hallo Thomas,

hier mal ein paar Zeilen Code, die dir vielleicht weiterhelfen könnten:

Dim sIn As String
Dim sArr() As String   ' Array für den zerlegten String
Dim dtOut As Date   ' für das Ergebnis
Dim sDate As String ' 
    
sIn = Trim("18 Mar 2018")

sArr = Split(sIn, " ")  ' im array sind jetzt die 3 Teile des Strings


   Select Case sArr(1)   ' schauen welchen Monat 
    Case "Jan"
      sArr(1) = 1
    Case "Feb"
      sArr(1) = 2
    Case "Mar"  
      sArr(1) = 3
   End Select    '... muss noch bis Dez erweitert werden

 sDate = sArr(0) & "-" & sArr(1) & "-" & sArr(2)  ' Datum nur Zahlen

 If IsDate(sDate) Then
    dtOut = CDate(sDate)
 End If

 MsgBox sIn & " Wird zu " & dtOut

Hope this helps

Tschau
Peter

> Function StringToDate(ByVal D$) '"18 Mar 2018"
>  Dim ARR, T%, M%, J&
>  ARR = Split(D, " ")
>  T = ARR(0)
>  J = ARR(2)
>  Select Case ARR(1)
>   Case "Jan": M = 1
>   Case "Feb": M = 2
>   Case "Mär", "Mar": M = 3
>   Case "Apr": M = 4
>   Case "Mai", "May": M = 5
>   Case "Jun": M = 6
>   Case "Jul": M = 7
>   Case "Aug": M = 8
>   Case "Sep": M = 9
>   Case "Okt", "Oct": M = 10
>   Case "Nov": M = 11
>   Case "Dez", "Dec": M = 12
>  End Select
>  StringToDate = DateSerial(J, M, T)
> End Function