Affectation de 2 variables de time aux valeurs de time dans 2 cellules à l'aide du script VBA, type de taches, erreur de concordance 13

Essaye de comparer l'heure du système avec les heures de début et de fin stockées dans les colonnes adjacentes. Le code ci-dessous a bien fonctionné pendant un certain time jusqu'à ce que j'ai changé de code (mais je suis returnné à l'ancien code car il ne fonctionnait pas). Après avoir repris l'ancien code, la comparaison ne fonctionne pas et lancer une erreur de type 'incompatibilité' '13'. En outre, la valeur de 'z' après la boucle For est en train de devenir 0 en raison de laquelle je ne reçois pas la sortie correcte.

Toute aide est grandement appréciée.

Sub MyBtn_Click() Dim i As Integer Dim w As Integer Dim z As Integer Dim tm1 As Date Dim tm2 As Date Dim tm3 As Date tm1 = Time w = Weekday(Date, vbSunday) w = w + 2 For i = 2 To 32 tm2 = TimeValue(Cells(i, 1).Text) ' this is the line throwing 'type mismatch' tm3 = TimeValue(Cells(i, 2).Text) If tm1 >= tm2 And tm1 <= tm3 Then z = i Exit For End If Next i myMsgBox i ' here i = 32, don't know why myMsgBox z ' z = 0 for some reason MsgBox Cells(z, w), vbOKOnly, "Result" ' does not give the cell contents as z=0 End Sub 

Cette logique a fait le tour –

 If IsDate(Cells(i, 1).Value) And IsDate(Cells(i, 2).Value) Then 

… mais pourtant, j'ai eu une erreur de time d'exécution lorsque z est devenu 0. Donc, j'ai juste essayé d'utiliser .Text (le remettre à nouveau) au lieu de .Value et maintenant le programme fonctionne!

C'est donc ce à quoi cela ressemble –

 For i = 2 To 32 If IsDate(Cells(i, 1).Text) And IsDate(Cells(i, 2).Text) Then time2 = TimeValue(Cells(i, 1).Text) time3 = TimeValue(Cells(i, 2).Text) If tm1 >= time2 And tm1 <= time3 Then z = i Exit For End If End If Next i 

Vous devez vous assurer que la valeur de la cellule est convertible en time réel. Sinon, vous recevrez le message de désadaptation. Aussi, j'utilise toujours .value au lieu de .text

 'declare as dates to ensure that the values are treated as dates and not as something else dim tm1 as Date, tm2 as Date, tm3 as Date For i = 2 To 32 'test to make sure the cells have date/time values If IsDate(Cells(i, 1).Value) And IsDate(Cells(i, 2).Value) Then tm2 = TimeValue(Cells(i, 1).Value) tm3 = TimeValue(Cells(i, 2).Value) If tm1 >= tm2 And tm1 <= tm3 Then Z = i Exit For End If End If Next i 

Vous devrez franchir progressivement le code à l'aide de F8 et examiner la valeur de vos variables à chaque étape pour déterminer si le code fonctionne correctement. Ce code évitera l'erreur MisMatch, mais vous devrez vérifier datatables pour vous assurer que cela fonctionne comme vous le souhaitez.

En ce qui concerne votre deuxième question: i = 32 car c'est la dernière valeur définie dans la boucle for.

Et z = 0 car la condition n'a jamais été remplie dans votre déclaration if: If tm1 >= tm2 And tm1 <= tm3 Then