Pri vnosu v tabelo podatke z VBA proceduro podatke vsebinsko kontroliram. Pred tem želim preveriti če so podatki formalno pravilni.
Zneske preverjam s funkcijo "Application.WorksheetFunction.IsNumber". ( VBA funkcija IsNumeric ne upošteva nastavitev formata vnosa).
Ne najdem pa rešitve za kontrolo datuma. Datum vnašam v obliki DD.MM.LLLL.
Funkcija IsDate mi pri vnosu DD,MM,LLLL vrne True.
Prosim za nasvet.
Hvala za pomoč
Lep pozdrav
Drago
Kontrola datuma
Re: Kontrola datuma
Pozdravljeni,
Pri ugotavljanju številk je stvar relativno preprosta, saj je vsakomur jasno, da če so med ciframi neustrezni znaki, potem to ni številka. Težava je edino z ločili za tisočice in desetice, vendar pa je to urejeno na nivoju Oken in ni problema.
Pri datumih pa je stvar malce bolj zanimiva. Datum lahko ljudje vpišemo na različne načine in z različnimi ločili. Datum lahko vpišemo celo z besedami, pa je to še vedno datum:
VBA nima vgrajene funkcije, ki bi preverila ali je vpisan datum v ustreznem formatu, vendar pa je takšno funkcijo dokaj trivialno zapisati. Spodaj prilagam funkcijo, ki sem vam jo napisal in jo tudi komentiral.
Uporaba pa je seveda skrajno preprosta:
Pri ugotavljanju številk je stvar relativno preprosta, saj je vsakomur jasno, da če so med ciframi neustrezni znaki, potem to ni številka. Težava je edino z ločili za tisočice in desetice, vendar pa je to urejeno na nivoju Oken in ni problema.
Pri datumih pa je stvar malce bolj zanimiva. Datum lahko ljudje vpišemo na različne načine in z različnimi ločili. Datum lahko vpišemo celo z besedami, pa je to še vedno datum:
Koda: Izberi vse
? isdate("13 januar 2018")
True
Koda: Izberi vse
Function AliJeDatum(vnos As String, pricakovanFormat As String)
' predpostavim, da ni datum
AliJeDatum = False
' če tudi VBA trdi, da ni datum, potem pač ni datum
If (Not IsDate(vnos)) Then Exit Function
' če datum ni v pravilnem formatu potem ni ustrezno
If (format(CDate(vnos), pricakovanFormat) <> vnos) Then Exit Function
' datum je v pravilnem formatu, zato ustreza
AliJeDatum = True
End Function
Koda: Izberi vse
? alijedatum("2019/07/13", "dd.mm.yyyy")
False
? alijedatum("13.07.2019", "dd.mm.yyyy")
True
? alijedatum("13.7.2019", "dd.mm.yyyy")
False
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator