Avatar billede Slettet bruger
19. juli 2014 - 15:45 Der 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"

Tak på forhånd.
Avatar billede claes57 Ekspert
19. juli 2014 - 16:13 #1
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">&nbsp;</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">&nbsp;</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">&nbsp;</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")

strdaysinmonth = getdaysinmonth(strmonth,stryear)
%>
<table border="0" bgcolor="#C0C0C0" width="490" height="145" style="border: 1px solid #000000;">
  <tr>
  <td class="lilletxt">
Kalender for <Select class="lilletxt" size="1"
                    id="months"
                    name="months"
                    onchange="if (browserID=='n'){months = document.getElementById('months'); years = document.getElementById('years');};location.href ='<%=sidenavn%>?month='+months.value+'&year='+years.value">
<%
    For i = 1 To 12
      Response.Write "<option value=" & i
      If CInt(strmonth) = i Then Response.Write " SELECTED"
      Response.Write "> " & SkrivStortBogstav(MonthName(i,false))
      Response.Write " </option>" & vbCrLf
    Next
%>
</Select>&nbsp;&nbsp;
<Select class="lilletxt" size="1"
        name="years"
        id="years"
        onchange="if (browserID=='n'){months = document.getElementById('months'); years = document.getElementById('years');};location.href ='<%=sidenavn%>?month='+months.value+'&year='+years.value">
<%
for i = CInt(stryear)-10 to CInt(stryear)+10
    Response.Write "<option value=" & i
    If CInt(stryear) = i Then Response.Write " SELECTED"
    Response.Write ">" & i & "</option>" & vbCrLf
next
%>
</Select>
</td><td align="right" class="lilletxt">
                    <a href="<%=sidenavn%>?month=<%=datepart("m",strtoday)%>&year=<%=datepart("yyyy",strtoday)%>"
                        title="Vis aktuel måneds kalender"
                        onMouseOver="window.status=''; return true"
                        onMouseOut="window.status=''">&nbsp;DD&nbsp;</a>
  </td>
  </tr>
  <tr>
    <td width="280" align="left" valign="top">
        <table cellpadding="0" cellspacing="0" border="0" bgcolor="#FFFFFF" width="100%" height="100%" style="border: 1px solid #000000;">
        <tr bgcolor="#CFCFCF">
<%
  for i=1 to 7
        response.write "<td align=""center"" width=""40"" class=""lilletxt""><b>"
      if i=7 then response.write "<font color=""#FF0000"">"
      response.write SkrivStortBogstav(left(weekdayname(i,false,vbMonday),3))
      if i=7 then response.write "</font>"
      response.write "</b></td>"
  next
%>
        </tr>
        <tr bgcolor="#CFCFCF"><td colspan="7"><hr></td></tr>
<!-- Kalender laves her -->
<%
datoen = CDate("01-" & strmonth & "-" & stryear)
firstday = Weekday(datoen, vbMonday)
aktday = 0
if (CInt(strmonth)=CInt(Month(strtoday))) and (CInt(stryear)=CInt(Year(strtoday))) then aktday = CInt(datepart("d",date))
tomme=firstday-1
if tomme>0 then
  response.write "<tr>" & vbCrLf
  lastmonth=cint(strmonth)-1
  lastyear=cint(stryear)
  if lastmonth=0 then
    lastmonth=12
    lastyear=lastyear-1
  end if
  for i=1 to tomme
    response.write "<td align=""center"" bgcolor=""#C0C0C0"" class=""lilletxt"" "
    response.write "onclick=""location.href ='" & sidenavn & "?month=" & lastmonth & "&year=" & lastyear & "'"""
    response.write "><font color=""#808080"">"
    response.write datepart("d",dateadd("d",i-(tomme+1),datoen))
    response.write "</font></td>" & vbCrLf
  next
end if
mddag=9-firstday
for i=1 to strdaysinmonth
  if i=aktday then
    strItToday = "<td class=""lilletxt"" align=""center"" style=""border: 1px solid #000000;""><font color=""#000000"">"
  else
    strItToday = "<td class=""lilletxt"" align=""center""><font color=""#000000"">"
  end if
  if (7+i-mddag) MOD 7 =6 then
    if i=aktday then
      strItToday = "<td class=""lilletxt"" align=""center"" bgcolor=""#FF8080"" style=""border: 1px solid #000000;""><font color=""#000000"">"
    else
      strItToday = "<td class=""lilletxt"" align=""center"" bgcolor=""#FF8080""><font color=""#000000"">"
    end if
  end if
  datoen = CDate(i & "-" & strmonth & "-" & stryear)
  strtxt = Helligdage(datoen)
  if CInt(strmonth)=5 and i>7 and i<15 and (7+i-mddag) MOD 7 = 6 then
    if strtxt="" then
      strtxt = "Mors dag"
    else
      strtxt = strtxt &  ", Mors dag"
    end if
  end if
  if len(strtxt) > 0 then
    if i=aktday then
      strItToday = "<td class=""lilletxt"" align=""center"" bgcolor=""#FF8080""style=""border: 1px solid #000000;"" onmouseover=""if (browserID=='n'){texter = document.getElementById('texter');}; texter.innerHTML='" & strtxt & "';"" onmouseout=""if (browserID=='n'){texter = document.getElementById('texter');}; texter.innerHTML='';""><font color=""#000000"">"
    else
      strItToday = "<td class=""lilletxt"" align=""center"" bgcolor=""#FF8080"" onmouseover=""if (browserID=='n'){texter = document.getElementById('texter');}; texter.innerHTML='" & strtxt & "';"" onmouseout=""if (browserID=='n'){texter = document.getElementById('texter');}; texter.innerHTML='';""><font color=""#000000"">"
    end if
  end if
  if (i-mddag) MOD 7 = 0 then response.write "<tr>" & vbCrLf
  response.write strItToday & i & "</td>" & vbCrLf
  if (i-mddag) MOD 7 = 6 then response.write "</tr>" & vbCrLf
next
if (firstday+strdaysinmonth-1) MOD 7 > 0 then
  nextmonth=cint(strmonth)+1
  nextyear=cint(stryear)
  if nextmonth=13 then
    nextmonth=1
    nextyear=nextyear+1
  end if
  for i=1 to 7-((firstday+strdaysinmonth-1) MOD 7)
    response.write "<td class=""lilletxt"" align=""center"" bgcolor=""#C0C0C0"""
    response.write "onclick=""location.href ='" & sidenavn & "?month=" & nextmonth & "&year=" & nextyear & "'"""
    response.write "><font color=""#808080"">" & i & "</font></td>" & vbCrLf
  next
  response.write "</tr>"
end if
%>
<!-- Kalender slut her -->
      </table>
        </td>
    <td valign="top" width="190">
    <table cellpadding="0" cellspacing="0" border="0" bgcolor="#FFFFFF" style="border: 1px solid #000000;" height="100%" width="100%">
    <tr bgcolor="#CFCFCF">
    <td class="lilletxt"><b>Dagens note:</b></td>
    </tr>
      <tr bgcolor="#CFCFCF"><td><hr></td></tr>
    <tr>
    <td height="100%" valign="top" class="lilletxt"><div class="lilletxt" id="texter" style="width:99%; height:99%;"></div></td>
    </tr>
    </table>
    </td>
  </tr>
</table>
<br><br>
Bare en simpel kalender med helligdage (beregnes korrekt i perioden 1900 til 2199).<br>
Den samlede kildekode til<a href="dl/kalender.zip" onMouseOver="window.status=''; return true" onMouseOut="window.status=''"> denne side </a>er her.
</td></tr></table>
<!-- bundtekst -->
<table width="720" cellspacing="0" cellpadding="0" border="5"><tr><td>
<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr>
<td width="150" id="webmaster" class="lilletxt">
<a href="kontakt.asp?who=webmaster" title="kontakt Webmaster"
  onMouseover="window.status='kontakt Webmaster';return true"
  onMouseout="window.status=''">&nbsp;Webmaster&nbsp;</a>
</td>
<td width="100%" align="center" class="lilletxt">&copy;&nbsp;IT-works&nbsp;2004</td>
<td width="150" align="right" id="ajour" class="lilletxt">&nbsp;</td>
</tr></table>
</td></tr></table>
<!-- sidelayout -->
</td></tr></table>
</body></html>
Avatar billede supertekst Ekspert
19. juli 2014 - 17:48 #2
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 Variable
    vhDageNavn = Array("Skærtorsdag", "Langfredag", "Påskedag", "2. Påskedag", "St. Bededag", "Kr. Himmelfart", "Pinsedag", "2. Pinsedag")
    vhdageDato = Array("", "", "", "", "", "", "", "")

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
Avatar billede 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.
Avatar billede claes57 Ekspert
19. juli 2014 - 18:46 #4
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.
Avatar billede 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.
Avatar billede claes57 Ekspert
19. juli 2014 - 19:05 #6
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.
Avatar billede 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.
Avatar billede claes57 Ekspert
19. juli 2014 - 19:19 #8
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.
Avatar billede kabbak Professor
19. juli 2014 - 19:32 #9
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

    OK = False
End Function
Avatar billede Slettet bruger
19. juli 2014 - 19:39 #10
#Cleas57
Pga. af tid. "mød" & "slut".
Blandt andet er der skjulte rækker/celler der opbevare data.
Evt. se her: http://files.myupload.dk/getfile/c4mvtw
Avatar billede Slettet bruger
19. juli 2014 - 20:11 #11
#Kabbak Godt bud, har lige siddet og legede med det, men når vi rammer et nyt år, så dur det ikke.
Avatar billede kabbak Professor
19. juli 2014 - 20:18 #12
nej, ikke hvis det ikke er de samme uger i har åben, men det er nemmere at rette
Avatar billede Slettet bruger
19. juli 2014 - 20:24 #13
Skal helst være uden rettelse når vi kommer i et nyt år.
(om så jeg skal have en skjult kalender i et ark)

Sidder og tænker om man kunne lave en function der søger om det er den første og sidste søndag i en mdr. og der med siger "åben"

Når vi så rammer december går den over og siger "åben" i hele mdr.?
og alle andre søndage siger den "lukket"
Avatar billede claes57 Ekspert
19. juli 2014 - 20:43 #14
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
Avatar billede kabbak Professor
19. juli 2014 - 20:43 #15
Sådan

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
Avatar billede 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.
Avatar billede claes57 Ekspert
20. juli 2014 - 02:32 #17
Jeg havde glemt et 1 tal, det skal være
NxtMd = DateAdd("m", 1, lngdate)
Avatar billede Slettet bruger
20. juli 2014 - 21:10 #18
Claes57 efter at jeg har rettet det, Så giver den bare lukket alle dage.

Så den mest velfungerende er nok kabbak function.
Avatar billede claes57 Ekspert
20. juli 2014 - 21:24 #19
fair nok - mit er noget tilrettet kode fra 2004
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester