День (сейчас), показывающий январь 1900 года? - PullRequest
1 голос
/ 10 июня 2019

По какой-то причине, каждый раз, когда я пытаюсь использовать функцию Day (Now) в VBA, она продолжает отображать «1/9/1900».Функция Date отображается правильно, поэтому я не уверен, в чем проблема.

Sub Test()

Dim datDay As Date

datDay = Day(Now)
MsgBox datDay

End Sub

Вот изображение ошибки.

Ответы [ 3 ]

4 голосов
/ 10 июня 2019

Day будет целым числом где-то между 1 и 31, в зависимости, в частности, от "дневной" части даты, возвращаемой функцией DateTime.Now.

способ хранения дат,это, по сути, Double значения, где целая часть - это количество дней, а десятичная часть - время дня.

Debug.Print Format(CDate(0), "yyyy-mm-dd")

Вывод: 1899-12-30

Мы 10 июня, поэтому значение даты 10 соответствует 9 января 1900 года.

Вы хотите сохранитьзначение, возвращаемое функциями Day, Month и Year, в Long целочисленные переменные;not Date.

Dim datDay As Long
datDay = DateTime.Day(DateTime.Date) ' datDay is 10 because DateTime.Date is 2019-06-10.

Примечание: хотя неквалифицированные функции Day, Date, Month и Year (и другие) работают отлично, вероятно, это хорошая идея для квалификацииони с модулем, в котором они объявлены (VBA.DateTime), чтобы избежать потенциально запутанной неоднозначности, например, Date - это и имя свойства DateTime модуля, и , это также тип данных(Dim foo As Date), и оба имеют очень разные значения.

0 голосов
/ 10 июня 2019

Заменить

    datDay = Day(Now)

на

    datDay = Day(Now())

Не уверен, что это решит проблему, но =Day(Now()) работает правильно при вводе непосредственно в ячейку.

Ваша проблема datDay напечатано как Дата.=Day(Now()) возвращает только 10, как сегодня 10 июня.Как полное значение Date, это 1/10/1900, так как Excel индексирует день 0 как 1/0/1900.

0 голосов
/ 10 июня 2019

Попробуйте:

Option Explicit

Sub Test()

    Dim datDay As Date

    datDay = Date

    MsgBox "Whole date: " & datDay & vbNewLine & _
            "Month: " & Month(Date) & " (" & Format(Date, "mmmm") & ")" & vbNewLine & _
            "Day: " & Day(Date) & " (" & Format(Date, "dddd") & ")"

End Sub

Результат:

enter image description here

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