
Mein Unternehmen erstellt Berichtstools und eines der Exportformate ist Excel. Da unsere Kunden aus verschiedenen Ländern kommen, verwenden wir beim Generieren der Excel-Datei die Gebietsschemaformatierung, um die Daten mit dem folgenden Formatierer anzuzeigen:
[$-<locale here>]mmmm d, yyyy;@
Wenn die Zelle also das Datum 31.03.2020 hat und das Gebietsschema auf Irland eingestellt ist, wird es als 10. März 2020 angezeigt, aber wenn das Gebietsschema auf Spanien eingestellt ist, wird Marzo 10, 2020 angezeigt.
Wir haben einen Kundenbericht erhalten, dass es bei ihnen nicht funktionierte, da ihr Datum 31.03.2020 als 8. März 2020 angezeigt wurde
Bei näherer Betrachtung fiel mir auf, dass ihr Formatierer wie folgt aufgeführt war:
[$-,F]mmmm d, yyyy;@
Ich habe versucht herauszufinden, was Excel hier eigentlich zu analysieren versucht oder welchen Kalender oder Datumsformatierer es verwendet, um dieses falsche Datum anzuzeigen, aber es hat nichts gebracht. Wir müssen die Ortsangabe des Kunden offensichtlich besser identifizieren, aber ich frage mich, ob dies daran liegen könnte, dass der Kunde eine seltsame Ortsangabe auf seinem Computer hat oder einfach an einem falschen Code.
Dies geschah in Excel 2013, aber ich konnte es auch in Excel 365 reproduzieren. Ich habe auch versucht, einen Ländercode zu finden, der mit dem Hexadezimalwert F verknüpft war, aber nichts hat funktioniert. Wenn der ,
entfernt wird, identifiziert der Formatierer F als Code für Frankreich und zeigt die korrekte Datumsnummer auf Französisch an: 30. März 2020.
Antwort1
Soweit ich das beurteilen kann [$-,F]
, entspricht dies [$-F0000]
der Umrechnung des Datums in einen Mondkalender.
Ich wollte sehen, was all die anderen Buchstaben in der gleichen Situation darstellen, also schrieb ich Folgendes:
Sub formatdates()
Dim ws As Worksheet
Set ws = Sheet1
Dim i As Integer
i = 1
Do While i < 27
ws.Cells(i, 1) = "=TODAY"
ws.Cells(i, 1).NumberFormat = "[$-," & Chr(64 + i) & "]dddd, mmmm dd, yyyy"
ws.Cells(i, 2) = "[$-," & Chr(64 + i) & "]dddd, mmmm dd, yyyy"
ws.Cells(i, 3) = ws.Cells(i, 1).NumberFormat
i = i + 1
Loop
End Sub
Sie können das in jeder leeren Arbeitsmappe verwenden. Es wird das aktuelle Datum angezeigt, wobei jeder Buchstabe des römischen Alphabets als Formatcode verwendet wird, ähnlich wie das [$-,F] in Ihrem Beitrag. Ich bin sicher, es gibt noch mehr, aber diese waren aufschlussreich genug, um ein wenig nachzuforschen.
Zum Beispiel
- Mit [$-,F] erhalten Sie den Mondkalender, allerdings in englischer Sprache, sodass der fünfte Monat als Juni angezeigt wird.
- [$-,G] gibt Ihnen den indischen Zivilkalender (glaube ich)
- [$-,M] gibt Ihnen den persischen Kalender (glaube ich)
- [$-,N] gibt Ihnen den Hijri-Kalender
Ich nahm auch dieListe der Sprachcodesaus dem Link, den @DavidPostill in seinem Kommentar eingefügt hat (es gibtandere da draußen haben umfassendere Listenvon Ländercodes, die auch verwendet werden können, glaube ich).
Ich habe die Codetabelle aus dem Link im obigen Kommentar in Sheet2 eingefügt und dies so geschrieben, dass es an das Ende der mit der ersten Funktion oben erstellten Tabelle angehängt wird, nur aus Interesse.
Sub formatdates2()
Dim ws As Worksheet
Set ws = Sheet1
Dim i As Integer
Dim r As Integer
r = 1
i = 28
Do While Sheet2.Cells(r, 1) <> ""
ws.Cells(i, 1) = "=TODAY()"
ws.Cells(i, 1).NumberFormat = "[$-" & Sheet2.Cells(r, 1) & "]dddd, mmmm dd, yyyy"
ws.Cells(i, 2) = "[$-," & Sheet2.Cells(r, 1) & "]dddd, mmmm dd, yyyy"
ws.Cells(i, 3) = ws.Cells(i, 1).NumberFormat
ws.Cells(i, 4) = Sheet2.Cells(r, 2)
i = i + 1
r = r + 1
Loop
End Sub
Soweit ich das beurteilen kann, gibt es Sprachcodes (letztere Liste/Funktion) und Kalendercodes (erste Funktion).
Ich glaube, Sie suchen nach Sprachcodes.
Sie haben aber möglicherweise mehr Erfolg [$-x-sysdate]
, wenn Sie einfach verwenden. Dies ist der Code, der angezeigt wird, wenn ich im Dialogfeld „Zellen formatieren“ das gewünschte Format aus der Liste unter „Datum“ auswähle und es dann in der Liste „Benutzerdefiniert“ ansehe.