2016-08-04 2 views
1

Ich bin auf einem Windows 10 x 64-Rechner mit 64-Bit-Excel 2016 installiert.Datumseparatoren nicht richtig in 64-Bit Excel VBA

Ich habe Probleme mit den Daten, da sie nicht richtig funktionieren, ich habe regionale Einstellungen richtig eingestellt, aber VBA scheint nicht . als Datum Trennzeichen richtig zu erkennen, es verwendet nur -. Wenn ich dies mit einem Windows 7 x64-Rechner mit 32-Bit-Excel 2010-Installation vergleiche, funktioniert es so, wie es sollte.

Im Bild unten können Sie das falsche Verhalten sehen:

VBA behavior

Grundsätzlich Ich rufe:

? cdate("01.08.2016") 
15. 06. 4862 
? cdate("01-08-2016") 
1. 08. 2016 
? Application.International(xlDateSeparator) 
. 
? Application.International(xlTimeSeparator) 
: 

Ich habe keine Ahnung, warum dies nicht, wie es funktioniert sollte wie die regionalen Einstellungen von Windows richtig eingestellt sind .. irgendwelche Ideen?

d.MM.yyyy 

Die vorherigen Einstellungen hatten Räume im kurzen Datumsmaske (wie bereits von VincentG) wie folgt aus:: kurze Datum ändern in regionalen Einstellungen zu

+1

Von Ihrem Bildschirmschoner, es sieht aus wie Ihre Einstellung hat Platz nach den Punkten, 'd. MM. yyyy' und nicht 'd.MM.yyyy', aber du versuchst" 01.08.2016 "' ohne Leerzeichen zu konvertieren. Versuchen Sie stattdessen, "01. 08. 2016" zu konvertieren. –

+0

@VincentG In der Tat, das war das Problem .. diese verflixten Räume – Peroxy

Antwort

0

eine Lösung gefunden .. Ich hatte

d. MM. yyyy 

Dies ist, wie meine Einstellungen aussehen jetzt:

enter image description here

1

Ich vermute, es ist durch die . verwirrt und versuchen, es als Trenn Tausende zu verwenden (durch Entfernen):

Debug.Print Format$(CDate(1082016), "dd.mm.yyyy") 'prints 15.06.4862 

Excel und VBA sind wirklich schlecht mit Terminen und Lokalisierung. Ich würde eine Abhilfe wie folgt vorschlagen:

Dim test As String 
Dim parts() As String 
test = "01.08.2016" 
parts = Split(test, Application.International(xlDateSeparator)) 
Debug.Print DateSerial(CInt(parts(2)), CInt(parts(0)), CInt(parts(1)))