Erstellen Tag Blätter eines Monats ohne Wochenenden und Feiertagen mit VBA
Tagesblätter eines Monats ohne Wochenenden und Feiertage In diesem Artikel erstellen wir ein Makro, um für jeden Wochentag ein Blatt für den angegebenen Monat des angegebenen Jahres zu erstellen, mit Ausnahme aller in der Feiertagsliste angegebenen Daten.
Vor dem Ausführen des Makros sind drei Eingaben erforderlich. Wir müssen die Monatsnummer in Zelle J10 und das Jahr in Zelle J11 angeben und die Liste der Feiertagsdaten im Bereich B16: B26 angeben.
Klicken Sie nach Angabe der Eingabewerte auf die Schaltfläche Senden, um das Makro auszuführen.
Dieses Makro fügt für jeden Wochentag für den angegebenen Monat ein neues Blatt ein, mit Ausnahme der in der Feiertagsliste angegebenen Daten.
Logische Erklärung
In diesem Makro haben wir die DateSerial-Funktion verwendet, um das letzte Datum des angegebenen Monats zu ermitteln. Wir haben FOR Loop verwendet, um eine Schleife vom Startdatum des Monats bis zum letzten Datum des Monats durchzuführen. Wir haben die Suchfunktion verwendet, um festzustellen, ob das verwendete Datum in der angegebenen Feiertagsliste vorhanden ist.
[_GoBack] # Die Wochentagsfunktion wird zusammen mit der If-Anweisung verwendet, um zu überprüfen, ob ein Datum ein Wochentag oder ein Wochenende ist. Die if-Anweisung fügt nur dann ein neues Blatt ein, wenn das Datum ein Wochentag ist und es nicht in der Feiertagsliste vorhanden ist. Wie man im obigen Screenshot sehen kann, wird kein Blatt für den 6. Dezember erstellt, da der 6. Dezember in der Feiertagsliste vorhanden ist.
Bitte folgen Sie unten für den Code
Option Explicit Sub MonthApply() 'Declaring variables Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date 'Disabling the screen updates Application.ScreenUpdating = False With Worksheets("Main") 'Getting month and year from cell J10 and J11 from "Main" sheet MonthNo = .Range("J10").Value YearNo = .Range("J11").Value 'Deriving start and end date StartDate = DateSerial(YearNo, MonthNo, 1) EndDate = DateSerial(YearNo, MonthNo + 1, 0) 'Looping through all the dates in the specified month For DVariable = StartDate To EndDate 'Finding if date is marked as holiday Set RngFind = .Range("B16:B26").Find(DVariable) 'Checking whether date is holiday, weekend or weekday If RngFind Is Nothing And Weekday(DVariable, 2) < 6 Then 'Inserting new sheet after the last worksheet in the workbook Worksheets.Add after:=Worksheets(Worksheets.Count) 'Renaming the active sheet ActiveSheet.Name = Format(DVariable, "dd.mm.yy") End If Next DVariable .Select End With Application.ScreenUpdating = True End Sub
Wenn dir dieser Blog gefallen hat, teile ihn mit deinen Freunden auf Facebook und Facebook.
Wir würden gerne von Ihnen hören, lassen Sie uns wissen, wie wir unsere Arbeit verbessern und für Sie verbessern können. Schreiben Sie uns unter [email protected]