..|| Blog || Produkti/Storitve || MExcel || MDodatki || 300 nasvetov ||..

Kontrola datuma

Pomoč pri izdelavi makrov

Kontrola datuma

OdgovorNapisal/-a dragopre » So avg 03, 2019 9:45 am

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
dragopre
 
Prispevkov: 75
Pridružen: To dec 11, 2012 11:46 pm



Matjazev.NET
 

Re: Kontrola datuma

OdgovorNapisal/-a admin » So avg 03, 2019 3:42 pm

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:

Koda: Izberi vse
? isdate("13 januar 2018")
True


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.

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



Uporaba pa je seveda skrajno preprosta:

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
admin
Site Admin
 
Prispevkov: 3530
Pridružen: Sr jul 20, 2005 10:06 pm


Vrni se na VBA

Kdo je prisoten

Po forumu brska: 0 registriranih uporabnikov in 2 gostov