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.

ArrowMain

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.

ArrowAfterRunningMacro

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]