2017-07-11 1 views
1

J'ai 2 zones de texte qui capture la date choisie à partir de leur datepickers respectifs. Je voudrais avoir la différence en jours entre ces dates. Je continue à obtenir l'impossibilité d'obtenir la propriété networkdays de l'erreur de classe de la feuille de travail lorsque j'exécute mon formulaire.Différence entre 2 dates pour remplir la zone de texte dans VBA

Mon code:

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 

Screenshot:

enter image description here

Répondre

0

Dans votre code ÉCRIRE

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 

Il vous montrer les valeurs des dates dans un msgbox. Ensuite, examinez-les, probablement l'un d'entre eux n'est pas correct.

et enlever la partie Holidays dans les NETWORKDAYS, selon la documentation, il devrait être: Vacances - une gamme facultative d'une ou plusieurs dates pour exclure du calendrier de travail, tels que les jours fériés de l'Etat fédéral et des vacances flottantes. La liste peut être une plage de cellules contenant les dates ou une constante de tableau des numéros de série représentant les dates.

Documentation:

https://msdn.microsoft.com/en-us/vba/excel-vba/articles/worksheetfunction-networkdays-method-excel

En général, procédez comme suit pour voir comment la formule fonctionne. Ouvrez un nouvel Excel. Dans un nouveau module, écrivez ce qui suit:

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 

Exécutez-le. Ensuite, vous verriez les dates, qui sont des vacances, exclues de vos calculs.

+0

merci vityata ... j'ai ajouté le code de msgbox mais les valeurs que j'obtiens sont correctes et j'obtiens toujours l'erreur quand j'exécute le formulaire ... est-ce que je manque quelque chose quand j'utilise la fonction networkdays? – agatha

+0

Pouvez-vous mettre une capture d'écran des valeurs que vous obtenez dans le msgbox, @agatha – Vityata

+0

@agatha - vérifier l'édition. – Vityata