Avatar billede lotte48 Nybegynder
25. januar 2005 - 20:59 Der er 3 kommentarer og
1 løsning

Ugenummer 53 i 2005

Opsummering af vejl. fra kabbak til at indsætte ugenummer i 2005,
som også virker, når der igen i 2010 er et år med uge 53 :-)

Sådan gjorde jeg:

Optag en macro... og gem den i den personlige projektmappe.
(hvis du ikke har den den personlige projektmappe endnu), så bliver den oprettet.

Slet nu den optagede makro og sæt funktionen ind i stedet, så har du den altid tilgængelig.

Alt-F11  (åbner Visual Basic editoren)
Marker Module1 og slet den optagne macrotekst.

Copy og paste funktionen ind i modulet:

Public Function UgeNr(Dato As Date) As Integer
UgeNr = Format(Dato, "ww", vbMonday, vbFirstFourDays)
End Function

klik på Excel-ikonet i VENSTRE øverste hjørne.

Luk Visual Basic editoren.
Vindue/Skjul så den personlige projektmappe er skjult.

I Excelfilen (Mappe1) anvendes funktionen nu sådan:
Skriv i A1: 1/1-2004
Skriv i B1: =PERSON.XLS!UGENR(A1)
Skriv i C1: =UGEDAG(A1)
Skriv i Formater/Celler/Brugerdefineret: ddd

Voila - der står 53 i B1
og der står lø i C1

Indsæt betinget format i A1, B1 og C1, så lørdag og søndag markeres med en farve:
Betingelse-1: Formlen er:  =ugedag(A1)=1 (vælg farve)
Betingelse-2: Formlen er:  =ugedag(A1)=7 (vælg farve)

Marker A1:C1  og træk ned til række 2.
Skriv i A2:  =a1+1
Marker A1:C1  og træk ned til række 366
Herefter skal blot årstallet i A1 rettes og
kalenderen opdaterer sig selv.

Så, nu har jeg skrevet min huskeseddel....
håber andre også får glæde af den....

Tak, til  kabbak, som lægger et svar og får sine points her.

Jeg hører gerne, hvis der er noget jeg kan gøre smartere
end det, jeg har gjort ....
Avatar billede kabbak Professor
25. januar 2005 - 21:07 #1
jeg henviser lige til tråden
http://www.eksperten.dk/spm/579466

det ser fint ud, det du har gjort ;-))
Avatar billede kabbak Professor
25. januar 2005 - 21:20 #2
Hvis du vil have en kalender, er der en her

Sæt koden i et modul, og kør makroen 'Kalender'.

Bare til orientering ;-))


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
ActiveSheet.Range("A1") = ""
Range("A1:R1").Interior.ColorIndex = 50
Range("A2:R2").Interior.ColorIndex = 38
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
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
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 = 12
    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 lotte48 Nybegynder
25. januar 2005 - 21:41 #3
Tusind tak.....
Jeg har lige været på VBA-kursus - og ligesom
mit private budget var øvestykke, da jeg skulle
lære Excel - så er en kalender mit nuværende
øvestykke - og der er bare SÅ mange ting at blive
klog på i den macro, som f.eks. at finde påskedag :-)
Avatar billede barin998dk Nybegynder
11. februar 2005 - 14:45 #4
Den kalender virker jo som en drøm... :-)

Men et lille spørgsmål...

Jeg arbejder i en kursusvirksomhed, hvor kursister sagtens kan deltage i et forløb, som varer et halvt års tid. Derfor kan der forekomme helligdage fra to forskellige årstal. (F.eks. julen i 2004 og påsken i 2005). Er der en snedig måde at omskrive helligdags-delfunktionen, så den ikke trækker årstallet fra påskedagsfunktionen, men tager årstallet direkte fra en indtastet dato og checker om det er en helligdag...???
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