Jestem nowy w VBA i pracuję nad modułem do odczytu danych z arkusza kalkulacyjnego i obliczam wartości na podstawie dat z arkusza kalkulacyjnego. Odczytuję zmienne jako łańcuch, a następnie zmieniam wartości na datę przy użyciu CDate. Jednak właśnie natknąłem się na DateValue i zastanawiałem się, jaka jest różnica między tymi dwiema funkcjami i która z nich jest lepsza do użycia.Różnica między DateValue i CDate w VBA
Odpowiedz
DateValue
powróci tylko datę. CDate
zachowa datę i czas:
? DateValue("2014-07-24 15:43:06")
24/07/2014
? CDate("2014-07-24 15:43:06")
24/07/2014 15:43:06
Podobnie można użyć TimeValue
wrócić tylko część czasu:
? TimeValue("2014-07-24 15:43:06")
15:43:06
? TimeValue("2014-07-24 15:43:06") > TimeSerial(12, 0, 0)
True
Ponadto, jak mówi guitarthrower, DateValue
(i TimeValue
) przyjmuje tylko String
parametry , podczas gdy CDate
może również obsługiwać liczby. Aby emulować te funkcje dla typów liczbowych, użyj CDate(Int(num))
i CDate(num - Int(num))
.
CDate
skonwertuje liczbę lub tekst na datę.
CDate(41035) 'Converts to a date of 5/6/2012
CDate("1/15/2014") 'Converts to a date of 1/15/2014
DateValue
skonwertuje datę w formacie tekstowym (tylko) na datę.
DateValue("1/15/2014") 'Converts to a date of 1/15/2014
DateValue(41035) 'Throws a mismatch error
Zarówno cdate i DateValue, stosowany w vba konwertuje wartość do Data (dd/mm/rrrr Format)
1)
LstrDate = "July 24, 2014"
LDate = CDate(LstrDate)
2)
LDate = DateValue("July 24, 2014")
Oba zwracają ten sam wynik.
Jednak DateValue zwraca numer seryjny daty, jeżeli są stosowane w poziomie aplikacji (kalkulacyjnym)
nie wiedział o funkcji arkusza kalkulacyjnego, różnica. Dobrze wiedzieć. – guitarthrower