Maak dagbladen van een maand zonder weekends en feestdagen met VBA

Anonim

In dit artikel zullen we een macro maken om een ​​blad te maken voor elke weekdag voor de opgegeven maand van het opgegeven jaar, met uitzondering van alle datums die zijn opgegeven in de vakantielijst.

Voordat de macro wordt uitgevoerd, zijn drie ingangen vereist. We moeten het maandnummer specificeren in cel J10, het jaar in cel J11 en de vakantiedatumlijst specificeren in het bereik B16:B26.

Nadat u de invoerwaarden hebt opgegeven, klikt u op de knop Verzenden om de macro uit te voeren.

Deze macro voegt een nieuw blad in voor elke weekdag voor de opgegeven maand, met uitzondering van de datums die zijn opgegeven in de vakantielijst.

Logische uitleg

In deze macro hebben we de DateSerial-functie gebruikt om de laatste datum van de opgegeven maand te vinden. We hebben FOR Loop gebruikt om te herhalen van de begindatum van de maand tot de laatste datum van de maand. We hebben de zoekfunctie gebruikt om te achterhalen of de gebruikte datum in de opgegeven vakantielijst voorkomt.

De weekdagfunctie wordt samen met de If-instructie gebruikt om te controleren of een datum een ​​weekdag of een weekend is. Als de verklaring alleen een nieuw blad invoegt als de datum een ​​weekdag is en deze niet in de vakantielijst voorkomt. Zoals je kunt zien in de bovenstaande schermafbeelding, blad voor 6e December wordt niet aangemaakt, aangezien 6e December is aanwezig in de vakantielijst.

Volg hieronder voor de code:

 Optie Explicit Sub MonthApply() 'Variabelen declareren Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date 'De schermupdates uitschakelen Application.ScreenUpdating = False With Worksheets ("Hoofd") 'Maand ophalen en jaar uit cel J10 en J11 uit "Hoofd" blad MonthNo = .Range("J10").Value YearNo = .Range("J11").Value 'Start- en einddatum afleiden StartDate = DateSerial(YearNo, MonthNo, 1) EndDate = DateSerial(YearNo, MonthNo + 1, 0) 'Doorloop alle datums in de opgegeven maand For DVariable = StartDate To EndDate 'Bevinden of de datum is gemarkeerd als feestdag Set RngFind = .Range("B16:B26").Find( DVariable) 'Controleren of de datum een ​​feestdag, weekend of weekdag is Als RngFind niets is en weekdag (DVariable, 2) <6 Dan 'Nieuw blad invoegen na het laatste werkblad in de werkmap Worksheets.Add after:=Worksheets(Worksheets.Count)' De naam van het actieve blad wijzigen ActiveSheet.Name = Format(DVariable, "dd.mm.yy") End If Next DVariable .Select End W met Application.ScreenUpdating = True End Sub 

Als je deze blog leuk vond, deel hem dan met je vrienden op Facebook. Ook kunt u ons volgen op Twitter en Facebook.

We horen graag van u, laat ons weten hoe we ons werk kunnen verbeteren en voor u kunnen verbeteren. Schrijf ons op de e-mailsite