Crear hojas de día de un mes sin semana y días festivos utilizando VBA
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.
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.
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]