#vba #date #format
Вопрос:
Я хотел бы достичь результата, показанного в A1. Почему строка 3 не выводит тот же результат, что и строки 1 и 2, даже если формат тот же — гггг-мм-дд чч:мм:сс?
Имеет ли это какое-либо отношение к региональным настройкам?
1 Range("A1").Value2 = Now 2 Range("A1").NumberFormat = "yyyy-mm-dd hh:mm:ss" 3 Range("B1").Value2 = Format(Now, "yyyy-mm-dd hh:mm:ss")
Комментарии:
1. Я не понимаю, почему (я предполагаю, что excel пытается быть умным для вас), но если у вас есть данные о дате, пожалуйста, сохраните их как дату и измените презентацию с помощью
NumberFormat
Ответ №1:
Это потому, что:
A1: Вы устанавливаете значение даты и применяете определенный формат для отображения.
B1: Вы форматируете значение даты в текст, устанавливаете его в качестве значения, но ячейка не была применена в определенном формате, таким образом, Excel видит текстовую дату как значение даты и приводит ее к истинному значению даты, которое отображается с вашим форматом даты по умолчанию (немецкий?).
Чтобы заставить дату текста быть прочитанной как текст, вы можете добавить к ней кавычку:
Range("A1").Value2 = Now Range("A1").NumberFormat = "yyyy-mm-dd hh:mm:ss" Range("B1").Value2 = Format(Now, "yyyy-mm-dd hh:mm:ss") Range("C1").Value2 = Format(Now, "'yyyy-mm-dd hh:mm:ss")
Результат (датская локализация):
Обратите внимание, что C1-это текст (выровненный по левому краю).
Комментарии:
1. Я понимаю. Это отвечает на вопрос. Спасибо @Gustav
Ответ №2:
Почему вы не задали, до или после, форматирование ячейки с диапазоном?
Пример:
Range("A1:Z1").NumberFormat = "yyyy-mm-dd hh:mm:ss" Range("A1").Value2 = Now Range("B1").Value2 = Now