2017-07-11 60 views
1

我有2個文本框捕獲從各自的日期選擇器中選擇的日期。我希望在這些日期之間得到天差異。當我運行我的表單時,我一直無法獲取工作表函數類錯誤的networkdays屬性。2個日期之間的區別在VBA中填充文本框

我的代碼:

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

回答

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 

運行它。然後你會看到日期,這是假期,從你的計算中排除。

+0

感謝vityata ...我添加了msgbox代碼,但我得到的值是正確的,我仍然得到錯誤,當我運行窗體...我缺少什麼時,我使用networkdays功能? – agatha

+0

你可以把你在msgbox中得到的值截圖,@agatha – Vityata

+0

@agatha - 檢查編輯。 – Vityata

相關問題