In questo articolo, creeremo una macro per creare un foglio per ogni giorno della settimana per il mese specificato dell’anno specificato escludendo tutte le date specificate nell’elenco delle festività.

Prima di eseguire la macro, sono necessari tre input. È necessario specificare il numero del mese nella cella J10, l’anno nella cella J11 e specificare l’elenco delle date delle festività nell’intervallo B16: B26.

Dopo aver specificato i valori di input, fare clic sul pulsante di invio per eseguire la macro.

ArrowMain

Questa macro inserirà un nuovo foglio per ogni giorno della settimana per il mese specificato escluse le date specificate nell’elenco delle festività.

ArrowAfterRunningMacro

Spiegazione logica

In questa macro, abbiamo utilizzato la funzione DateSerial per trovare l’ultima data del mese specificato. Abbiamo utilizzato FOR Loop per eseguire il ciclo dalla data di inizio del mese all’ultima data del mese. Abbiamo utilizzato la funzione Trova per scoprire se la data utilizzata esiste nell’elenco delle festività specificato.

[_GoBack] # La funzione Weekday viene utilizzata insieme all’istruzione If per verificare se una data è un giorno della settimana o un fine settimana. L’istruzione If inserirà un nuovo foglio solo se la data è un giorno della settimana e non esiste nell’elenco delle festività. Come si può vedere nello screenshot qui sopra, il foglio del 6 ^ ^ dicembre non viene creato, in quanto il 6 ^ ^ dicembre è presente nell’elenco delle festività.

Segui sotto per il codice

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

Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook e Facebook.

Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]