VBA 中用于填充文本框的 2 个日期之间的差异

Difference between 2 dates in to populate Textbox in VBA

我有 2 个文本框,它们捕获从各自的日期选择器中选择的日期。我想了解这些日期之间的天数差异。当我 运行 我的表单时,我一直无法获得工作表函数 class 的网络日 属性 错误。

我的代码:

Dim Holidays As Range
Set Holidays = Worksheets("Holidays").Range("A:A")
If IsEmpty(TextBox1.Value) = True Then
TATtxt.Value = ""
ElseIf IsEmpty(TextBox1.Value) = False And TextBox2.Value <= TextBox1.Value 
Then
TATtxt.Value = _
WorksheetFunction.NetworkDays(TextBox2.Value, TextBox1.Value, Holidays)
End If

截图:

在您的代码中写入以下内容:

Dim Holidays As Range
Set Holidays = Worksheets("Holidays").Range("A:A")
If IsEmpty(TextBox1.Value) = True Then
TATtxt.Value = ""
ElseIf IsEmpty(TextBox1.Value) = False And TextBox2.Value <= TextBox1.Value 
Then
MsgBox TextBox2.Value & "-"& TextBox1.Value
TATtxt.Value = _
WorksheetFunction.NetworkDays(TextBox2.Value, TextBox1.Value)
End If

它会在消息框中显示日期值。然后检查它们,可能其中一个不正确。

并删除 NetworkDays 中的 Holidays 部分,根据文档,它应该是: 假期 - 从工作日历中排除的一个或多个日期的可选范围,例如州和联邦假期以及浮动假期。该列表可以是包含日期的一系列单元格,也可以是表示日期的序列号数组常量。

文档:

https://msdn.microsoft.com/en-us/vba/excel-vba/articles/worksheetfunction-networkdays-method-excel

一般来说,执行以下操作以查看公式的工作原理。打开一个新的 Excel。在新模块中写入以下内容:

Option Explicit

Public Sub PrintNetworkDays()

    Dim dtStartDate     As Date
    Dim dtEndDate       As Date
    Dim rngHolidays     As Range

    dtStartDate = DateSerial(2017, 7, 1)
    dtEndDate = DateSerial(2017, 8, 1)

    Set rngHolidays = ActiveSheet.Range("A:A")

    rngHolidays(1, 1) = DateSerial(2017, 7, 5)
    rngHolidays(2, 1) = DateSerial(2017, 7, 6)
    rngHolidays(3, 1) = DateSerial(2017, 7, 7)
    rngHolidays(4, 1) = DateSerial(2017, 7, 8)
    rngHolidays(5, 1) = DateSerial(2017, 7, 9)

    Debug.Print WorksheetFunction.NetworkDays(dtStartDate, dtEndDate, rngHolidays)

End Sub

运行吧。然后您会看到从计算中排除的假期日期。