Evo uradio sam brzinski jos jednu kracu varijantu sa do while petljom kao moguce resenje.
Probati i uporediti sa prethodnom varijantom.
Kad budem stigao napravicu i MS Access uzorak i priloziti.
Code:
Public Function ObracunajKrajOdmora2(ByVal DatumPocetka As String, ByVal BrojDanaOdmora As Integer, Optional ByVal KrajOdmoraDaniVikenda As Integer = 2) As String
Dim iDana As Integer
Dim iBrojac As Integer
Dim Dan As String
Dim iDan As Integer
iDana = BrojDanaOdmora
iBrojac = 0
' Prvi dan odmora
Dan = DateAdd("d", iBrojac, DatumPocetka)
' Uzmi dan u nedelji (1...7)
iDan = CInt(DatePart("w", Dan, vbUseSystemDayOfWeek, vbUseSystem))
If BrojDanaOdmora > 1 Then
Do While Not iDana = 1
' Brojac dana
iBrojac = iBrojac + 1
' Dan kada se doda broj vec izbrojanih dana
Dan = DateAdd("d", iBrojac, DatumPocetka)
' Uzmi dan u nedelji (1...7)
iDan = CInt(DatePart("w", Dan, vbUseSystemDayOfWeek, vbUseSystem))
' Ako je dan u nedelje 1...5 onda
If iDan < 6 Then iDana = iDana - 1
Loop
End If
If iDan > 5 Then
' Dan pre vikenda
If KrajOdmoraDaniVikenda = 0 Then
' Ako je subota - oduzmi 1 dan
If iDan = 6 Then Dan = DateAdd("d", -1, Dan)
' Ako je nedelja - oduzmi 2 dana
If iDan = 7 Then Dan = DateAdd("d", -2, Dan)
' Dan posle vikenda
ElseIf KrajOdmoraDaniVikenda = 1 Then
' Ako je subota - dodaj 2 dana
If iDan = 6 Then Dan = DateAdd("d", 2, Dan)
' Ako je nedelja - dodaj 1 dan
If iDan = 7 Then Dan = DateAdd("d", 1, Dan)
End If
End If
Debug.Print "DatumPocetka: "; DatumPocetka, "BrojDanaOdmora: "; BrojDanaOdmora, "Dan: "; Dan, Format(Dan, "dddd"), IIf(KrajOdmoraDaniVikenda = 0, "Pre vikenda", IIf(KrajOdmoraDaniVikenda = 1, "Posle vikenda", "Tacan datum")); KrajOdmoraDaniVikenda
' Povratna vrednost
ObracunajKrajOdmora2 = Dan
End Function
Test f-je
Code:
Sub Test2()
Dim i As Integer
Dim DatumPocetka As String
Dim BrojDanaOdmora As Variant
Dim KrajOdmoraDaniVikenda As Integer
DatumPocetka = "10/09/2018"
BrojDanaOdmora = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 21, 23, 25, 26, 30, 31, 32, 34, 35, 36, 60, 61)
KrajOdmoraDaniVikenda = 2
Debug.Print vbCrLf, vbCrLf
Debug.Print "DATUM KRAJA ODMORA"
Debug.Print String(76, "-")
For i = 0 To UBound(BrojDanaOdmora)
ObracunajKrajOdmora2 DatumPocetka, BrojDanaOdmora(i), KrajOdmoraDaniVikenda
Next
End Sub
Rezultati f-je
Code:
DATUM KRAJA ODMORA --- KrajOdmoraDaniVikenda = 2
----------------------------------------------------------------------------
DatumPocetka: 10/09/2018 BrojDanaOdmora: 1 iBrojac: 0 Dan: 10/09/2018 Monday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 2 iBrojac: 1 Dan: 11/09/2018 Tuesday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 3 iBrojac: 2 Dan: 12/09/2018 Wednesday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 4 iBrojac: 3 Dan: 13/09/2018 Thursday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 5 iBrojac: 4 Dan: 14/09/2018 Friday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 6 iBrojac: 7 Dan: 17/09/2018 Monday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 7 iBrojac: 8 Dan: 18/09/2018 Tuesday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 8 iBrojac: 9 Dan: 19/09/2018 Wednesday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 9 iBrojac: 10 Dan: 20/09/2018 Thursday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 10 iBrojac: 11 Dan: 21/09/2018 Friday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 11 iBrojac: 14 Dan: 24/09/2018 Monday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 12 iBrojac: 15 Dan: 25/09/2018 Tuesday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 13 iBrojac: 16 Dan: 26/09/2018 Wednesday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 14 iBrojac: 17 Dan: 27/09/2018 Thursday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 15 iBrojac: 18 Dan: 28/09/2018 Friday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 20 iBrojac: 25 Dan: 05/10/2018 Friday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 21 iBrojac: 28 Dan: 08/10/2018 Monday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 23 iBrojac: 30 Dan: 10/10/2018 Wednesday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 25 iBrojac: 32 Dan: 12/10/2018 Friday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 26 iBrojac: 35 Dan: 15/10/2018 Monday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 30 iBrojac: 39 Dan: 19/10/2018 Friday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 31 iBrojac: 42 Dan: 22/10/2018 Monday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 32 iBrojac: 43 Dan: 23/10/2018 Tuesday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 34 iBrojac: 45 Dan: 25/10/2018 Thursday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 35 iBrojac: 46 Dan: 26/10/2018 Friday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 36 iBrojac: 49 Dan: 29/10/2018 Monday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 60 iBrojac: 81 Dan: 30/11/2018 Friday Tacan datum 2
DatumPocetka: 10/09/2018 BrojDanaOdmora: 61 iBrojac: 84 Dan: 03/12/2018 Monday Tacan datum 2
p.s. Nadam se da gore nisam nesto izostavio... anyway fresh coffeeeee edition