Avatar billede jlemming Nybegynder
02. januar 2008 - 15:59 Der er 4 kommentarer og
1 løsning

Kalender 2008

Tillad mig her i starten af det nye år, at gøre opmærksom på kabbak's kalender. (jeg mener den er det værd). Har forresten tilladt mig at gøre ugenummerne blå.

kør kalender

Function Påskedag(InputYear As Integer) As Long ' Returnerer datoen for Påskedag
Dim d As Integer
    d = (((255 - 11 * (InputYear Mod 19)) - 21) Mod 30) + 21
    Påskedag = DateSerial(InputYear, 3, 1) + d + (d > 48) + 6 - _
        ((InputYear + InputYear \ 4 + d + (d > 48) + 1) Mod 7)
End Function

Function HelligdagsNavn(lngdate As Long) As String
' bruger funktionen Påskedag
Dim InputYear As Integer, PD As Long, OK As Boolean
    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 = "Julaftensdag"
        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
        OK = False
End Function
Public Sub Kalender()
Dim År As Integer, Dato As Date, DD As Long, Md As Variant, Dag As Variant, HD As String
Md = Array("", "Januar", "Febuar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December")
Dag = Array("", "S", "M", "T", "O", "T", "F", "L")
År = InputBox(" Indtast årstal for kalender")
Application.ScreenUpdating = False
Cells.MergeCells = False
Range("A1") = ""
Range("A1:R1").Interior.ColorIndex = 50
Range("A2:R2").Interior.ColorIndex = 38
Range("A3:R33").Font.ColorIndex = xlAutomatic
Range("A35:R65").Font.ColorIndex = xlAutomatic
For a = 1 To 6
Cells(2, a * 3) = Md(a)
Next
Dato = "01-01-" & År
For K = 1 To 18 Step 3
Call MDRamme(K, 2)
Olddato = Dato
For I = 3 To 33
DD = DateValue(Dato)
HD = HelligdagsNavn(DD)
Cells(I, K) = Dag(Weekday(Dato))
Select Case Weekday(Dato)
Case 1, 7
    Range(Cells(I, K), Cells(I, K + 2)).Interior.ColorIndex = 15
    Cells(I, K + 2) = HD
  Case 2
    Cells(I, K + 2) = ""
    Cells(I, K + 2) = "'" & DatePart("ww", Dato, vbMonday, vbFirstFourDays) & " " & HD
  If HD = "" Then
    Range(Cells(I, K), Cells(I, K + 2)).Interior.ColorIndex = xlNone
  Else
    Range(Cells(I, K), Cells(I, K + 2)).Interior.ColorIndex = 40
  End If
 
  Cells(I, K + 2).Font.ColorIndex = xlAutomatic
  If IsNumeric(Left(Cells(I, K + 2).Value, 1)) And IsNumeric(Mid(Cells(I, K + 2).Value, 1, 1)) Then
      Cells(I, K + 2).Characters(Start:=1, Length:=2).Font.ColorIndex = 5
  Else
      Cells(I, K + 2).Characters(Start:=1, Length:=1).Font.ColorIndex = 5
  End If
Case Else
  Cells(I, K + 2) = HD
  If HD = "" Then
  Range(Cells(I, K), Cells(I, K + 2)).Interior.ColorIndex = xlNone
  Else
  Range(Cells(I, K), Cells(I, K + 2)).Interior.ColorIndex = 40
  End If
End Select
Cells(I, K + 1) = Day(Dato)
HD = ""
Dato = Dato + 1
If Month(Dato) <> Month(Olddato) Then Exit For
Next
Next

' -----------------næste halve år -------------
Range("A34:R34").Interior.ColorIndex = 38
For a = 7 To 12
  Cells(34, (a - 6) * 3) = Md(a)
Next
For K = 1 To 18 Step 3
Call MDRamme(K, 34)
For I = 35 To 65
Olddato = Dato
DD = DateValue(Dato)
HD = HelligdagsNavn(DD)
Cells(I, K) = Dag(Weekday(Dato))
Select Case Weekday(Dato)
Case 1, 7
    Range(Cells(I, K), Cells(I, K + 2)).Interior.ColorIndex = 15
    Cells(I, K + 2) = HD
Case 2
  Cells(I, K + 2) = "'" & DatePart("ww", Dato, vbMonday, vbFirstFourDays) & " " & HD
  If HD = "" Then
    Range(Cells(I, K), Cells(I, K + 2)).Interior.ColorIndex = xlNone
  Else
    Range(Cells(I, K), Cells(I, K + 2)).Interior.ColorIndex = 40
  End If
  Cells(I, K + 2).Font.ColorIndex = xlAutomatic
  If IsNumeric(Left(Cells(I, K + 2).Value, 1)) And IsNumeric(Mid(Cells(I, K + 2).Value, 1, 1)) Then
      Cells(I, K + 2).Characters(Start:=1, Length:=2).Font.ColorIndex = 5
  Else
      Cells(I, K + 2).Characters(Start:=1, Length:=1).Font.ColorIndex = 5
  End If
Case Else
  Cells(I, K + 2) = HD
  If HD = "" Then
  Range(Cells(I, K), Cells(I, K + 2)).Interior.ColorIndex = xlNone
  Else
  Range(Cells(I, K), Cells(I, K + 2)).Interior.ColorIndex = 40
  End If
End Select
  HD = ""
  Cells(I, K + 1) = Day(Dato)
  Dato = Dato + 1
  If Month(Dato) <> Month(Olddato) Then Exit For
Next
Next
    Range("A1:R65").Select
    Range("R65").Activate
    Range("A3:R33,A35:R65").Font.Size = 8
    Range("A3:R33,A35:R65").Borders.LineStyle = xlContinuous
    Columns("A:R").Select
    Columns("A:R").EntireColumn.AutoFit
    Range("C:C,F:F,I:I,L:L,O:O,R:R").ColumnWidth = 10
    Rows("34:34").Select
    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
    Range("3:33,35:65").RowHeight = 12
    ActiveSheet.PageSetup.PrintTitleRows = "$1:$1"
  With ActiveSheet.PageSetup
        .Orientation = xlLandscape
        .Zoom = 120
        .TopMargin = Application.InchesToPoints(1)
        .BottomMargin = Application.InchesToPoints(0)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
    End With
    Range("A1:R1").Merge
    Range("A1:R1").Borders.LineStyle = xlContinuous
    Range("A1:R1").HorizontalAlignment = xlCenter
    Range("A1") = År
    Range("A1").Select
  Application.ScreenUpdating = True
End Sub
Sub MDRamme(KO, RK)
    Range(Cells(RK, KO), Cells(RK, KO + 2)).Select
        With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
End Sub
Avatar billede eckhardt Nybegynder
02. januar 2008 - 16:05 #1
måske et dumt spørgsmål

hvis jeg nu gerne vil bruge den hvordan så ?
Avatar billede jlemming Nybegynder
02. januar 2008 - 19:21 #2
åben et tomt ark, højre klik på ark navn (i bunden), vælg vis kode, indsæt denne kode, vend tilbage til arket, tryk alt+f8, du skulle nu kunne vælge kalender
Avatar billede sleeper Nybegynder
02. januar 2008 - 20:09 #3
Det er ikke andet end genialt

Tak jlemming, og kabbak som har designet det
Avatar billede eckhardt Nybegynder
02. januar 2008 - 20:27 #4
Mange tak

flot kaleder
Avatar billede jlemming Nybegynder
13. januar 2008 - 15:08 #5
lukket
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

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