Erstellen Sie Tagesblätter eines Monats ohne Wochenenden und Feiertage mit VBA

Anonim

In diesem Artikel erstellen wir ein Makro, um ein Blatt für jeden Wochentag für den angegebenen Monat des angegebenen Jahres ohne alle in der Feiertagsliste angegebenen Daten zu erstellen.

Vor dem Ausführen des Makros sind drei Eingaben erforderlich. Wir müssen die Monatsnummer in Zelle J10, das Jahr in Zelle J11 angeben und die Feiertagsdatumsliste im Bereich B16:B26 angeben.

Nachdem Sie die Eingabewerte angegeben haben, klicken Sie auf die Schaltfläche Senden, um das Makro auszuführen.

Dieses Makro fügt für jeden Wochentag des angegebenen Monats ein neues Blatt ein, ausgenommen die in der Feiertagsliste angegebenen Daten.

Logikerklärung

In diesem Makro haben wir die DateSerial-Funktion verwendet, um das letzte Datum des angegebenen Monats zu finden. Wir haben FOR Loop verwendet, um vom Anfangsdatum des Monats bis zum letzten Datum des Monats zu durchlaufen. Wir haben die Suchfunktion verwendet, um herauszufinden, ob das verwendete Datum in der angegebenen Feiertagsliste vorhanden ist.

Die Wochentagfunktion 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 nicht in der Feiertagsliste vorhanden ist. Wie man im obigen Screenshot sehen kann, Blatt für 6NS Dezember wird nicht erstellt, da 6NS Dezember ist in der Feiertagsliste vorhanden.

Bitte folgen Sie unten für den Code

 Option Explicit Sub MonthApply() 'Deklarieren von Variablen Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date 'Deaktivieren der Bildschirmaktualisierungen Application.ScreenUpdating = False With Worksheets("Main") 'Erhalte Monat und Jahr aus Zelle J10 und J11 aus dem Blatt "Main" MonthNo = .Range("J10").Value YearNo = .Range("J11").Value 'Start- und Enddatum ableiten StartDate = DateSerial(YearNo, MonthNo, 1) EndDate = DateSerial(YearNo, MonthNo + 1, 0) 'Durchlaufen aller Daten im angegebenen Monat For DVariable = StartDate To EndDate 'Findet, ob das Datum als Feiertag markiert ist Set RngFind = .Range("B16:B26").Find( DVariable) 'Überprüfen, ob das Datum Feiertag, Wochenende oder Wochentag ist, wenn RngFind Nothing And Weekday(DVariable, 2) < 6 Then 'Neues Blatt nach dem letzten Arbeitsblatt in der Arbeitsmappe einfügen Worksheets.Add after:=Worksheets(Worksheets.Count) ' Umbenennen des aktiven Blatts ActiveSheet.Name = Format(DVariable, "dd.mm.yy") End If Next DVariable .Select End W it Application.ScreenUpdating = True End Sub 

Wenn Ihnen dieser Blog gefallen hat, teilen Sie ihn mit Ihren Freunden auf Facebook. Außerdem können Sie uns auf Twitter und Facebook folgen.

Wir würden uns freuen, von Ihnen zu hören, lassen Sie uns wissen, wie wir unsere Arbeit verbessern und für Sie verbessern können. Schreiben Sie uns auf der E-Mail-Site