Visual Basic for Applications:
Analysera ett datum från en sträng

Hur:

VBA erbjuder ett enkelt sätt att tolka en sträng till ett datum med hjälp av funktionen CDate eller DateValue. Det är dock avgörande att strängen är i ett erkänt datumformat.

Här är ett grundläggande exempel med CDate:

Sub ParseDateUsingCDate()
    Dim dateString As String
    Dim parsedDate As Date
    
    dateString = "2023-04-01"
    parsedDate = CDate(dateString)
    
    Debug.Print "Tolkat Datum: "; parsedDate
End Sub

Om du kör denna kod skulle utmatningen i omedelbartfönstret (åtkomligt via Ctrl+G i VBA-redigeraren) vara:

Tolkat Datum: 4/1/2023 

Alternativt kan du använda funktionen DateValue, som är mer specifik för datum (ignorerar tidsdelen):

Sub ParseDateUsingDateValue()
    Dim dateString As String
    Dim parsedDate As Date
    
    dateString = "April 1, 2023"
    parsedDate = DateValue(dateString)
    
    Debug.Print "Tolkat Datum med DateValue: "; parsedDate
End Sub

Ett exempel på utmatning för detta skulle liknande visas i omedelbartfönstret:

Tolkat Datum med DateValue: 4/1/2023

Kom ihåg att framgången med tolkningen beror på att datumformatet på strängen matchar systemets eller applikationens inställningar.

Fördjupning

Internt, när VBA tolkar en sträng till ett datum, använder det de regionala inställningarna för Windows operativsystem för att tolka datumformatet. Detta är avgörande att förstå eftersom en datumsträng som tolkas perfekt på ett system kan orsaka ett fel på ett annat om de använder olika datum/tidsinställningar.

Historiskt sett har hanteringen av datum varit en vanlig källa till buggar i applikationer, särskilt de som används internationellt. Detta beroende av regionala inställningar i VBA är varför vissa kan överväga alternativ som ISO 8601-formatet (t.ex. “ÅÅÅÅ-MM-DD”) för entydig datumrepresentation och tolkning över olika system. Tyvärr stöder inte VBA nativt ISO 8601, och manuell tolkning skulle vara nödvändig för strikt efterlevnad.

För komplex datumtolkning utöver vad CDate eller DateValue kan hantera, eller för att säkerställa konsekvent tolkning oavsett systemets lokala inställningar, kan programmerare använda sig av anpassade tolkningsfunktioner. Dessa kan innefatta att dela upp datumsträngen i komponenter (år, månad, dag) och konstruera ett datum med hjälp av DateSerial-funktionen. Andra kan välja kraftfullare språk eller bibliotek som är utformade med internationalisering i åtanke för sådana uppgifter.