Visual Basic for Applications:
Päivämäärän jäsentäminen merkkijonosta

Kuinka:

VBA tarjoaa yksinkertaisen tavan jäsentää merkkijono päivämääräksi käyttämällä CDate-funktiota tai DateValue-funktiota. On kuitenkin olennaista, että merkkijono on tunnistettavassa päivämäärämuodossa.

Tässä on perusesimerkki CDate:n käytöstä:

Sub ParseDateUsingCDate()
    Dim dateString As String
    Dim parsedDate As Date
    
    dateString = "2023-04-01"
    parsedDate = CDate(dateString)
    
    Debug.Print "Jäsennetty päivämäärä: "; parsedDate
End Sub

Jos suoritat tämän koodin, tuloste Välitön-ikkunassa (saatavilla VBA-editorissa Ctrl+G:n kautta) olisi:

Jäsennetty päivämäärä: 1.4.2023 

Vaihtoehtoisesti voit käyttää DateValue-funktiota, joka on erityisempi päivämäärille (jättäen huomiotta aikaosan):

Sub ParseDateUsingDateValue()
    Dim dateString As String
    Dim parsedDate As Date
    
    dateString = "huhtikuu 1, 2023"
    parsedDate = DateValue(dateString)
    
    Debug.Print "Jäsennetty päivämäärä käyttäen DateValue:a: "; parsedDate
End Sub

Tämän esimerkin tuloste näyttäisi samankaltaisesti Välitön-ikkunassa:

Jäsennetty päivämäärä käyttäen DateValue:a: 1.4.2023

Pidä mielessä, että jäsennyksen onnistuminen riippuu merkkijonon päivämäärämuodon vastaamisesta järjestelmän tai sovellusasetuksia.

Syväsukellus

Sisäisesti, kun VBA jäsentää merkkijonon päivämääräksi, se käyttää Windows-käyttöjärjestelmän alueellisia asetuksia päivämäärämuodon tulkitsemiseen. Tämä on tärkeää ymmärtää, koska päivämäärämerkkijono, joka jäsentyy täydellisesti yhdellä järjestelmällä, saattaa aiheuttaa virheen toisessa, jos ne käyttävät erilaisia päivämäärä-/aika-asetuksia.

Historiallisesti päivämäärien käsittely on ollut yleinen virheiden lähde sovelluksissa, erityisesti kansainvälisesti käytettävissä. Tämä VBA:n riippuvuus alueellisista asetuksista on syy, miksi jotkut saattavat harkita vaihtoehtoja, kuten ISO 8601 -muotoa (esim. “VVVV-KK-PP”) yksiselitteisen päivämäärän esitysmuodon ja jäsennyksen kannalta eri järjestelmissä. Valitettavasti VBA ei tue ISO 8601:ä natiivisti, ja manuaalinen jäsennys olisi tarpeen tiukkaa noudattamista varten.

Monimutkaisempiin päivämääräjäsennyksiin kuin mitä CDate tai DateValue pystyvät käsittelemään, tai järjestelmän paikalliset asetukset huomiotta jättävää johdonmukaista jäsennystä varten, ohjelmoijat saattavat turvautua mukautettuihin jäsennysfunktioihin. Nämä voivat sisältää päivämäärämerkkijonon jakamisen osiin (vuosi, kuukausi, päivä) ja päivämäärän muodostamisen käyttäen DateSerial-funktiota. Toiset saattavat valita voimakkaampia kieliä tai kirjastoja, jotka on suunniteltu kansainvälistymistä silmällä pitäen näitä tehtäviä varten.