Avatar billede Nervatos Seniormester
02. august 2018 - 10:11 Der er 1 kommentar og
1 løsning

Skrive uger i stedet for måneder VBA

Hej med Jer

Jeg har forsøgt at rette i en kode, som jeg fandt på nettet - men desværre virker den ikke helt efter hensigten.
Måske er der én som kan hjælpe med at få den optimeret samt få den til at fungere.

Sub x1()
    Dim x As Integer
    ReDim Months(1 To 12)
    Dim MonthYear As String, txt As String, wm As String
    Dim InputDate As Date, MonthYearDay As Date
    Dim i As Long, intDaysInMonth As Long, j As Long
    Dim MyArray As Variant
    Dim arr As New Collection, a
   
    Months = Array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December")
   
    For Each c In Worksheets("Ark1").Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
        For x = 0 To 11
            If UCase(c.Value) = UCase(Months(x)) Then
                ReDim MyArray(0 To 31)
                j = 0
               
                InputDate = RetrieveDate(c.Value)
                MonthYear = Month(InputDate) & "/" & Year(InputDate)
                intDaysInMonth = Day(DateSerial(Year(MonthYear), Month(MonthYear) + 1, 0))
               
                For i = 1 To intDaysInMonth
                    MonthYearDay = DateSerial(Year(InputDate), Month(InputDate), i)
                    MyArray(j) = Application.WorksheetFunction.WeekNum(MonthYearDay)
                    j = j + 1
                Next i

                ReDim Preserve MyArray(0 To j - 1)
                On Error Resume Next
                For Each a In MyArray
                    arr.Add a, CStr(a)
                Next
               
                For i = 1 To arr.Count
                    If wm = "" Then
                        wm = arr(i)
                    Else
                        wm = wm & "+" & arr(i)
                    End If
                Next i
               
                If Right(wm, 1) = "+" Then
                    MsgBox "Uge " & Left(wm, Len(wm) - 1)
                Else
                    MsgBox "Uge " & wm
                End If
               
                wm = ""
            End If
        Next x
    Next c
End Sub

Function RetrieveDate(sDate As String) As String
    Dim i As Integer
    ReDim Months(1 To 12)
    ReDim StartMonths(1 To 12)
    ReDim EndMonths(1 To 12)
    Months = Array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December")
    StartMonths = Array("01-01", "01-02", "01-03", "01-04", "01-05", "01-06", "01-07", "01-08", "01-09", "01-10", "01-11", "01-12")
    For i = 0 To 11
        If UCase(sDate) = UCase(Months(i)) Then
                RetrieveDate = StartMonths(i) & "-" & Year(Date)
            Exit For
        End If
    Next
End Function

Den skriver egentlig det rigtige output på første måned, efterfølgende bliver der flere tilføjet.

Januar: Uge 1+2+3+4+5
Februar: Uge 1+2+3+4+5+6+7+8+9
osv

Jeg ville gerne have den til:
Januar: Uge 1+2+3+4+5
Februar: Uge 5+6+7+8+9
osv

PFT. :)
Avatar billede madklub Guru
02. august 2018 - 10:28 #1
Er det ikke fordi  For i = 1 To intDaysInMonth starter fra 1 for hver måned ?
Avatar billede Nervatos Seniormester
03. august 2018 - 12:10 #2
Har løst det ved at lave den til en selvstændig function. Så tror ikke, at det er den, som er problemet.

For hvis den starter med en anden måned, så kører den videre derfra.
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