Visual Basic for Applications:
Analiza składniowa daty z ciągu znaków
Jak to zrobić:
VBA oferuje prosty sposób na przekształcenie ciągu znaków na datę za pomocą funkcji CDate
lub funkcji DateValue
. Jednak kluczowe jest, aby ciąg znaków był w rozpoznawalnym formacie daty.
Oto podstawowy przykład użycia CDate
:
Sub ParseDateUsingCDate()
Dim dateString As String
Dim parsedDate As Date
dateString = "2023-04-01"
parsedDate = CDate(dateString)
Debug.Print "Przetworzona Data: "; parsedDate
End Sub
Jeśli uruchomisz ten kod, wynik w oknie Immediate (dostępnym za pomocą Ctrl+G
w edytorze VBA) będzie wyglądał tak:
Przetworzona Data: 4/1/2023
Alternatywnie, możesz użyć funkcji DateValue
, która jest bardziej specyficzna dla dat (ignorując część czasu):
Sub ParseDateUsingDateValue()
Dim dateString As String
Dim parsedDate As Date
dateString = "April 1, 2023"
parsedDate = DateValue(dateString)
Debug.Print "Przetworzona Data za pomocą DateValue: "; parsedDate
End Sub
Przykładowy wynik dla tego również pokazałby się w oknie Immediate:
Przetworzona Data za pomocą DateValue: 4/1/2023
Pamiętaj, że sukces parsowania zależy od tego, czy format daty w ciągu znaków odpowiada ustawieniom systemowym lub aplikacji.
Szczegółowa analiza
Wewnętrznie, gdy VBA parsuje ciąg znaków na datę, korzysta z regionalnych ustawień systemu operacyjnego Windows, aby zinterpretować format daty. Jest to kluczowe do zrozumienia, ponieważ ciąg znaków reprezentujący datę, który bez problemu zostanie przetworzony na jednym systemie, może spowodować błąd na innym, jeśli używają one różnych ustawień daty/czasu.
Historycznie, obsługa dat była częstym źródłem błędów w aplikacjach, szczególnie tych, które są używane międzynarodowo. Ta zależność od regionalnych ustawień w VBA jest powodem, dla którego niektórzy mogą rozważać alternatywy, takie jak format ISO 8601 (np. “RRRR-MM-DD”) dla jednoznacznej reprezentacji i parsowania daty na różnych systemach. Niestety, VBA nie obsługuje rodzimie formatu ISO 8601, a manualne parsowanie byłoby wymagane dla ścisłego przestrzegania.
W przypadku złożonego parsowania daty, wykraczającego poza to, co mogą obsłużyć CDate
lub DateValue
, lub w celu zapewnienia spójnego parsowania niezależnie od ustawień regionalnych systemu, programiści mogą sięgać po funkcje parsowania dostosowane. Mogą one obejmować dzielenie ciągu znaków reprezentującego datę na składowe (rok, miesiąc, dzień) i konstruowanie daty przy użyciu funkcji DateSerial
. Inni mogą wybierać potężniejsze języki lub biblioteki zaprojektowane z myślą o internacjonalizacji do takich zadań.