我试图将vba声明的日期数组传递给excel函数WorkDay中的Holidays Argument。从目前为止的研究中可以通过Range和TechontheNet建议可以传递一系列日期序列号。 下面的代码可以很好地执行工作日功能 - 在这一点上炸弹......
注意:EasterDate和HolidayDate是返回值" date"格式,我也试过没有设置这些值的运行,但它没有区别......
Function WorkDayFiveA(DateofSpend As Date) As Boolean
Dim WDFive As Date, RefDate As Date
Dim Holidays(9) As Date
Dim wf As WorksheetFunction
' load holiday array
Holidays(0) = DateSerial(Year(Date) - 1, 12, 25) ' last Christmas
Holidays(1) = DateSerial(Year(Date) - 1, 12, 26) ' Last Boxing day
Holidays(2) = DateSerial(Year(Date), 1, 1) ' News year day
Holidays(3) = EasterDate(Year(Date), 1) ' Good Friday
Holidays(4) = EasterDate(Year(Date), 2) ' Easter Monday
Holidays(5) = PublicHolidayDate(Year(Date), 1) ' May day
Holidays(6) = PublicHolidayDate(Year(Date), 2) ' Spring Holidays
Holidays(7) = PublicHolidayDate(Year(Date), 3) ' Spring Holidays
Holidays(8) = DateSerial(Year(Date), 12, 25) ' next Christmas day
Holidays(9) = DateSerial(Year(Date), 12, 26) ' next Boxing
Set wf = Application.WorksheetFunction
WDFive = wf.WorkDay(DateSerial(Year(Date), Month(Date), 1), 4, Holidays)
If Date < WDFive Then
RefDate = DateSerial(Year(WDFive), Month(WDFive) - 1, 1)
Else
RefDate = DateSerial(Year(WDFive), Month(WDFive), 1)
End If
If DateofSpend < RefDate Then
WorkDayFiveA = True
Else
WorkDayFiveA = False
End If
End Function
感激不尽的任何帮助。
答案 0 :(得分:2)
此问题似乎有时出现在 Excel 2016 中,并始终出现在 Excel 2013 和早期版本中。
一种可能的解决方案 - Holdiay阵列应该由常数序列号组成,例如,将其声明为from docx import Document
document = Document()
table = document.add_table(rows=4, cols=2)
table.style = 'Table Grid'
,而不是Long
:
Date
假期 - 要从工作日历中排除的一个或多个日期的可选列表,例如州和联邦假日和浮动假期。该列表可以是包含日期的一系列单元格,也可以是表示日期的序列号的数组常量。
对我来说( Excel 2013 x32)此代码有效,但如果我声明Dim Holidays(9) As Long
Holidays(0) = DateSerial(Year(Date) - 1, 12, 25) ' last Christmas
Holidays(1) = DateSerial(Year(Date) - 1, 12, 26) ' Last Boxing day
Holidays(2) = DateSerial(Year(Date), 1, 1) ' News year day
则不起作用:
holidays(3) as Date
答案 1 :(得分:0)
尝试创建具有命名范围的隐藏工作表&#34;假期&#34;在上面。把所有的假日日期都放在那里。 (如果公共的话,你可以将你的函数EasterDate和PublicHolidayDate用作常规函数)。在你的代码而不是加载假日数组put:
Set Holidays = Names("Holidays").RefersToRange