Почему дата возвращает "31-12-1899", когда 1 передается ей?
я использую windows 10 OS excel 13, поэтому в приведенном ниже коде 1
должен возвратить 1/1/1900
верно ? ниже - не почему.
On этой вопрос OP прошел 2016
и получил тот же результат, что и я, поэтому, если есть какая-то ошибка, почему я получил тот же результат, что и OP, когда я прошел 2016
?
Sub ndat()
Dim dt As Date
dt = 2016
Debug.Print "dt is " & dt
End Sub
2 ответов
целые числа и даты отображаются в VBA по-разному, чем на листе. Например:
Sub marine()
Dim i As Integer, d As Date
Dim mgs As String
msg = ""
For i = -10 To 10
d = CDate(i)
msg = msg & i & vbTab & Format(d, "mm/dd/yyyy") & vbCrLf
Next i
MsgBox msg
End Sub
выдает:
Примечание Вы можете получить даты до 1/1/1900
правка#1:
Это может помочь понять разницу. Я поместил несколько целых чисел в столбец A.
на B1, я ставлю =A1
и скопировать вниз. Я колонки B для отображения в формат даты.
Я использую этот UDF ():
Public Function VBA_Date(i As Long) As String
VBA_Date = Format(CDate(i), "mm/dd/yyyy")
End Function
заполнить столбец C:
обратите внимание на переход между строками #19 и #20
это просто сам рабочий лист. Или, чтобы быть правильным: рабочий лист-функциональность!
быстрый тест:
?cdate(1)
1899-12-31
?format(1,"YYYY-MM-DD")
1899-12-31
?worksheetfunction.Text(1,"YYYY-MM-DD")
1900-01-01
но переход на сегодняшнюю дату не показывает этот пробел:
?clng(now)
42463
?worksheetfunction.Text(now,"0")
42463
это показывает, что где-то между 1 и 42463 есть разрыв (быстрая проверка lotus показывает это:
?cdate(60) & " --- " & cdate(61)
1900-02-28 --- 1900-03-01
?format(60,"YYYY-MM-DD") & " --- " & format(61,"YYYY-MM-DD")
1900-02-28 --- 1900-03-01
?worksheetfunction.Text(60,"YYYY-MM-DD") & " --- " & worksheetfunction.Text(61,"YYYY-MM-DD")
1900-02-29 --- 1900-03-01
только один последний тест, чтобы показать это снова:
?format("1900-02-28","0") & " --- " & format("1900-03-01","0")
60 --- 61
?worksheetfunction.Text("1900-02-28","0") & " --- " & worksheetfunction.Text("1900-03-01","0")
59 --- 61
начиная с 61, просто теперь разница в числах. Но Lotus-Bug добавляет 1900-02-29 для "совместимости".
также: это "функция" для excel и не имеет ничего общего с basic, vbscript, vba.......... Все остальные программы работают правильно, и у него будет много проблем, если VBA не будет. Поэтому для" совместимости " VBA в excel просто делает это правильно;)