Avatar billede HHA Professor
11. november 2020 - 15:07 Der er 2 kommentarer og
1 løsning

Kalender og 53 uger

Har et ark hvor man kan skrive nogle datoer ind og så viser den området mellem de to datoer.
Når den viser det område, ligger henter den nogle data på en anden fane i arket, som den så ligger ind i det område som man har valgt at den skal vise.
Men den skifter fra uge 53 til uge 2 her til årsskiftet....
Jeg har ikke selv lavet det, men tror det er den VBA her, der laver kalenderen.

Nogen der ved hvor den er gal, vedr. de med 53 uger?

Sub Lav_Kalender_Ny()

    Dim ws3 As Worksheet, ws1 As Worksheet
    Dim NumDates As Integer, ColumnCount As Integer, LWeekday As Integer, Count As Integer, LWeek As Integer, ThisMonth As Integer, FirstMonth As Integer, RemainderOfPeriode As Integer, OldPeriodColumnCount As Integer
   
    Dim LDate As Date, FirstDate As Date
   
    Dim months(12) As String
   
    Dim VDate As Boolean
   
    Set ws3 = Sheets("Vis_Oversigt")
    Set ws1 = Sheets("Indtastningsark")
   
    VDate = IsDate(Range("C4"))
 
    If VDate = False Then
        MsgBox ("Start datoen er ikke en gyldig dato")
        Exit Sub
    End If
   
    VDate = IsDate(Range("E4"))
 
    If VDate = False Then
        MsgBox ("Slut datoen er ikke en gyldig dato")
        Exit Sub
    End If
   
       
    If ws3.Cells(4, 6) > 400 Then
        MsgBox ("Venligst vµlg en periode pÕ max 400 dage")
        Exit Sub
    End If
   
    If ws3.Cells(4, 6) < 0 Then
        MsgBox ("Din slut dato(PeriodeSlut) er f°r din start dato(PeriodeStart)")
        Exit Sub
    End If
   
    ActiveSheet.Unprotect Password:="5980"
       
    ws3.Cells.Borders.LineStyle = xlLineStyleNone
       
    Count = ws3.Range("B" & Rows.Count).End(xlUp).Row 'Finder antallet af indf°rte rµkker pÕ sheet Vis_Oversigt
    Count = Count + 1
   
   
    OldPeriodColumnCount = ws1.Cells(11, 26)
   
    Range(Cells(1, 10), Cells(4, OldPeriodColumnCount + 10)).UnMerge
    Range(Cells(1, 10), Cells(Count, OldPeriodColumnCount + 10)).ClearContents
    Range(Cells(1, 10), Cells(Count, OldPeriodColumnCount + 10)).ColumnWidth = 8.43
    Range(Cells(1, 10), Cells(Count, OldPeriodColumnCount + 10)).Interior.ColorIndex = xlNone
         
    NumDates = ws3.Cells(4, "F").Value
    ColumnCount = NumDates + 10
 
    months(1) = "Jan"
    months(2) = "Feb"
    months(3) = "Mar"
    months(4) = "Apr"
    months(5) = "MaJ"
    months(6) = "Jun"
    months(7) = "Jul"
    months(8) = "Aug"
    months(9) = "Sep"
    months(10) = "Okt"
    months(11) = "Nov"
    months(12) = "Dec"

   
    For j = 10 To ColumnCount
        ws3.Columns(j).ColumnWidth = 1
    Next j
   
    LDate = ws3.Cells(4, "C").Value
    FirstDate = LDate
   
    For j = 10 To ColumnCount
       
        ws3.Range(Cells(3, 10), Cells(1, ColumnCount)).HorizontalAlignment = xlCenter
        ws3.Range(Cells(4, 10), Cells(2, ColumnCount)).HorizontalAlignment = xlCenter
        ws3.Range(Cells(5, 10), Cells(3, ColumnCount)).HorizontalAlignment = xlCenter
       
        LWeekday = WeekDay(LDate, vbMonday)
        LWeek = WorksheetFunction.WeekNum(LDate, vbSunday)
        ThisMonth = Month(LDate)
        FirstMonth = Month(FirstDate)
        RemainderOfPeriode = ColumnCount - j
       
               
        ws3.Cells(3, 10).Value = months(FirstMonth)
       
       
        If j > 10 Then
            If Month(LDate) = Month(LDate - 1) Then
                ws3.Range(Cells(3, j - 1), Cells(3, j)).Merge
                ws3.Cells(3, j).Borders(xlEdgeRight).LineStyle = xlContinuous
            End If
           
            If Month(LDate) <> Month(LDate - 1) Then
                ws3.Cells(3, j).Value = months(ThisMonth)
            End If
           
        End If
           
        If LWeekday = 1 Then
            ws3.Cells(5, j).Value = "m"
            ws3.Cells(4, j).Value = LWeek
           
            If j = 10 Then
                               
                If RemainderOfPeriode < 7 Then
                    ws3.Range(Cells(4, j), Cells(4, j + RemainderOfPeriode)).Merge
                Else
                    ws3.Range(Cells(4, j), Cells(4, j + 6)).Merge
                End If
                             
            End If
           
            If j > 10 Then
                If RemainderOfPeriode < 7 Then
                    ws3.Range(Cells(4, j), Cells(4, j + RemainderOfPeriode)).Merge
                Else
                    ws3.Range(Cells(4, j), Cells(4, j + 6)).Merge
                End If
               
            End If
               
        End If
       
                   
        If LWeekday = 2 Then
            ws3.Cells(5, j).Value = "t"
           
            If j = 10 Then
                ws3.Cells(4, j).Value = LWeek
               
                If RemainderOfPeriode < 6 Then
                    ws3.Range(Cells(4, j), Cells(4, j + RemainderOfPeriode)).Merge
                Else
                    ws3.Range(Cells(4, j), Cells(4, j + 5)).Merge
                End If
               
            End If
           
        End If
       
        If LWeekday = 3 Then
            ws3.Cells(5, j).Value = "o"
           
            If j = 10 Then
                ws3.Cells(4, j).Value = LWeek
               
                If RemainderOfPeriode < 5 Then
                    ws3.Range(Cells(4, j), Cells(4, j + RemainderOfPeriode)).Merge
                Else
                    ws3.Range(Cells(4, j), Cells(4, j + 4)).Merge
                End If
            End If
           
        End If
       
        If LWeekday = 4 Then
            ws3.Cells(5, j).Value = "t"
           
            If j = 10 Then
                ws3.Cells(4, j).Value = LWeek
               
                If RemainderOfPeriode < 4 Then
                    ws3.Range(Cells(4, j), Cells(4, j + RemainderOfPeriode)).Merge
                Else
                    ws3.Range(Cells(4, j), Cells(4, j + 3)).Merge
                End If
                   
            End If
           
        End If
       
        If LWeekday = 5 Then
            ws3.Cells(5, j).Value = "f"
           
            If j = 10 Then
                ws3.Cells(4, j).Value = LWeek
               
                If RemainderOfPeriode < 3 Then
                    ws3.Range(Cells(4, j), Cells(4, j + RemainderOfPeriode)).Merge
                Else
                    ws3.Range(Cells(4, j), Cells(4, j + 2)).Merge
                End If
            End If
           
        End If
       
        If LWeekday = 6 Then
            ws3.Cells(5, j).Value = "l"
           
            If j = 10 Then
                ws3.Cells(4, j).Value = LWeek
               
                If RemainderOfPeriode < 2 Then
                    ws3.Range(Cells(4, j), Cells(4, j + RemainderOfPeriode)).Merge
                Else
                    ws3.Range(Cells(4, j), Cells(4, j + 1)).Merge
                End If
            End If
           
        End If
       
        If LWeekday = 7 Then
            ws3.Cells(5, j).Value = "s"
           
            If j = 10 Then
                ws3.Cells(4, j).Value = LWeek - 1
             
            End If
           
        End If
       
       
        LDate = DateAdd("d", 1, LDate)
     
       
       
    Next j
   
    Sheets("Indtastningsark").Select
    ActiveSheet.Unprotect Password:="5980"
   
    ws1.Cells(9, 26).Value = ws3.Cells(4, 3).Value
    ws1.Cells(10, 26).Value = ws3.Cells(4, 5).Value
    ws1.Cells(11, 26).Value = ws3.Cells(4, 6).Value
   
    ActiveSheet.Protect Password:="5980", DrawingObjects:=True, Contents:=True, Scenarios:=True _
    , AllowSorting:=True, AllowFiltering:=True
    Sheets("Vis_Oversigt").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub
Avatar billede madklub Guru
11. november 2020 - 15:13 #1
Der er 53 uger i 2020, så dér er ikke noget galt.
Springer den uge 1 over?
Avatar billede jens48 Ekspert
11. november 2020 - 16:13 #2
Find den linje der hedder

    LWeek = WorksheetFunction.WeekNum(LDate, vbSunday)
   
og ret den til

  LWeek = WorksheetFunction.IsoWeekNum(LDate)
Avatar billede HHA Professor
11. november 2020 - 19:40 #3
jens48

Takker, det var lige det der skulle til.

madklub
Ja, det var uge 1 den missede.
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