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

时间:2017-07-11 08:25:11

标签: excel vba excel-vba textbox userform

我有2个文本框,用于捕获从各自的日期选择器中选择的日期。我希望在这些日期之间获得差异。当我运行表单时,我一直无法获取工作表函数类的networkdays属性。

我的代码:

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

截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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

它会显示msgbox中日期的值。然后检查一下,可能其中一个不正确。

并删除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

运行它。然后你会看到日期,即假日,从你的计算中排除。