2016-08-04 1 views
1

Я нахожусь на компьютере с Windows 10 x64 с установленным 64-разрядным Excel 2016.Сепараторы даты не работают должным образом в 64-битной версии Excel VBA

У меня возникли проблемы с датами, поскольку они не работают должным образом. У меня установлены региональные настройки правильно, но VBA, похоже, не правильно распознает . как разделитель даты, он использует только -. Когда я сравниваю это с машиной Windows 7 x64 с установленной 32-битной версией Excel 2010, она работает так, как должна.

На рисунке ниже вы можете увидеть некорректное поведение:

VBA behavior

В принципе, я звоню:

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

Я понятия не имею, почему это не работает должным образом так как региональные настройки Windows установлены правильно .. любые идеи?

+1

С вашего экрана, похоже, что у вашей настройки есть место после точек, 'd. ММ. yyyy', а не 'd.MM.yyyy', но вы пытаетесь преобразовать' '01.08.2016' 'без пробелов. Попробуйте конвертировать '' 01. 08. 2016 "вместо. –

+0

@VincentG действительно, это была проблема .. эти проклятые пространства – Peroxy

ответ

0

Найдено решение .. я должен был изменить короткий срок в региональных настройках для:

d.MM.yyyy 

Предыдущие настройки имели места в короткой даты маски (как отмечено VincentG), как это:

d. MM. yyyy 

Это как мои настройки выглядят как сейчас:

enter image description here

1

Я предполагаю, что это путаясь в . и пытается использовать его в качестве разделителя тысяч (удалив его):

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

Excel и VBA очень плохо с датами и локализации. Я бы посоветовал обходной путь вот так:

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))) 
Смежные вопросы