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
运行吧。然后您会看到从计算中排除的假期日期。
我有 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
运行吧。然后您会看到从计算中排除的假期日期。