我有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
截图:
答案 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
运行它。然后你会看到日期,即假日,从你的计算中排除。