Возврат 5-значной даты в Debug.Print без форматирования ячейки - PullRequest
4 голосов
/ 29 октября 2019

Фон:

Я хочу получить 5-значную дату из ячейки, отформатированной для отображения даты. Дата из 5 цифр должна быть только непосредственным окном (через debug.print).

Мое тестирование с результатами в разделе Script (внизу).

У меня естьощущение, что ответ будет включать datediff()+2 на основании проведенного мною тестирования, но я не могу понять, зачем нужен этот +2, и не хочу просто добавить это, если в будущем это не так.


Проблема:

Кажется, я не могу отобразить правильную пятизначную дату (как отображается в «общем» формате) с помощью Debug.Print.


Вопрос:

Как получить 5-значную дату, чаще всего отображаемую с общим форматированием, для отображения в ближайшем окне (debug.print) без предварительного преобразования ячейки .numberformat?


Сценарий:

Dim rng As Range, d1 As String, d2 As String
Set rng = Cells(1, 1) 'value = 20190101

Debug.Print Format(rng.Value, "@") 'returns 20190101
Debug.Print rng.NumberFormat = "General" 'returns "false"
Debug.Print Format(rng.value, "General") 'returns "Ge0oral" due to the "n" being recognized for a format

d1 = "1900/01/01"
d2 = rng.Value
Debug.Print 40729 + DateDiff("d", d1, d2) 'returns 84195
Debug.Print DateDiff("d", d1, d2) 'returns 43466

rng.NumberFormat = "General"
Debug.Print rng.Value 'returns 43468, but required formatting the cell

Ответы [ 3 ]

5 голосов
/ 29 октября 2019

Есть два метода, которые приходят на ум, когда вы хотите напечатать числовое представление даты без изменения форматирования ячейки.

Лучший способ сделать это - использовать свойство .Value2.

Debug.Print Rng.Value2

Менее рекомендуемый подход - использование функции CDbl(). Я бы использовал это moreso для переменных и .Value2 для диапазонов.

Debug.Print CDbl(Rng.Value)

Или для переменных

Dim d as Date
d = #01/01/2019#

Debug.Print CDbl(d)
Debug.Print CLng(d) 'If not using time - date only
5 голосов
/ 29 октября 2019

Range.Value2 не использует тип Date, поэтому вы можете просто Debug.Print rng.Value2.

1 голос
/ 29 октября 2019

Хорошая раскладка Кирилла =)

В дополнение к другим ответам: Принимая во внимание, что Value2 является более подходящим способом, другая очень простая возможность:

Debug.Print rng*1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...