Skapa dagblad för en månad utan helger och helgdagar med VBA

Anonim

I den här artikeln kommer vi att skapa ett makro för att skapa ett blad för varje vardag för den angivna månaden för det angivna året, exklusive alla datum som anges i semesterlistan.

Innan du kör makrot krävs tre ingångar. Vi måste ange månadsnummer i cell J10, år i cell J11 och ange helgdagslistan i intervallet B16: B26.

När du har angett inmatningsvärdena klickar du på knappen skicka för att köra makrot.

Detta makro kommer att infoga ett nytt blad för varje vardag för den angivna månaden, exklusive datum som anges i semesterlistan.

Logisk förklaring

I detta makro har vi använt DateSerial -funktionen för att hitta det sista datumet för den angivna månaden. Vi har använt FOR Loop till loop från månadens startdatum till månadens sista datum. Vi har använt funktionen Sök för att ta reda på om datum som används finns i den angivna semesterlistan.

Veckodagsfunktionen används tillsammans med If -uttalande för att kontrollera om ett datum är vardag eller helg. Om uttalandet bara kommer att infoga ett nytt blad om datumet är en vardag och det inte finns i semesterlistan. Som man kan se i skärmdumpen ovan, blad för 6th December skapas inte, som 6th December finns på semesterlistan.

Följ koden nedan

 Alternativ Explicit Sub MonthApply () 'Declaring variables Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date' Inaktivera skärmuppdateringar Application.ScreenUpdating = False With Worksheets ("Main") 'Få månad och år från cell J10 och J11 från "Huvud" -bladet 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"). Hitta ( DVariable) 'Kontrollera om datum är semester, helg eller vardag Om RngFind är ingenting och veckodag (DVariable, 2) <6 Sedan' Infoga nytt blad efter det sista kalkylbladet i arbetsboken Arbetsblad. Lägg till efter: = Arbetsblad (Arbetsblad.räkning) ' Byt namn på det aktiva arket ActiveSheet.Name = Format (DVariable, "dd.mm.yy") End If Next DVariable .Välj End W ith Application.ScreenUpdating = True End Sub 

Om du gillade den här bloggen, dela den med dina vänner på Facebook. Du kan också följa oss på Twitter och Facebook.

Vi vill gärna höra från dig, låt oss veta hur vi kan förbättra vårt arbete och göra det bättre för dig. Skriv till oss på e -postwebbplatsen