2014-03-18 4 views
0

Вот что я делаю: 1. На панели управления я установил формат системной даты следующим образом: dd/MM/yyyy 2. Я создаю следующий простой макрос:Excel задевает мои даты, когда система настроена на европейский формат даты

Sub hello() 
    ActiveSheet.Cells(1, 1) = "10/01/2014" 
End Sub 
  1. я запускаю его, и получить следующую дату в ячейке (1,1): 01/10/2014

Если дата меньше 12 он конвертирует дату в американский формат (MM/dd/yyyy), а когда дата больше 12 он не может преобразовать его и правильно записать дату в ячейке, а как текст. Я впервые обнаружил это при попытке записать даты из VSTO, но затем сузил его до любого места, где вы пишете дату в ячейку из кода, даже в макросы. Это ошибка Excel или я делаю что-то неправильно? Я использую Excel 2013, но я считаю, что эта проблема существует и во всех других версиях ...

+0

Кроме того: * вздох *. «YYYY-MM-DD» является стандартным представлением, позволяющим избежать путаницы mm/dd или dd/mm, в течение 48 лет http://en.wikipedia.org/wiki/ISO_2014 – TessellatingHeckler

+0

Спасибо! ты меня на правильном пути! – taralex

ответ

1

VBA считает, что все литераторы даты должны быть в формате США , если буквальная версия не может быть действительной датой в формате US , Если вы используете "10/Jan/2014" (или #10/Jan/2014#; # s - это дата буквенных маркеров), VBA вернется к dd/MMM/yyyy, так как это не может быть чем-то еще.

Если вам нужно VBA, чтобы понять местный формат даты, используйте:

Sub hello() 
    ActiveSheet.Cells(1, 1) = DateValue("10/01/2014") 
End Sub 

... так как (как указано в файлах справки VBA):

DateValue признает заказ на месяц , день и год согласно формат короткой даты, указанный вами для вашей системы. DateValue также распознает однозначные даты, которые содержат названия месяцев, либо длинными , либо сокращенно.

Итак, до тех пор, пока ваш компьютер имеет правильный набор локалей, DateValue() должен понимать ваш предпочтительный формат даты.

+0

Спасибо, это решает его VBA! Моя проблема, однако, не в VBA, но в VSTO я пишу даты для ряда ячеек с использованием метода Range.set_Values ​​(array). Есть ли способ использовать что-то похожее на DateValue() в коде C#? – taralex

+0

Посмотрите http://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx для конструкторов DateTime и 'Parse' или' ParseExact'. –

Смежные вопросы