Visual Basic for Applications:
Analysering av en dato fra en streng
Hvordan:
VBA tilbyr en enkel måte å analysere en streng til en dato ved bruk av CDate
-funksjonen eller DateValue
-funksjonen. Det er imidlertid avgjørende at strengen er i et gjenkjennelig datoformat.
Her er et grunnleggende eksempel som bruker CDate
:
Sub ParseDateUsingCDate()
Dim dateString As String
Dim parsedDate As Date
dateString = "2023-04-01"
parsedDate = CDate(dateString)
Debug.Print "Analysert Dato: "; parsedDate
End Sub
Hvis du kjører denne koden, vil utskriften i Det umiddelbare vinduet (tilgjengelig via Ctrl+G
i VBA-editoren) være:
Analysert Dato: 4/1/2023
Alternativt kan du bruke DateValue
-funksjonen, som er mer spesifikk for datoer (ignorerer tidsdelen):
Sub ParseDateUsingDateValue()
Dim dateString As String
Dim parsedDate As Date
dateString = "April 1, 2023"
parsedDate = DateValue(dateString)
Debug.Print "Analysert Dato med DateValue: "; parsedDate
End Sub
Eksempelutskrift for dette vil på samme måte vise i Det umiddelbare vinduet:
Analysert Dato med DateValue: 4/1/2023
Ha i tankene at suksessen med analyse avhenger av at datoformatet til strengen matcher system- eller applikasjonsinnstillingene.
Dypdykk
Internt, når VBA analyserer en streng til en dato, bruker det de regionale innstillingene til Windows-operativsystemet for å tolke datoformatet. Dette er avgjørende å forstå fordi en datostreng som perfekt analyseres på ett system kanskje forårsaker en feil på et annet dersom de bruker ulike dato-/tidsinnstillinger.
Historisk sett har håndtering av datoer vært en vanlig kilde til feil i applikasjoner, spesielt de som brukes internasjonalt. Denne avhengigheten av regionale innstillinger i VBA er grunnen til at noen kan vurdere alternativer som ISO 8601-formatet (f.eks., “ÅÅÅÅ-MM-DD”) for entydig datorepresentasjon og analyse på tvers av ulike systemer. Dessverre støtter ikke VBA nativt ISO 8601, og manuell analyse ville vært nødvendig for streng overholdelse.
For kompleks datoanalyse utover hva CDate
eller DateValue
kan håndtere, eller for å sikre konsistent analyse uavhengig av systemlokale innstillinger, kan programmerere ty til egendefinerte analysefunksjoner. Disse kunne involvere å splitte datostrengen i komponenter (år, måned, dag) og konstruere en dato ved hjelp av DateSerial
-funksjonen. Andre kan velge kraftigere språk eller biblioteker designet med internasjonalisering i tankene for slike oppgaver.