Prosta odpowiedź to wartości domyślne.
następujący wynik ma charakter przykładowy:
debug.Print day(0)
30
Dlaczego? Ponieważ Day(0)
w kalendarzu VBA to data 30/12/1899
. Wykazano brzmienie:
debug.Print format(Cdate(0), "dd/mm/yyyy")
30/12/1899
ile piszesz Option Explicit
na górze modułu VBA pozwala na tworzenie zmiennych spontanicznie (jak Variant
typów) w pierwszym punkcie obsługi.
Gdy zmienna jest tworzona (ale nie ustawiona), jest ustawiana na jej "wartość domyślną. Przykładowe domyślne wartości:
Long
--- 0
(tak samo dla innych, w tym Date
numerycznych, Integer
, Byte
, Double
etc.)
Boolean
--- False
(który w zezwalającego układu typu Vba, mogą być zmuszany do 0
)
Variant
--- Empty
(który może być przekonwertowany na 0
)
String
--- Zero-Length-String ("")
(co właściwie, nie może być zmuszany do 0
i wygeneruje błąd, jeśli próby drukowania Day("")
)
Any Object
--- Nothing
Więc jeśli piszesz Debug.Print Day(Var)
i Var
jest dowolny numeryczny typ danych lub logiczna albo wariant (lub nigdy ogłoszony w pierwszej kolejności), to zostanie zmuszony do Day(0)
co daje wyjście 30
jak widać powyżej.
W konkretnej sytuacji na pytanie:
VBA rozpoznaje ow
jako zmienna nierejestrowanej, więc tworzy go (i inicjalizuje go do typu Variant
danych) i przekazuje ją do Day()
. Ponieważ jest to wariant, ma on wartość początkową Empty
, która następnie jest wymuszana na 0
, co daje Day(0)
, która zwraca 30
.
Może to wyjaśni to? https://social.msdn.microsoft.com/Forums/office/en-US/f1eef5fe-ef5e-4ab6-9d92-0998d3fa6e14/what-is-story-behind-december-30-1899-as-base-date? forum = accessdev – tjb1