Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Kalenderwoche VBA

Kalenderwoche VBA
14.07.2020 17:40:57
Frank
Hallo an alle,
ich habe ein Problem mit dem Ausrechnen bzw. Anzeigen der Kalenderwoche.
mit dieser Zeile füge ich die Kalenderwochen ein
  • Cells(2, Spalte).Value = Format(dDatum, "DDDD", vbMonday) & " - " & Format(dDatum, "ww", vbMonday)

  • so sieht es dann aus "Freitag - 1"
    das funktionier für das Jahr 2020 ohne Probleme, aber für 2021 geht das nicht, da der 01.01.2021 als Kalenderwoche 1 erkannt wird, aber dies müsste noch Kalenderwoche 53 sein.
    kann mir jemand dabei helfen was ich anders machen sollte, oder geht das nicht ?
    danke für eure Hilfe
    Frank
    Anzeige

    8
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Kalenderwoche VBA
    14.07.2020 18:05:19
    ralf_b
    warum nimmst du nicht die Kalenderwoche() Funktion?
    in vba heisst die worksheetfunction.weeknum()
    AW: Kalenderwoche VBA
    14.07.2020 19:47:06
    Frank
    Hallo,
    danke für die Antwort.
    Leider funktioniert die auch nicht bei 2021
    hier ist mal der Original Code (muss Tabellenblatt 1-12 vorhanden sein - für alle Monate)
    Option Explicit
    Sub Kalender_Farben_Datum_2()
    Dim Monat, Tag As Long
    Dim dDatum As Date
    Dim Spalte As Long
    Dim Jahr, Farbe, Schicht, f As String
    Dim wks As Long
    Application.ScreenUpdating = False
    Jahr = InputBox("Bitte Jahr eingeben", "Jahr", Year(Now) + 1)
    Schicht = InputBox("Welche Schicht wird gestartet?", "Farbe", "1, 2 oder 3")
    If Not IsNumeric(Schicht) Or Not IsNumeric(Jahr) Or Len(Jahr)  4 Or Len(Schicht)  1  _
    Then
    MsgBox "Falsche Eingabe. Bitte erneut versuchen.", vbOKOnly, "Falsche Eingabe"""
    Exit Sub
    End If
    Monat = 1
    Select Case Schicht
    Case 1: Farbe = 65535
    Case 2: Farbe = 49407
    Case 3: Farbe = 5296274
    End Select
    For wks = 1 To 12
    Sheets(wks).Activate
    'Datum
    With Range("H2:AL3")
    .Interior.Pattern = xlNone
    .ClearContents
    End With
    dDatum = DateSerial(Jahr, Monat, 1)
    Spalte = 8
    With ActiveSheet
    .Range("C2").Value = Jahr
    Do
    For Tag = 1 To 31
    With .Cells(2, Spalte)
    '### Färben ###
    If Weekday(dDatum) = 1 Or Weekday(dDatum) = 7 Then
    .Font.Bold = True
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlBottom
    .Orientation = 90
    .Font.Size = 11
    With .Interior
    .Pattern = xlGray50
    .PatternColorIndex = 2
    .Color = 255
    End With
    'Wochenende mit einfärben -
    'Zeile anpassen
    With Range(Cells(4, Spalte), Cells(48, Spalte)).Interior
    .Pattern = xlGray50
    .PatternColorIndex = 2
    .Color = 255
    End With
    Else
    'wenn nicht Wochenende, dann weiß
    With Range(Cells(4, Spalte), Cells(48, Spalte)).Interior
    .Pattern = xlAutomatic
    .PatternColorIndex = 2
    .Color = 16777215    'weiß
    End With
    f = Format(dDatum, "w", vbMonday)
    With .Interior
    .Color = Farbe
    .Pattern = xlAutomatic
    End With
    If f = 5 Then
    If Farbe = 65535 Then
    Farbe = 5296274    'Nachtschicht
    ElseIf Farbe = 5296274 Then
    Farbe = 49407    'Spätschicht
    ElseIf Farbe = 49407 Then
    Farbe = 65535    'Frühschicht
    End If
    f = 0
    End If
    .Font.Bold = False
    End If
    '### Datum eintragen ###
    If Weekday(dDatum) = 2 Or Day(dDatum) = 1 Then 'wenn Montag
    Cells(2, Spalte).NumberFormat = "General"
    Cells(2, Spalte).Value = Format(dDatum, "DDDD", vbMonday) & " -  _
    " & Format(dDatum, "ww", vbMonday)
    Else
    .NumberFormat = "dddd"
    .Value = dDatum
    End If
    With Cells(3, Spalte)
    .NumberFormat = "d."
    .Value = dDatum
    End With
    End With
    dDatum = dDatum + 1
    Spalte = Spalte + 1
    If Month(dDatum)  Monat Then Exit For
    Next Tag
    Loop While Month(dDatum) = Monat
    Range("A1").Select
    Monat = Monat + 1
    End With
    Next wks
    Sheets(1).Activate
    Application.ScreenUpdating = True
    End Sub
    

    ich bin für alle Änderungen und Verbesserungen offen
    danke
    Frank
    Anzeige
    AW: Kalenderwoche VBA
    14.07.2020 19:52:25
    Hajo_Zi
    in deinem Code fehlt die vorgeschlagene Funktion "worksheetfunction.weeknum()"

    AW: Kalenderwoche VBA
    14.07.2020 19:55:51
    Frank
    Hallo,
    auch damit habe ich es versucht, aber leider auch ohne Erfolg.
    ich habe es so versucht:
    Format(dDatum, "DDDD", vbMonday) & " - " & WorksheetFunction.WeekNum(dDatum)
    

    grüße
    Frank
    Anzeige
    AW: Kalenderwoche VBA
    14.07.2020 19:57:55
    Hajo_Zi
    Hallo Frank,
    WorksheetFunction.WeekNum(dDatum,21)
    Gruß Hajo
    AW: Kalenderwoche VBA
    14.07.2020 20:00:05
    Frank
    Hallo,
    na das sieht ja Spitze aus.
    danke dir
    AW: Kalenderwoche VBA
    14.07.2020 22:15:57
    ralf_b
    immer wieder gerne.
    Anzeige
    ;
    Anzeige
    Anzeige

    Infobox / Tutorial

    VBA zur Ermittlung der Kalenderwoche in Excel


    Schritt-für-Schritt-Anleitung

    Um die Kalenderwoche in Excel mit VBA zu ermitteln, kannst du den folgenden Code verwenden. Dieser Code verwendet die WorksheetFunction.WeekNum-Funktion, um die Wochennummer für ein angegebenes Datum zu erhalten:

    Sub KalenderwocheErmitteln()
        Dim dDatum As Date
        dDatum = InputBox("Bitte ein Datum eingeben (TT.MM.JJJJ):")
    
        ' Überprüfen, ob das Datum gültig ist
        If IsDate(dDatum) Then
            MsgBox "Die Kalenderwoche ist: " & WorksheetFunction.WeekNum(dDatum, vbMonday)
        Else
            MsgBox "Ungültiges Datum!"
        End If
    End Sub

    In diesem Beispiel wird die vba weeknum-Funktion zusammen mit der Eingabeaufforderung verwendet, um den Benutzer ein Datum anzugeben. Die Wochennummer wird dann in einer Meldung angezeigt.


    Häufige Fehler und Lösungen

    1. Fehler: Ungültiges Datum

      • Lösung: Stelle sicher, dass das eingegebene Datum im richtigen Format (TT.MM.JJJJ) vorliegt.
    2. Fehler: Falsche Kalenderwoche

      • Lösung: Verwende die Option 21 in der WorksheetFunction.WeekNum, um die ISO-Kalenderwoche zu berechnen:
        WorksheetFunction.WeekNum(dDatum, 21)
    3. Fehler: Kalenderwoche für 2021

      • Lösung: Achte darauf, dass du den richtigen Parameter für die Berechnung der Kalenderwoche verwendest, da der 01.01.2021 fälschlicherweise als KW 1 behandelt werden kann.

    Alternative Methoden

    Zusätzlich zur WorksheetFunction.WeekNum-Methode kannst du auch die DatePart-Funktion in VBA verwenden. Hier ein Beispiel:

    Sub KalenderwocheMitDatePart()
        Dim dDatum As Date
        dDatum = InputBox("Bitte ein Datum eingeben (TT.MM.JJJJ):")
    
        If IsDate(dDatum) Then
            MsgBox "Die Kalenderwoche ist: " & DatePart("ww", dDatum, vbMonday, vbFirstFourDays)
        Else
            MsgBox "Ungültiges Datum!"
        End If
    End Sub

    Die DatePart-Funktion ermöglicht es dir, die Wochennummer basierend auf spezifischen Einstellungen zu ermitteln.


    Praktische Beispiele

    Hier ist ein Beispiel, wie du die aktuelle Kalenderwoche in deinem VBA-Projekt ermitteln kannst:

    Sub AktuelleKalenderwoche()
        MsgBox "Die aktuelle Kalenderwoche ist: " & WorksheetFunction.WeekNum(Date, vbMonday)
    End Sub

    Dieses Skript zeigt die aktuelle Kalenderwoche an, indem es das heutige Datum (Date) verwendet.


    Tipps für Profis

    • Nutze vbMonday als zweiten Parameter in der WorksheetFunction.WeekNum-Methode, um deine Wochenzählung auf Montag zu beginnen.
    • Überprüfe die Einstellungen für die erste Woche des Jahres mit vbFirstFourDays, um sicherzustellen, dass die ISO-Standards eingehalten werden.
    • Experimentiere mit der DatePart-Funktion, um die Flexibilität bei der Ermittlung der Kalenderwoche zu erhöhen.

    FAQ: Häufige Fragen

    1. Wie kann ich die Kalenderwoche für ein bestimmtes Jahr ermitteln? Um die Kalenderwoche für ein bestimmtes Jahr zu berechnen, gebe einfach das Datum aus diesem Jahr in die Funktion ein.

    2. Gibt es einen Unterschied zwischen WorksheetFunction.WeekNum und DatePart? Ja, WorksheetFunction.WeekNum ist eine Excel-spezifische Funktion, während DatePart eine allgemeine VBA-Funktion ist. Beide können unterschiedliche Ergebnisse liefern, abhängig von den verwendeten Parametern.

    3. Wie kann ich die Wochennummer für das heutige Datum anzeigen? Du kannst WorksheetFunction.WeekNum(Date, vbMonday) verwenden, um die Wochennummer für das aktuelle Datum anzuzeigen.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige