Anzeige
Archiv - Navigation
1956to1960
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kalender mit VBA erstellt, aber 29.02. fehlt.

Kalender mit VBA erstellt, aber 29.02. fehlt.
07.01.2024 07:05:58
Chris135
Hallo liebe VBA-Gemeinde,

ich möchte für meinen Arbeitgeber einen Kalender zur Urlaubsplanung erstellen.
Dazu durchlaufe ich eine For-Schleife von Anfang bis Ende des Jahres und ermittle das Datum über die DateAdd Funktion.
Leider konnte ich 2 Probleme in der Sub Kalender_erstellen noch nicht lösen:
1) der 29.02.2024 fehlt
2) ich würde gerne die einzelnen Monate auf-/zuklappbar gestalten. Mit .Range(...).Group bekomme ich eine Gruppe von Januar-Dezember und nicht jedes Monat einzeln.

Ich habe eine Beispieldatei erstellt und die zu klärenden Passagen wie folgt markiert: '**** entsprechendes Problem ****
https://www.herber.de/bbs/user/165941.xlsm

Das ist mein erster Beitrag. Falls Ihr weitere Infos benötigt, bitte einfach schreiben.

Ich konnte schon so viele Probleme durch eure Beiträge lösen, also vielen Dank an all die fleißigen Leute.
Und natürlich vielen Dank im Voraus an diejenigen, die sich meinem Problem widmen :)

Viele Grüße

Chris

hier noch der Code:


Const SNeujahr As Integer = 2 'erste Spalte des Kalenders
Const ZMonat As Integer = 2 'Zeile in der Monatsname eingetragen wird
Const ZTagInt As Integer = 3 'Zeile in der Tag eingetragen wird

Sub main()
'Ausführen, um Kalender zu erstellen
Call Urlaub_erstellen("2024")
End Sub

Sub Urlaub_erstellen(Jahr As String)
'erstellt ein neues Sheet "Urlaub "+Jahr
Dim WS As Worksheet
Dim NKalender As String: NKalender = "Urlaub " & Jahr 'Name des WS
Dim vorhanden As Boolean: vorhanden = False
'WS vorhanden?
For Each WS In ThisWorkbook.Worksheets
If WS.Name = NKalender Then vorhanden = True: Exit For
Next
With ThisWorkbook
'Wenn nicht vorhanden, dann erstellen
If Not vorhanden Then
.Sheets.Add after:=Worksheets(Worksheets.Count)
.ActiveSheet.Name = NKalender
End If
'Kalender erstellen
Call Kalender_erstellen(.Worksheets(NKalender), 2023)
End With
End Sub

Sub Kalender_erstellen(WS_Urlaub As Worksheet, Jahr As Integer)
'erstellt den Kalender für Jahr im WS_Urlaub
With WS_Urlaub
'Ursprung wiederherstellen
.Range(.Cells(1, 1), Cells(50, 400)).UnMerge
.Range(.Columns(1), .Columns(400)).ColumnWidth = 10.71

'Kalender erstellen
Dim i As Integer
Dim Datum As Date
Dim Spalte As Integer 'aktuell zu bearbeitende Spalte
Dim SmAnfang As Integer: SmAnfang = SNeujahr 'Spalte Monatsanfang
'jeden Tag des Jahres ablaufen
For i = 1 To DateDiff("D", "31.12." & Jahr - 1, "31.12." & Jahr)
Spalte = SNeujahr + i - 1
'****1) Warum erkennt er nicht 29.02.?****
Datum = DateAdd("d", CDbl(i), CDate("31.12." & CStr(Jahr - 1)))
'Tag schreiben
.Cells(ZTagInt, Spalte) = CStr(Day(Datum))
.Cells(ZTagInt + 1, Spalte) = Weekday(Datum, vbSunday)
'Wochenende einfärben
If Not Arbeitstag(Datum) Then .Range(.Cells(ZTagInt, Spalte), .Cells(ZTagInt + 3, Spalte)).Interior.Color = RGB(128, 128, 128)
'Monat schreiben (in Spalte des ersten Tages des Monats)
If Day(Datum) = 1 Then .Cells(ZMonat, Spalte) = MonthName(Month(Datum))
'Monatsname Zellen Mergen
If Day(DateAdd("d", 1, Datum)) = 1 Then
.Range(.Cells(ZMonat, SmAnfang), .Cells(ZMonat, Spalte)).Merge
'****2) Gruppieren möglich, sodass jeder Monat einzeln aufgeklappt werden kann?****
'.Range(.Cells(ZMonat, SmAnfang), .Cells(ZMonat, Spalte)).Group
SmAnfang = Spalte + 1
End If
'Spaltenbreite anpassen
.Columns(Spalte).ColumnWidth = 2.14
Next
End With
End Sub

Function Arbeitstag(Datum As Date) As Boolean
If Weekday(Datum, vbSunday) > 5 Then Arbeitstag = False: Exit Function

Arbeitstag = True
End Function


6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kalender mit VBA erstellt, aber 29.02. fehlt.
07.01.2024 07:51:12
Kulo
Du berechnest mit dem Script die Tage aus 2023. Ersetze die Jahreszahl in
"Call Kalender_erstellen(.Worksheets(NKalender), 2023)"
durch 2024.
AW: Kalender mit VBA erstellt, aber 29.02. fehlt.
07.01.2024 13:29:23
Chris135
Ohje Leichtsinnsfehler, jetzt funktionierts
Danke dir Kulo :).

Weißt du zufällig auch wie ich die einzelnen Monaten "gruppieren" kann. Hab das schonmal gesehen.

VG Chris

AW: Kalender mit VBA erstellt, aber 29.02. fehlt.
07.01.2024 15:46:24
Kulo
Mit "Gruppieren" wird das nicht so richtig funktionieren.
Ich würde die Gruppierung über ein Kombinationsfeld erledigen.
Lass nicht die einzelnen Tage in Zeile 3 eintragen, sondern ein richtiges Datum als Zahl und formatiere es so, dass nur der Tag zu sehen ist.
Danach könntest Du das Kombinationsfeld mit der Monatszahl in Zeile 3 vergleichen und alle Spalten, die dem nicht ensprechen, ausblenden.


Anzeige
AW: Kalender mit VBA erstellt, aber 29.02. fehlt.
07.01.2024 17:02:55
Crazy Tom
und wenn dann noch die Wochenenden richtig formiert wären,...
AW: Kalender mit VBA erstellt, aber 29.02. fehlt.
07.01.2024 17:36:10
Kulo
Die Wochenenden würde ich nicht per VBA sondern mit einer bedingter Formatierung machen:
=NETTOARBEITSTAGE(B$3;B$3;"Feiertage")=0 über alle Spalten
oder?
AW: Kalender mit VBA erstellt, aber 29.02. fehlt.
08.01.2024 01:34:35
Chris135
Vielen Dank!
Die Idee mit dem Datum + Kombinationsfeld finde ich sehr gut. Werde ich noch umsetzen.

Die bedingte Formatierung muss ich mir für Urlaub/Krank/Schule oder ähnliches freihalten.

Und sorry für die schlechte Formatierung.
Hab das nur schnell aus der richtigen Excel herauskopiert und die Wochentage zur Überprüfung als Zahl ausgegeben.

Feiertage werde ich auch noch automatisch über die Gauß Ostertagberechnung reinholen.

Wünsche euch noch einen schönen Abend.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige