En este artículo, crearemos una macro para crear una hoja para cada día de la semana para el mes especificado del año especificado excluyendo todas las fechas especificadas en la lista de vacaciones.

Antes de ejecutar la macro, se requieren tres entradas. Necesitamos especificar el número de mes en la celda J10, el año en la celda J11 y especificar la lista de fechas de vacaciones en el rango B16: B26.

Después de especificar los valores de entrada, haga clic en el botón enviar para ejecutar la macro.

ArrowMain

Esta macro insertará una nueva hoja para cada día de la semana para el mes especificado excluyendo las fechas especificadas en la lista de vacaciones.

ArrowAfterRunningMacro

Explicación lógica

En esta macro, hemos utilizado la función DateSerial para encontrar la última fecha del mes especificado. Hemos utilizado FOR Loop para recorrer desde la fecha de inicio del mes hasta la última fecha del mes. Hemos utilizado la función Buscar para encontrar si la fecha que se está utilizando existe en la lista de vacaciones especificada.

[_GoBack] # La función de día de la semana se usa junto con la instrucción If para verificar si una fecha es un día de la semana o un fin de semana. Si la declaración insertará una nueva hoja solo si la fecha es un día de la semana y no existe en la lista de días festivos. Como se puede ver en la captura de pantalla anterior, no se crea la hoja para el 6 ^ de diciembre, ya que el 6 ^ de diciembre está presente en la lista de días festivos.

Siga a continuación el código

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

Si te gustó este blog, compártelo con tus amigos en Facebook y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos a [email protected]