在代碼中寫:
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
運行它。然後你會看到日期,這是假期,從你的計算中排除。
感謝vityata ...我添加了msgbox代碼,但我得到的值是正確的,我仍然得到錯誤,當我運行窗體...我缺少什麼時,我使用networkdays功能? – agatha
你可以把你在msgbox中得到的值截圖,@agatha – Vityata
@agatha - 檢查編輯。 – Vityata