HERBERS Excel-Forum - die Beispiele

Thema: Jahreskalender mit Mitarbeiterliste und Feiertagen anlegen

Home

Gruppe

DatumZeit

Problem

Es soll ein Jahreskalender mit 12 Monatsblättern und einer Mitarbeiterliste angelegt werden. Feiertage und Wochenenden sollen hinzugefügt oder weggelassen werden können.

Lösung
Geben Sie den nachfolgenden Code in ein Standardmodul ein und weisen Sie ihn einer Schaltfläche zu.
StandardModule: Modul1

Sub MonateAnlegen()
   Dim wks As Worksheet
   Dim var As Variant
   Dim datDay As Date
   Dim iMonth As Integer, iCol As Integer, iCounter As Integer, iYear As Integer
   Dim sMonth As String
   Dim bln As Boolean
   With Application
      .ScreenUpdating = False
      bln = .DisplayStatusBar
      .DisplayStatusBar = True
   End With
   iYear = Cover.SpinButton1.Value
   Workbooks.Add
   Application.DisplayAlerts = False
   For iCounter = 1 To Worksheets.Count - 1
      Worksheets(2).Delete
   Next iCounter
   Application.DisplayAlerts = True
   Set wks = ThisWorkbook.Worksheets("Mitarbeiter")
   For iMonth = 1 To 12
      sMonth = Format(DateSerial(1, iMonth, 1), "mmmm")
      Application.StatusBar = "Lege Monat " & sMonth & " an..."
      Worksheets.Add after:=Worksheets(Worksheets.Count)
      ActiveSheet.Name = sMonth
      wks.Range(wks.Cells(3, 1), wks.Cells( _
         WorksheetFunction.CountA(wks.Columns(1)) + 1, 1)).Copy Range("A2")
      Range("A1").Value = "'" & ActiveSheet.Name & " " & iYear
      If Cover.OptionButton1.Value And Cover.OptionButton3.Value Then
         Call WithHW(iMonth)
      ElseIf Cover.OptionButton1.Value And Cover.OptionButton3.Value = False Then
         Call WithWsansH(iMonth)
      ElseIf Cover.OptionButton1.Value = False And Cover.OptionButton3.Value Then
         Call WithHsansW(iMonth)
      Else
         Call SansWH(iMonth)
      End If
      Rows(2).Value = Rows(1).Value
      Rows(2).NumberFormat = "ddd"
      Range("A2").Value = "Wochentage"
      Rows("1:2").Font.Bold = True
      Columns.AutoFit
   Next iMonth
   Application.DisplayAlerts = False
   Worksheets(1).Delete
   Application.DisplayAlerts = True
   Worksheets(1).Select
   ActiveWindow.Caption = "Jahreskalender " & iYear
   With Application
      .ScreenUpdating = True
      .DisplayStatusBar = bln
      .StatusBar = False
   End With
End Sub

Private Sub WithHW(ByVal iMonth As Integer)
   Dim cmt As Comment
   Dim rng As Range
   Dim var As Variant
   Dim datDay As Date
   Dim iYear As Integer, iCol As Integer
   iCol = 1
   iYear = Cover.SpinButton1.Value
   For datDay = DateSerial(iYear, iMonth, 1) To _
      DateSerial(iYear, iMonth + 1, 0)
      iCol = iCol + 1
      Set rng = Range(Cells(1, iCol), _
         Cells(WorksheetFunction.CountA(Columns(1)), iCol))
      var = Application.Match(CDbl(datDay), _
         ThisWorkbook.Worksheets("Feiertage").Columns(1), 0)
      Cells(1, iCol).Value = datDay
      With rng.Interior
         Select Case Weekday(datDay)
            Case 1
               .ColorIndex = 35
            Case 7
               .ColorIndex = 36
         End Select
         If Not IsError(var) Then
            .ColorIndex = 34
            Set cmt = Cells(1, iCol).AddComment( _
               ThisWorkbook.Worksheets("Feiertage").Cells(var, 2).Value)
            cmt.Shape.TextFrame.AutoSize = True
         End If
      End With
   Next datDay
End Sub

