Функция обрезки вызывает изменение формата даты
Во-первых, важно отметить, что я нахожусь в Великобритании, поэтому стандартный формат даты - дд / мм / гггг
В А1 у меня дата: 05.05.2017 (дд / мм / гггг)
Я могу подтвердить это в ближайшем окне:
?CLng(Range("A1").Value)
42857
Теперь, если я сделаю следующее:
Range("A1").Value = Range("A1").Value
Вы, вероятно, можете догадаться, ничего не происходит - дата по-прежнему 02/05/2017 и числовое значение по-прежнему 42857
Но если я использую отделку с этим:
Range("A1").Value = Trim(Range("A1").Value)
Дата изменена на 05.02.2017. Это не просто форматирование - числовое значение также изменилось на 42771.
Что это о Trim()
метод, который заставляет дату считываться в формате США и затем преобразовываться обратно в формат Великобритании с новым значением даты? Это ошибка?
2 ответа
Из обсуждения в комментариях:
Формат по умолчанию или "токен" в VBA (не в самом Excel, как правильно заметил Macro Man) - американский английский - независимо от региональных настроек или форматирования ячейки.
Когда вы выполняете текстовые функции VBA для даты, выходные данные этих функций представлены в текстовом формате. Итак, результат Trim(Range("A1").Value)
это строка Эта строка напоминает правильную дату в США, поэтому, когда вы вставляете ее в ячейку, Excel распознает ее как дату в США.
Так что два неявных преобразования происходят. Первое происходит, когда вы читаете содержимое ячейки и передаете его trim()
: date-> преобразование текста; второе происходит, когда вы записываете его обратно в ячейку Excel: преобразование текста -> даты. Второе преобразование не имеет информации о формате, поэтому оно предполагает использование английского языка в США.
(Вы должны быть в состоянии достичь того же результата с любой текстовой функцией, а не только trim()
.)
Я обнаружил, что если вы добавите "'" перед датой, дата не изменится. Диапазон ("A1"). Значение = "'"&Trim(Диапазон ("A1"). Значение)