Доброго времени суток, уважаемые.
Очень надеюсь, что знающие сочтут «задачку» интересной и попробуют найти решение или наоборот простой и «направят в нужное направление».
Предыстория: код начинал писать на 2010 Excel и этой проблемы не наблюдал. После установки 2016 офиса не могу разобраться с казалось бы простой вещью - форматом даты. Функция FORMAT работает не логично.
Имеется:
Таблица, данные в которую тянутся из SQL. Столбец с датой загружается в виде dd.mm.yyyy, но EXCELем воспринимается как текст. Чтобы это исправить (нужно сортировать именно как дату) применил .TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 4), Array(10, 9))
С этой таблицы строится сводная. Дата – одно из отображаемых Field. Отмечу, что в сводной с датами все «ок» и они сортируются и отображаются корректно (dd.mm.yyyy).
А вот далее начинается моя проблема. При работе с данными из сводной VBA воспринимает дату ошибочно, меняя в определенных случаях день и месяц местами. Для наглядности сделал таблицу и код (вложил файл):
Код |
---|
For Each pItem In Sheets("Сводные").PivotTables("testpivot").PivotFields("Дата").PivotItems Debug.Print "without format: " + pItem.Name Debug.Print " with format: " + VBA.Format(pItem.Name, "dd.mm.yyyy") Next |
И вот часть результата этого кода:
………обрезано……….
without format: 7/11/2018
with format: 07.11.2018
without format: 7/13/2018
with format: 13.07.2018
………обрезано……….
Как видно без функции Format в сводной таблице дата хранится в формате mm/dd/yyyy. Но при преобразовании к виду "dd.mm.yyyy" в случае с датой 7/11/2018 (11 июля) получили 07.11.2018 (07 ноября). И тут же 7/13/2018 (13 июля) обработалось нормально 13.07.2018 (13 июля).
А уже из-за этого дальнейшая работа со сводной невозможна. Например, для функции GetPivotData нужно указать дату в том виде, как она отражена на листе ("dd.mm.yyyy").
Прошу подсказать, как все же заставить VBA воспринимать дату корректно. (без костылей типа if dd>12 )