Различия между форматированием даты в VBA

#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