Lag dagblader i en måned uten helger og helligdager ved hjelp av VBA

Anonim

I denne artikkelen vil vi lage en makro for å lage et ark for hver ukedag for den angitte måneden i det angitte året, eksklusive alle datoene som er angitt i ferielisten.

Før du kjører makroen, kreves tre innganger. Vi må spesifisere månedstallet i celle J10, år i celle J11 og angi feriedatolisten i området B16: B26.

Etter å ha spesifisert inndataverdiene, klikker du på send -knappen for å kjøre makroen.

Denne makroen vil sette inn et nytt ark for hver ukedag for den angitte måneden, eksklusive datoene som er angitt i ferielisten.

Logisk forklaring

I denne makroen har vi brukt DateSerial -funksjonen for å finne siste dato i den angitte måneden. Vi har brukt FOR Loop til å gå fra startdato i måneden til siste dato i måneden. Vi har brukt Finn -funksjonen for å finne ut om datoen som brukes, finnes i den angitte ferielisten.

Ukedagsfunksjon brukes sammen med If -setning for å sjekke om en dato er ukedag eller helg. Hvis uttalelsen bare vil sette inn et nytt ark hvis datoen er en ukedag og den ikke finnes i ferielisten. Som man kan se på skjermbildet ovenfor, ark for 6th Desember er ikke opprettet, som 6th Desember er tilstede i ferielisten.

Følg koden nedenfor

 Option Explicit Sub MonthApply () 'Declaring variables Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date' Deaktivering av skjermoppdateringer Application.ScreenUpdating = False With Worksheets ("Main") 'Få måned og år fra celle J10 og J11 fra "Hoved" -ark MonthNo = .Range ("J10"). Verdi YearNo = .Range ("J11"). Value 'Deriving start and end date StartDate = DateSerial (YearNo, MonthNo, 1) EndDate = DateSerial (YearNo, MonthNo + 1, 0) 'Gå gjennom alle datoene i den angitte måneden For DVariable = StartDate To EndDate' Finne hvis dato er merket som ferie Sett RngFind = .Range ("B16: B26"). Finn ( DVariable) 'Kontrollerer om dato er ferie, helg eller ukedag Hvis RngFind er ingenting og ukedag (DVariable, 2) <6 Deretter' Setter du inn nytt ark etter det siste regnearket i arbeidsboken. Gi nytt navn til det aktive arket ActiveSheet.Name = Format (DVariable, "dd.mm.yy") End If Next DVariable .Velg End W ith Application.ScreenUpdating = True End Sub 

Hvis du likte denne bloggen, del den med vennene dine på Facebook. Du kan også følge oss på Twitter og Facebook.

Vi vil gjerne høre fra deg, gi oss beskjed om hvordan vi kan forbedre arbeidet vårt og gjøre det bedre for deg. Skriv til oss på e -post