LO Hilfe - LO Basic - ''Mid ''- Beispiel '' ExampleUSDate'' fehlerhaft

Hallo,

das Beispiel "ExampleUSDate" für "Mid" soll wohl "MM-DD-YYYY" umwandeln in "DD/MM/YYY", erzeugt aber "-Y/YY/MM-D".

Gruß
Hans-Werner

[0] LO 5.3.4.1 (x64) @ Windows 7 Home Premium (x64)

[1] Fehlerhaftes (Original-) Makro

Sub ExampleUSDate
Dim sInput As String
Dim sUS_date As String
sInput = InputBox("Geben Sie bitte ein Datum im englischen Format MM-DD-YYYY ein")
sUS_date = Mid(sInput, 6, 2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Right(sInput, 2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Left(sInput, 4)
MsgBox sUS_date
End Sub

[2] Korrigiertes Makro

Sub ExampleUSDate_KORRIGIERT
Dim sInput As String
Dim sUS_date As String
sInput = InputBox("Geben Sie bitte ein Datum im englischen Format MM-DD-YYYY ein")
sUS_date = Mid(sInput, 4, 2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Left(sInput, 2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Right(sInput, 4)
MsgBox sUS_date
End Sub

Hallo Hans-Werner,

da ist die deutsche Hilfe nicht konsistent mit der englischsprachigen Fassung. Dort steht im Code
"Please input a date in the international format 'YYYY-MM-DD'".
In der deutschen Fassung steht aber eine ganz andere Formatdarstellung:
"Geben Sie bitte ein Datum im englischen Format MM-DD-YYYY ein".
Deine Korrektur am Programm ist wahrscheinlich richtig, auch wenn ich sie nur oberflächlich angeschaut habe, aber der wahre Fehler liegt eher in der falschen Formatbeschreibung im deutschen Makro, denn mit dem Format laut englischsprachigem Makro funktioniert das offenbar (Testen trotzdem empfehlenswert, ich habe es nämlich nicht probiert). Das Beispiel ist ja auch nicht schlecht, es ist eine - und dann auch für Deutschland benötigte - Version der leider häufiger notwendigen Umwandlungen in nationale Datumsformate aus der - z.B. in Datenbanken ziemlich universell verwendeten - Darstellung laut der international normierten Norm (ISO 8601). Die Norm ist ja gerade wegen der lokalen Schreibweisen für die EDV unumgänglich. (Und bei Überweisungsbelegen funktioniert sie, das habe ich schon vor Jahren getestet.) Und das Beispiel enthält ja die gleichen Befehle wie dein korrigiertes Beispiel, also ist es für ein Beispiel genauso gut.
Meine Empfehlung ist daher: einfach den Text der Inputbox an den englischen Text anpassen, dadurch ist in der beschriebenen Funktionalität nichts geändert.
Ich habe momentan nicht parat, an welche Liste man das am besten schicken sollte, vielleicht liest jemand mit, der das veranlasst.

Gruß

Geerhard

Hallo Gerhard,

danke für Dein Feedback. Dein Hinweis auf den englisch-sprachigen Eingabe-Anforderungstext bringt "Licht ins "Dunkel":

[1] ORIGINAL - LO [ENG]: Wandelt YYYY-MM-DD (internationales Format) in MM-DD-YYYY (US Format) um.

Sub ExampleUSDate
Dim sInput As String
Dim sUS_date As String
sInput = InputBox("Please input a date in the international format YYYY-MM-DD:")
sUS_date = Mid(sInput,6,2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Right(sInput,2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Left(sInput,4)
MsgBox sUS_date
End Sub

[1.1] Mid(sInput,6,2): Nimm ab dem 6. Zeichen 2 Zeichen => MM
[1.2] Right(sInput,2): Nimm 2 Zeichen von rechts => DD
[1.3] Left(sInput,4): Nimm 4 Zeichen von links: => YYYY

[2] ORIGINAL - LO [DEU]: Erzeugt Quatsch, da die Eingabeaufforderung ein falsches Datumsformat anfordert:

Sub ExampleUSDate
Dim sInput As String
Dim sUS_date As String
sInput = InputBox("Geben Sie bitte ein Datum im englischen Format MM-DD-YYYY ein:")
sUS_date = Mid(sInput,6,2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Right(sInput,2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Left(sInput,4)
MsgBox sUS_date
End Sub

[2.1] Mid(sInput,6,2): Nimm ab dem 6. Zeichen 2 Zeichen => -Y
[2.2] Right(sInput,2): Nimm 2 Zeichen von rechts => YY
[2.3] Left(sInput,4): Nimm 4 Zeichen von links: => MM-D

[3] KORRIGIERT - LO [DEU]: Wandelt YYYY-MM-DD (internationales Format) in MM/DD/YYYY (US Format) um.

Sub ExampleUSDate
Dim sInput As String
Dim sUS_date As String
sInput = InputBox("Geben Sie bitte ein Datum im internationalen Format YYYY-MM-DD ein:")
sUS_date = Mid(sInput, 6, 2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Right(sInput, 2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Left(sInput, 4)
MsgBox sUS_date
End Sub

[3.1] Mid(sInput,6,2): Nimm ab dem 6. Zeichen 2 Zeichen => MM
[3.2] Right(sInput, 2): Nimm 2 Zeichen von rechts => DD
[3.3] Left(sInput, 4): Nimm 4 Zeichen von links: => YYYY

Die einfachste Lösung ist sicherlich, wie von Dir vorgeschlagen, den deutschen Eingabetext zu korrigieren.

Mein Vorschlag wäre, zusätzlich die "InputBox"-Anzeige um die Information "YYYY-MM-DD (Datum international) => MM/DD/YYYY (Datum US)" zu ergänzen, da vielleicht nicht jeder weiß, wie das Format des "USDate" ausschaut und dann vielleicht irritiert ist, wenn "MM/DD/YYYY" ausgegeben wird.

[4] Ergänzte "InputBox"-Anzeige

[4.1] VORSCHLAG - LO [ENG]: Wandelt YYYY-MM-DD (internationales Format) in MM/DD/YYYY (US Format) um.

Sub ExampleUSDate
Dim sInput As String
Dim sUS_date As String
sInput = InputBox("Please input a date in the international format YYYY-MM-DD:",_
"YYYY-MM-DD (date international) => MM/DD/YYYY (date US)")
sUS_date = Mid(sInput,6,2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Right(sInput,2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Left(sInput,4)
MsgBox sUS_date
End Sub

[4.1] VORSCHLAG - LO [DEU]: Wandelt YYYY-MM-DD (internationales Format) in MM/DD/YYYY (US Format) um.

Sub ExampleUSDate
Dim sInput As String
Dim sUS_date As String
sInput = InputBox("Geben Sie bitte ein Datum im internationalen Format YYYY-MM-DD ein:",_
"YYYY-MM-DD (Datum international) => MM/DD/YYYY (Datum US)")
sUS_date = Mid(sInput,6,2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Right(sInput,2)
sUS_date = sUS_date & "/"
sUS_date = sUS_date & Left(sInput,4)
MsgBox sUS_date
End Sub

An welche "Liste" man das senden sollte, weiß ich auch nicht - "BugReport" sicherlich nicht. So hoffe ich auch, das dies von jemandem mitgelesen wird, der weiß, wer diesbezüglich informiert werden sollte - oder es vielleicht sogar gleich selbst "in die Wege leitet".

Gruß
Hans-Werner

------ Originalnachricht ------