Pouziti kolekce jsem minil jako jedno z moznych reseni, samozrejme lze pouzit i pouhe prohledavani pole Array - Test1 nebo vyuzit prikaz Select Case - Test2 (navic i umozni pripadne vetveni programu na zaklade vyrazu):
Kód: Vybrat vše
Sub Test1()
Dim Sv As Variant, i As Integer, OK As Boolean
Sv = Array(#1/1/2010#, #5/1/2010#, #5/8/2010#) ' seznam dat
OK = False
For i = 0 To 2
If Sv(i) = #1/1/2010# Then OK = True: Exit For
Next i
End Sub
Sub Test2()
Dim OK As Boolean
OK = False
Select Case Date '#1/1/2010#
Case #1/1/2010#, #5/1/2010#, #5/8/2010#
OK = True
End Select
End Sub
Pro maly pocet prvku to je asi vyhodnejsi, pro onech uvazovanych 150 prvku uz bude pouziti kolekce rychlejsi.
Objekt Collection je tvoreny polozkami a klici k temto polozkam. V danem pripade, kdy je overovano datum, je klic datum a potrebna polozka muze byt cokoliv, takze jsem zvolil "ano". V modulu2 je vyznam polozky a klice jasnejsi.
PS.: Pokud je tech 150 svatku mineno za obdobi vice roku, existuje efektivnejsi reseni pro pevne a pohyblive svatky v roce, nez psat tech 150 svatku (vlozit do standardniho modulu):
Kód: Vybrat vše
Option Explicit
Dim Sv() As Date
Sub Test3()
' vyhleda v poli svatek
Dim Dt As Date, i As Byte, OK As Boolean
Dt = #4/5/2010# 'Date
SetSv Year(Dt)
OK = False
For i = 0 To UBound(Sv)
If Sv(i) = Dt Then OK = True: Exit For
Next i
End Sub
Private Sub SetSv(rok As Integer)
Dim i As Byte, ArrSvatky As Variant
' pevne svatky + 2x velikonoce
ArrSvatky = Array("1.1.", "1.5.", "8.5.", "5.7.", "6.7.", "28.9.", "28.10.", _
"17.11.", "24.12.", "25.12.", "26.12.")
ReDim Sv(UBound(ArrSvatky) + 2)
For i = 0 To UBound(ArrSvatky)
Sv(i) = CDate(ArrSvatky(i) & rok)
Next i
' doplneni velikonoc
Sv(i) = oud(rok) ' vel nedele
Sv(i + 1) = Sv(i) + 1 ' vel pondeli
End Sub
Private Function oud(rok As Integer)
' Oudinova metoda vypoctu data Velikonocni nedele
Dim storoc As Integer, G As Integer, k As Integer, i As Integer
Dim A As Integer, B As Integer, c As Integer, D As Integer
Dim j As Integer, l As Integer, mes As Byte, Den As Byte
storoc = rok \ 100
G = rok Mod 19
k = (storoc - 17) \ 25
i = (storoc - storoc \ 4 - (storoc - k) \ 3 + 19 * G + 15) Mod 30
A = i \ 28
B = 29 \ (i + 1)
c = (21 - G) \ 11
i = i - A * (1 - A * B * c)
D = rok \ 4
j = (rok + D + i + 2 - storoc + storoc \ 4) Mod 7
l = i - j
mes = 3 + (l + 40) \ 44
Den = l + 28 - 31 * (mes \ 4)
oud = DateSerial(rok, mes, Den)
End Function