不使用VBA周末和节假日创建一个月的一天张
|创建一个不包含周末和节假日的月份的工作表在本文中,我们将创建一个宏来为指定年份的指定月份的每个工作日创建一个工作表,其中不包括假日列表中指定的所有日期。
在运行宏之前,需要三个输入。我们需要在单元格J10中指定月数,在单元格J11中指定年,并在范围B16:B26中指定假日日期列表。
指定输入值后,单击提交按钮以运行宏。
该宏将为指定月份的每个工作日插入一个新工作表,假期列表中指定的日期除外。
逻辑解释
在此宏中,我们使用DateSerial函数查找指定月份的最后日期。我们使用FOR循环从一个月的开始日期到该月的最后一个日期循环播放。我们使用查找功能查找指定假日列表中是否存在使用日期。
[_GoBack] # Weekday函数与If语句一起使用,以检查日期是工作日还是周末。如果if语句仅在日期是工作日并且在假期列表中不存在,则它将插入新的表格。从上面的屏幕快照中可以看到,未创建12月6日的工作表,因为假期列表中存在12月6日。
请遵循以下代码
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
如果您喜欢此博客,请在Facebook和Facebook上与您的朋友分享。
我们很希望收到您的来信,请让我们知道我们如何才能改善我们的工作并使您的工作更好。写信给我们[email protected]