【问题标题】:Use of NETWORKDAYS functionNETWORKDAYS 函数的使用
【发布时间】:2018-01-29 12:25:55
【问题描述】:

我必须找出两个日期之间的工作日天数,这应该不包括周末和国定假日。 我在 vba 中使用函数 NETWORKDAYS,这不包括周末,但我也想排除一些国定假日。 如何在国定假日使用此函数 NETWORKDAYS(startDate, endDate, [holidays])。它说它接受 [holidays] 作为列表。我把所有的国定假日排成一列。如何通过 VBA 将其与此功能一起使用? 请找到代码sn-p。

Public Function dataFromInputSheetHolidayDates() As Variant
Dim holidayDates As Integer
Dim holidaydatesArray(20) As Variant
holidayDates = Sheets("InputSheet").Cells(Rows.Count, "D").End(xlUp).Row
For countDate = 0 To holidayDates - 1
holidaydatesArray(countDate) = Format(Sheets("InputSheet").Cells(countDate + 2, "D").Value, "DD-MMM-YY")
Next countDate
dataFromInputSheetHolidayDates = holidaydatesArray
End Function

holidayList = dataFromInputSheetHolidayDates()

Sheets("Estimation").Range("Z" & taskcounter).Formula = "=NETWORKDAYS(X" & 
                   taskcounter & ",Y" & taskcounter &","& holidayList & ")"

Sheets("Estimation").Range("AB" & taskcounter).Formula = "=NETWORKDAYS(X" & 
                  taskcounter & ",AA" & taskcounter &"," & holidayList & ")"

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    更改代码中的这两行:

    Dim holidayDates As Long
    holidaydatesArray(countDate) = Sheets("InputSheet").Cells(countDate + 2, "D")
    

    VBA 中,整数到32767,对于日期来说还不够。此外,holidaydatesArray 应该有一个数值,而不是某种文本格式。

    与这个问题非常相似 - workday holiday argument doesn't accept array


    如果您尝试通过 VBA 创建灵活的公式,其中假期位于不同的工作表上,请尝试以下解决方案:

    Public Sub TestMe()
        Dim holidayLists    As Range
        Set holidayLists = Worksheets(2).Range("D1:D10")
        With Worksheets(1)
            .Range("A1").Formula = "=NETWORKDAYS(B1, C1," & holidayLists.Parent.Name & "!" _
                                                          & holidayLists.Address & ")"
        End With
    End Sub
    

    holidayLists.Parent.Name & "!" & holidayLists.Address 将正确引用工作表的假期名称。

    【讨论】:

    • 我应该把holidayList作为一个整体作为那个函数的参数..它说类型不匹配
    • @AutoEng - 您是否将holidayList 声明为Long?如果你想让它在 Excel 中作为一个灵活的公式工作,它应该是一个范围,例如A1:A10 或类似的东西。
    • 实际上我在不同的工作表中有这个范围..现在如何使用它..我试图将它读入一个数组然后传递给这个函数..
    • @AutoEng - 我明白了。请参阅我的答案后面的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多