Private Sub WithHsansW(ByVal iMonth As Integer)
   Dim datDay As Date
   Dim iYear As Integer, iCol As Integer
   iCol = 1
   iYear = Cover.SpinButton1.Value
   For datDay = DateSerial(iYear, iMonth, 1) To _
      DateSerial(iYear, iMonth + 1, 0)
      If WorksheetFunction.Weekday(datDay, 2) < 6 Then
         iCol = iCol + 1
         Cells(1, iCol).Value = datDay
      End If
   Next datDay
End Sub

Private Sub WithWsansH(ByVal iMonth As Integer)
   Dim var As Variant
   Dim datDay As Date
   Dim iYear As Integer, iCol As Integer
   iCol = 1
   iYear = Cover.SpinButton1.Value
   For datDay = DateSerial(iYear, iMonth, 1) To _
      DateSerial(iYear, iMonth + 1, 0)
      var = Application.Match(CDbl(datDay), _
         ThisWorkbook.Worksheets("Feiertage").Columns(1), 0)
      If IsError(var) Then
         iCol = iCol + 1
         Cells(1, iCol).Value = datDay
      End If
   Next datDay
End Sub

Private Sub SansWH(ByVal iMonth As Integer)
   Dim var As Variant
   Dim datDay As Date
   Dim iYear As Integer, iCol As Integer
   iCol = 1
   iYear = Cover.SpinButton1.Value
   For datDay = DateSerial(iYear, iMonth, 1) To _
      DateSerial(iYear, iMonth + 1, 0)
      If WorksheetFunction.Weekday(datDay, 2) < 6 Then
         var = Application.Match(CDbl(datDay), _
            ThisWorkbook.Worksheets("Feiertage").Columns(1), 0)
         If IsError(var) Then
            iCol = iCol + 1
            Cells(1, iCol).Value = datDay
         End If
      End If
   Next datDay
End Sub

Sub FeiertageEinAus()
   With Worksheets("Feiertage")
      If .Visible = xlVeryHidden Then
         .Visible = True
         .Select
      Else
         .Visible = xlVeryHidden
         Worksheets(1).Select
      End If
   End With
End Sub

Sub MitarbeiterEinAus()
   With Worksheets("Mitarbeiter")
      If .Visible = xlVeryHidden Then
         .Visible = True
         .Select
      Else
         .Visible = xlVeryHidden
         Worksheets(1).Select
      End If
   End With
End Sub

Sub Zurueck()
   ActiveSheet.Visible = xlVeryHidden
   Worksheets(1).Select
End Sub

Beiträge aus dem Excel-Forum zu den Themen DatumZeit und Kalender

Outlook Kalender-Import Kalender mehrtägige Termine
Kalenderwoche Kalender plötzlich weg
Kalenderwochen Excel-Daten in Outlook Kalender übermitteln
Wochenarbeitsstunden anhand der Kalenderwoche Kalender dynamisch anpassen
Termine in Kalender eintragen Problem mit Kalenderwoche
Kalendersteuerlement Wochentag Werte aus Monatsspalten in Kalenderwochenspalten
Kalender-Steuerelement Kalender
Kalenderwoche Kalender einblenden
Kalendereintrag in einen freigegebenen Kal Kalender für UserForm
Prüfung nach Kalenderwoche DatumZeit subtrahieren ergibt falschen Monatswert
Kalendertage eines Zeitraumes ermitteln Steuerelement-Kalender
abfragen Kalenderwoche Format von Kalenderwochen
Summe über Kalenderwochen Schichtkalender
Bewegter Feiertage im Kalender eintargen Kalenderfunktion und mehr
Kalender Kalender - Summe der Wochentage
Schichtsystem im Kalender Kalender Bedingte Formatieren
Exceltermin in Outlookkalender übertragen daten aus liste auslesen und in kalender eintragen
Datum, Kalenderwoche und Quartal Kalenderwoche ausgeben
Schichtkalender - 29.Februar KalenderWoche
Anzahl Kalendertage im aktuellen Monat ermitteln Addition von Werten aus einer Kalenderwoche
Laufzeitfehler bei Kalendererstellung Kalender Dienstplan
Kalenderwoche u. Feiertage Hilfe, Zeiträume im Kalender farbig darstellen
Excel Kalender + Uhrzeit Kalender mit Schicht u. KW Anzeige ?
So und Feiertage mit zusammenwirken von Kalender Kalender
Arbeitskalender Kalender - Zeile per VBA ausblenden