在VBA中填入文本框的2个date之间的差异

我有2个文本框捕获从各自的dateselect器中select的date。 我想在这些date之间的天差异。 当我运行我的表单时,我一直无法获取工作表函数类错误的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 

截图:

在这里输入图像说明

在你的代码中写下:

 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 

它会显示你的date在一个msgbox的值。 然后检查他们,可能其中一个是不正确的。

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

文档:

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 

运行。 然后你会看到date,这是假期,排除在计算之外。