19. juli 2014 - 15:45Der er
18 kommentarer og 1 løsning
Function/Sub
Hej eksperter!
Har brug for en kode der kan finde alle søndage på et år.
Søndagen er placeret i regne arket sådan her. AB5:AC5 = Åben / Lukket. AB7:AC7 = Søndag. AB8:AC8 = Dato.
fks. kan jeg bruge denne her del sammen med min helligdag function. Men den virker desværre kun i 2014. Så den skal laves om hvert år, men er det muligt af der er en der kan virker ligegyldigt hvad år det er?
Case DateSerial(InputYear, 1, 4): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 1, 11): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 1, 18): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 1, 25): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 2, 1): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 2, 8): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 2, 15): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 2, 22): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 3, 1): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 3, 8): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 3, 15): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 3, 22): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 3, 29): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 4, 5): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 4, 12): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 4, 19): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 4, 26): HelligdagsNavn= "ÅBEN" Case DateSerial(InputYear, 5, 3): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 5, 10): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 5, 17): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 5, 24): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 5, 31): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 6, 7): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 6, 14): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 6, 21): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 6, 28): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 7, 5): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 7, 12): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 7, 19): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 7, 26): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 8, 2): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 8, 9): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 8, 16): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 8, 23): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 8, 30): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 9, 6): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 9, 13): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 9, 20): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 9, 27): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 10, 4): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 10, 11): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 10, 18): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 10, 25): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 11, 1): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 11, 8): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 11, 15): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 11, 22): HelligdagsNavn = "LUKKET" Case DateSerial(InputYear, 11, 29): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 12, 6): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 12, 13): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 12, 20): HelligdagsNavn = "ÅBEN" Case DateSerial(InputYear, 12, 27): HelligdagsNavn = "ÅBEN"
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
jeg lavede i 2004 noget asp-kode/kalender, der beregnede alle helligdage i et år - det kan du bruge som udgangspunkt til din kode, søndage fremgår også. ----- god arbejdslyst -------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head> <title></title> <LINK REL="stylesheet" type="text/css" href="inkl/main.css"> <script src='inkl/header.js' language='JavaScript1.2' type='text/javascript'></script> </head><body onLoad="showall();"> <!-- menu --> <span id='xawmMenuPathImg-menu' style='position:absolute;top:-50px'><img name='awmMenuPathImg-menu' id='awmMenuPathImg-menu' src='inkl/awmmenupath.gif' alt=''></span><script type='text/javascript'>var MenuLinkedBy='AllWebMenus [2]', awmBN='526'; awmAltUrl='';</script><script src='inkl/menu.js' language='JavaScript1.2' type='text/javascript'></script><script type='text/javascript'>awmBuildMenu();</script> <!-- sidelayout --> <table width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td align="center"><br> <!-- toptekst --> <table width="720" cellspacing="0" cellpadding="0" border="5"><tr><td> <table width="100%" cellspacing="0" cellpadding="2" border="0"> <tr> <td width="100" align="left" valign="middle" id="toplogo"> </td> <td width="100%" align="center" valign="middle"><img src="images/it-works.jpg" width="463" height="96" alt="" border="0" align=""></td> <td width="100" align="center" valign="bottom" id="toptid"> </td> </tr> </table> </td></tr></table> <!-- Menulinie --> <table width="720" cellspacing="0" cellpadding="2" border="1"><tr> <td height="22" valign="middle" align="left"><span id="awmAnchor-menu" class="awmAnchor"> </span></td> </tr></table> <!-- Her er siden --> <table width="720" cellspacing="0" cellpadding="2" border="1"><tr><td class="lilletxt" align="center"><br><br> <% sidenavn = LCase(Request.Servervariables("SCRIPT_NAME")) Session.LCID = "1030"
Function getdaysinmonth(strmonth,stryear) datoen=cdate("01-" & strmonth & "-" & stryear) datoen=dateadd("m",1,datoen) datoen=dateadd("d",-1,datoen) getDaysInMonth=datepart("d",datoen) End Function
Function SkrivStortBogstav(tekst) SkrivStortBogstav=ucase(left(tekst,1)) & lcase(mid(tekst,2,len(tekst))) End Function
Function Helligdage(strdato) aar=CInt(datepart("yyyy",strdato)) 'skal være mellem 1901 & 2199 m= array(0,1,4,4,0,2,5,0,3,6,1,4,6) gyldental=(aar+1) mod 19 if gyldental=0 then gyldental=19 epakt= ((gyldental-1)*11)mod 30 if aar>1899 and aar<2200 then epakt=epakt-1 epakt=epakt mod 30 DagTilFj=80 if gyldental=6 or gyldental=17 then DagTilFj=81 alder=(epakt+DagTilFj) mod 30 if alder<=13 then antaldg=13-alder if alder>13 then antaldg=43-alder fuldmaane=21+antaldg if fuldmaane<=31 then dato=fuldmaane maaned=3 else dato=fuldmaane-31 maaned=4 end if korrektion=(5+aar+aar\4-aar\100+aar\400) mod 7 if aar/4=int(aar/4) and (maaned=1 or maaned=2) then if aar/100<>int(aar/100) then korrektion=korrektion-1 if aar/100 =int(aar/100) then korrektion=korrektion-1 end if u=(dato+m(maaned)+korrektion)mod 7 paaske=dato+7-u if paaske>31 then paaske=paaske-31 maaned=4 end if str = paaske & "-" & maaned &"-"& aar datoto = cdate("24-12-" & datepart("yyyy",strdato)) juldag = weekday(datoto, vbMonday) soendag = dateadd("d",0-juldag,datoto) Hellig="" if strdato = cdate(str)-49 then Hellig = Hellig & ", Fastelavn" if strdato = cdate(str)-7 then Hellig = Hellig & ", Palmesøndag" if strdato = cdate(str)-3 then Hellig = Hellig & ", Skærtorsdag" if strdato = cdate(str)-2 then Hellig = Hellig & ", Langfredag" if strdato = cdate(str) then Hellig = Hellig & ", Påskedag" if strdato = cdate(str)+1 then Hellig = Hellig & ", 2. Påskedag" if strdato = cdate(str)+26 then Hellig = Hellig & ", St. Bededag" if strdato = cdate(str)+39 then Hellig = Hellig & ", Kr. Himmelfartsdag" if strdato = cdate(str)+49 then Hellig = Hellig & ", Pinsedag" if strdato = cdate(str)+50 then Hellig = Hellig & ", 2. Pinsedag" if strdato = cdate("1-1-" & datepart("yyyy",strdato)) then Hellig = Hellig & ", Nytårsdag" if strdato = cdate("5-6-" & datepart("yyyy",strdato)) then Hellig = Hellig & ", Grundlovsdag, Fars dag" if strdato = cdate("24-12-" & datepart("yyyy",strdato)) then Hellig = Hellig & ", Juleaften" if strdato = cdate("25-12-" & datepart("yyyy",strdato)) then Hellig = Hellig & ", Juledag" if strdato = cdate("26-12-" & datepart("yyyy",strdato)) then Hellig = Hellig & ", 2. Juledag" if strdato = cdate("31-12-" & datepart("yyyy",strdato)) then Hellig = Hellig & ", Nytårsaften" if strdato = soendag then Hellig = Hellig & ", 4. søndag i Advent" if strdato = dateadd("ww",-1,soendag) then Hellig = Hellig & ", 3. søndag i Advent" if strdato = dateadd("ww",-2,soendag) then Hellig = Hellig & ", 2. søndag i Advent" if strdato = dateadd("ww",-3,soendag) then Hellig = Hellig & ", 1. søndag i Advent"
if left(Hellig,1) = "," then Hellig = mid(Hellig,2,len(Hellig)) if len(Hellig) > 0 then Hellig = trim(Hellig) Helligdage = Hellig End Function
strtoday = Date() stryear = Year(strtoday) strmonth = Month(strtoday) If Request("month") <> "" Then strmonth = request("month") If Request("year") <> "" Then stryear = request("year")
Uddrag fra opbygning af Årskalender 1900 - 1999 Public Sub opbygKalender() ... ...' påskeDag = beregnPåske(aktuelleÅr) OpsætMånedsVærdier opsætningAfHelligDage påskeDag
... ... End Sub Public Function beregnPåske(aar)
Rem Beregning af Paaske - 1900 - 2099 Rem ================================= Dim d, E, Q b1 = aar Mod 19 d = 225 - (11 * b1)
If d > 50 Then While d > 50 d = d - 30 Wend End If
If d > 48 Then d = d - 1 End If
E = (aar + Int(aar / 4) + d + 1) Mod 7
Q = d + 7 - E
If Q < 32 Then m = "03" Else m = "04" Q = Q - 31 End If
beregnPåske = CStr(Q) + "-" + m + "-" + CStr(aar) End Function Public Sub opsætningAfHelligDage(påskeDag) Rem Faste fhDageNavn = Array("Nytårsdag", "Grundlovsdag", "Juleaften", "Juledag", "2. Juledag", "Nytårsaften") fhDageDato = Array("01-01", "05-06", "24-12", "25-12", "26-12", "31-12")
Rem Skærtorsdag vhdageDato(0) = Format(DateAdd("d", -3, påskeDag), "dd-mm")
Rem Langfredag vhdageDato(1) = Format(DateAdd("d", -2, påskeDag), "dd-mm")
Rem Påskedag vhdageDato(2) = Format(påskeDag, "dd-mm")
Rem 2. Påskedag vhdageDato(3) = Format(DateAdd("d", 1, påskeDag), "dd-mm")
Rem St. Bededag vhdageDato(4) = Format(DateAdd("ww", 4, vhdageDato(1)), "dd-mm")
Rem Kr. Himmelfart vhdageDato(5) = Format(DateAdd("ww", 6, vhdageDato(0)), "dd-mm")
Rem Pinsedag vhdageDato(6) = Format(DateAdd("ww", 7, påskeDag), "dd-mm")
Rem 2. Pinsedag vhdageDato(7) = Format(DateAdd("d", 1, vhdageDato(6)), "dd-mm") End Sub
Synes godt om
Slettet bruger
19. juli 2014 - 18:35#3
Ser ikke ud til af jeg kan bruge det.
Det som jeg skal bruge det til er en vagtplan. (en uge af gangen)
Min function med helligdage virker. Så den del har jeg.
for resten koden i spørgsmålet virker fra 29-12-2014 til 31-12-2015. og ikke år 2014. (taste fejl)
Men ville gerne have af den finder alle søndage på et år, Vil sige starter vi med en dato Mandag D. 29-12-2014. Så finder den selv ud af D. 04-01-2015 er en søndag osv. hvor med i function kan jeg så evt. skrive hvilke søndage der er åben eller lukket.
er der flest lukket eller åben? lav en liste med den mindste, og hvis den ikke er på listen så er det det andet. dvs du har fx Case DateSerial(InputYear, 11, 22): HelligdagsNavn = "LUKKET" og slutter Case med Case else HelligdagsNavn = "ÅBEN"
altså - er der ikke lukket, så er der åbent.
Synes godt om
Slettet bruger
19. juli 2014 - 18:48#5
#claes57 problemet er så her at datoen som er (InputYear, 11, 22) er ikke en søndag i 2016, 2017 osv.
du kan lave en funktion, der giver om en dato i et år er søndag - men du kan ikke skrive 'lukket' bagefter. Du bliver nødt til at have en liste med lukkede dage. Hvis du altid har lukket, pånær første og sidste søndag i en måned hvor der er åbent, så er det til at beregne.
Synes godt om
Slettet bruger
19. juli 2014 - 19:07#7
#claes57 som det er nu. Så er det første og sidste søndag åben. Men i december er alle søndage åben.
så forklar lige Søndagen er placeret i regne arket sådan her. AB5:AC5 = Åben / Lukket. AB7:AC7 = Søndag. AB8:AC8 = Dato. Hvorfor to felter og kolon - fx kan dato stå i AB8?
evt lav et skæmdump af området, og læg billedet ud på www.gupl.dk og link herind. Når du har trykket på Printscreen, så start fx Paint og tryk Ctrl+v for at sætte udklip ind - gem billedet på pc, og derefter upload til gulp - så får du der et link, som du sætter ind her.
Se koden her Function HelligdagsNavn(lngdate As Long) As String ' bruger funktionen Påskedag Dim InputYear As Integer, PD As Long, OK As Boolean, Uge As Integer, Dag As Integer If lngdate <= 0 Then lngdate = Date InputYear = Year(lngdate) PD = Påskedag(InputYear) OK = True Select Case lngdate ' Tester nedenstående påstande mod datoen Case DateSerial(InputYear, 1, 1): HelligdagsNavn = "Nytårsdag" Case PD - 3: HelligdagsNavn = "Skærtorsdag" Case PD - 2: HelligdagsNavn = "Langfredag" Case PD: HelligdagsNavn = "Påskedag" Case PD + 1: HelligdagsNavn = "2. Påskedag" Case DateSerial(InputYear, 6, 5): HelligdagsNavn = "Grundlovsdag" Case PD + 26: HelligdagsNavn = "Store Bededag" Case PD + 39: HelligdagsNavn = "Kristi Himmelfartsdag" Case PD + 49: HelligdagsNavn = "Pinsedag" Case PD + 50: HelligdagsNavn = "2. Pinsedag" Case DateSerial(InputYear, 12, 24): HelligdagsNavn = "Juleaftensdag" Case DateSerial(InputYear, 12, 25): HelligdagsNavn = "1.Juledag" Case DateSerial(InputYear, 12, 26): HelligdagsNavn = "2.Juledag" Case DateSerial(InputYear, 12, 31): HelligdagsNavn = "Nytårsaftensdag" Case Else End Select
Uge = DatePart("ww", lngdate, vbMonday, vbFirstFourDays) Dag = Weekday(lngdate) If Dag = 1 Then Select Case Uge Case 1, 4, 5, 8, 9, 13, 14 ' ugenummer hvor der er Åben, skriv selv resten HelligdagsNavn = "ÅBEN" Case Else HelligdagsNavn = "LUKKET" End Select End If
jeg har rettet #9 så den selv finder første/sidste søndag og december
Function HelligdagsNavn(lngdate As Long) As String ' bruger funktionen Påskedag Dim InputYear As Integer, PD As Long, OK As Boolean, Uge As Integer, Dag As Integer If lngdate <= 0 Then lngdate = Date InputYear = Year(lngdate) PD = Påskedag(InputYear) OK = True Select Case lngdate ' Tester nedenstående påstande mod datoen Case DateSerial(InputYear, 1, 1): HelligdagsNavn = "Nytårsdag" Case PD - 3: HelligdagsNavn = "Skærtorsdag" Case PD - 2: HelligdagsNavn = "Langfredag" Case PD: HelligdagsNavn = "Påskedag" Case PD + 1: HelligdagsNavn = "2. Påskedag" Case DateSerial(InputYear, 6, 5): HelligdagsNavn = "Grundlovsdag" Case PD + 26: HelligdagsNavn = "Store Bededag" Case PD + 39: HelligdagsNavn = "Kristi Himmelfartsdag" Case PD + 49: HelligdagsNavn = "Pinsedag" Case PD + 50: HelligdagsNavn = "2. Pinsedag" Case DateSerial(InputYear, 12, 24): HelligdagsNavn = "Juleaftensdag" Case DateSerial(InputYear, 12, 25): HelligdagsNavn = "1.Juledag" Case DateSerial(InputYear, 12, 26): HelligdagsNavn = "2.Juledag" Case DateSerial(InputYear, 12, 31): HelligdagsNavn = "Nytårsaftensdag" Case Else End Select
UgeDag = Weekday(lngdate) NrDag = DatePart("d", lngdate) HelligdagsNavn = "LUKKET" If UgeDag = 1 Then If DatePart("mm", lngdate) = 12 Then ' december altid åbent HelligdagsNavn = "ÅBEN" Else If NrDag <= 7 Then ' første søndag i måneden HelligdagsNavn = "ÅBEN" Else ' find måneds sidste dag NxtMd = DateAdd("m", lngdate) StartNxtMd = CDate("1 " & DatePart("mmm", NxtMd) & " " & DatePart("yyyy", NxtMd)) SlutMd = DateAdd("d", -1, StartNxtMd) ' sidste søndag i måned If NrDag >= DatePart("d", SlutMd) - 6 Then HelligdagsNavn = "ÅBEN" End If End If End If End If OK = False End Function
Function HelligdagsNavn(lngdate As Long) As String ' bruger funktionen Påskedag Dim InputYear As Integer, PD As Long, OK As Boolean, Uge As Integer, Dag As Integer If lngdate <= 0 Then lngdate = Date InputYear = Year(lngdate) PD = Påskedag(InputYear) OK = True Select Case lngdate ' Tester nedenstående påstande mod datoen Case DateSerial(InputYear, 1, 1): HelligdagsNavn = "Nytårsdag" Case PD - 3: HelligdagsNavn = "Skærtorsdag" Case PD - 2: HelligdagsNavn = "Langfredag" Case PD: HelligdagsNavn = "Påskedag" Case PD + 1: HelligdagsNavn = "2. Påskedag" Case DateSerial(InputYear, 6, 5): HelligdagsNavn = "Grundlovsdag" Case PD + 26: HelligdagsNavn = "Store Bededag" Case PD + 39: HelligdagsNavn = "Kristi Himmelfartsdag" Case PD + 49: HelligdagsNavn = "Pinsedag" Case PD + 50: HelligdagsNavn = "2. Pinsedag" Case DateSerial(InputYear, 12, 24): HelligdagsNavn = "Juleaftensdag" Case DateSerial(InputYear, 12, 25): HelligdagsNavn = "1.Juledag" Case DateSerial(InputYear, 12, 26): HelligdagsNavn = "2.Juledag" Case DateSerial(InputYear, 12, 31): HelligdagsNavn = "Nytårsaftensdag" Case Else End Select
Uge = DatePart("ww", lngdate, vbMonday, vbFirstFourDays) Dag = Weekday(lngdate) If Dag = 1 Then If Month(lngdate) <> Month(lngdate - 7) Or Month(lngdate) <> Month(lngdate + 7) Then ' 1. og sidste søndag i måneden HelligdagsNavn = "ÅBEN" ElseIf Month(lngdate) = 12 Then HelligdagsNavn = "ÅBEN" Else HelligdagsNavn = "LUKKET" End If End If
OK = False End Function
Synes godt om
Slettet bruger
19. juli 2014 - 21:14#16
#Cleas57 Når jeg køre din function så siger den "Compile error: Argument not optional" - ved ligne NxtMd = DateAdd("m", lngdate) og "DateAdd" er markeret.
#kabbak Din kode køre som den skal.
I har givet gode bud begge og ligner rigtig meget hinanden. Ville gerne lige teste Cleas47 function inden jeg afgiver point.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.