2010-11-19 8 views
0

Voici le code que je l'ai écrit mais je continue à obtenir un problème avec la ligne que j'ai ajouté le commentaire, et que cette ligne. J'ai commenté toutes les autres lignes et j'ai isolé cela comme la ligne de problème, mais pour la vie de moi et avec l'heure ou plus de recherches que j'ai faites je ne peux pas comprendre quel est le problème. C'est probablement très évident, mais je suis vraiment coincé et ça me rend fou.Problème d'appel VBA fonction dans une autre fonction

Quoi qu'il en soit, le code doit être utilisé pour prendre une série de données contenant des temps de changement et la capacité de la langue et de montrer combien de personnes avec une langue spécifique sont disponibles au cours d'une période donnée (The_Time dans le code ci-dessous)

Toute aide serait grandement appréciée!

Function ReturnAvailability(The_Time As String, The_Info As Range) 

Dim The_Lang As String 
Dim The_Shift_Start As String 
Dim The_Shift_End As String 
Dim stGotIt As String 
Dim stCell As Integer 
Dim Counter As Integer 

Counter = 0 

For Each r In The_Info.Rows 
    For Each c In r.Cells 
     stCell = c.Value 
     If InStr(stCell, "Eng") > 0 Then 
      The_Lang = "Eng" 
     ElseIf InStr(c, ":") > 0 Then 
      stGotIt = StrReverse(c) 
      stGotIt = Left(c, InStr(1, c, " ", vbTextCompare)) 
      The_Shift_End = StrReverse(Trim(stGotIt)) 
      stGotIt = Left(The_Shift, InStr(1, The_Shift, " ", vbTextCompare)) 
      The_Shift_Start = stGotIt 
      stCell = ReturnAvailabilityEnglish(The_Time, The_Shift_Start, The_Shift_End) ' this is the line causing the error 
     End If 
    Next c 
Next r 

ReturnAvailability = Counter 

End Function 


Function ReturnAvailabilityEnglish(The_Time As String, The_Shift_Start As String, The_Shift_End As String) 

Dim Time_Hour As Integer 
Dim Time_Min As Integer 
Dim Start_Hour As Integer 
Dim Start_Min As Integer 
Dim End_Hour As Integer 
Dim End_Min As Integer 
Dim Available As Integer 

Available = 13 

Time_Hour = CInt(Left(The_Time, 2)) 
Time_Min = CInt(Right(The_Time, 2)) 
Start_Hour = CInt(Left(The_Shift_Start, 2)) 
Start_Min = CInt(Right(The_Shift_Start, 2)) 
End_Hour = CInt(Left(The_Shift_End, 2)) 
End_Min = CInt(Right(The_Shift_End, 2)) 

If Start_Hour <= Time_Hour And Start_Min <= Time_Min Then 
    If End_Hour > Time_Hour And End_Min > Time_Min Then 
     Available = 1 
    Else 
     Available = 0 
    End If 
End If 

ReturnAvailabilityEnglish = Available 

End Function 

Merci, Darragh J

+0

Quelle ligne provoque l'erreur? Est-ce une erreur de compilation ou une erreur d'exécution? –

+0

désolé à ce sujet, le commentaire a ajouté –

+0

Quelle est l'erreur? – BenV

Répondre

1

Vous avez déclaré

Dim stCell As Integer 

Ce qui signifie que cette partie ne peut pas fonctionner:

stCell = c.Value 
If InStr(stCell, "Eng") > 0 Then 

Soit l'attribution des c.Value échouera , parce qu'il contient du texte, ou InStr (stCell, "Eng") ne sera jamais vrai, parce que Toutes les cellules de la gamme sont numériques.

Il vous manque un texte comparer:

If InStr(1, stCell, "Eng", vbTextCompare) > 0 Then 

C'est aussi un problème, vous devez ajouter un chèque comme illustré:

If The_Time = vbNullString Or The_Shift_Start = vbNullString _ 
    Or The_Shift_End = vbNullString Then 
    Available = -1 
Else 

    Time_Hour = CInt(Left(The_Time, 2)) 
    Time_Min = CInt(Right(The_Time, 2)) 
    Start_Hour = CInt(Left(The_Shift_Start, 2)) 
    Start_Min = CInt(Right(The_Shift_Start, 2)) 
    End_Hour = CInt(Left(The_Shift_End, 2)) 
    End_Min = CInt(Right(The_Shift_End, 2)) 

    If Start_Hour <= Time_Hour And Start_Min <= Time_Min Then 
     If End_Hour > Time_Hour And End_Min > Time_Min Then 
      Available = 1 
     Else 
      Available = 0 
     End If 
    End If 
End If 
ReturnAvailabilityEnglish = Available 

Enfin, et surtout, votre fonction sera toujours Renvoie 0, car vous définissez le compteur à 0 au début et ne le mettez jamais à jour.

+0

Ok, eh bien je viens résolu cette question, mais il n'a pas fait une différence. Je reçois toujours #VALUE! dans ma feuille de travail. Merci de l'avoir signalé! D'autres idées ...? –

+0

Ajout de plus de notes. – Fionnuala

+0

Merci pour ces notes, j'ai effectivement eu des problèmes avec la comparaison précédente qui a été trouvée en essayant de rectifier ce problème afin que je les dépouillé. Je les ai rajoutés et ils ne causent aucun problème, et je suis au courant du problème du 0 qui revient toujours, ce qui n'est pas important car je ne reçois aucune valeur valable pour le moment. Merci pour le chèque aussi. Cependant, cela n'a toujours pas résolu le problème. –

Questions connexes