2017-09-08 5 views
1

Je rencontre des problèmes avec la définition de mes variables, mais je ne vois pas où ou pourquoi. C'est un code assez simple pour compter le nombre de leçons que les enseignants ont allouées. L'information est dans la feuille de travail «Subects and Teachers 2018» et doit être imprimée dans la feuille de travail «Teachers». Les quantités apparaissent toujours à gauche du nom.Excel Erreur d'exécution VBA '13' Type Erreur d'incompatibilité

Voici le code. Si quelqu'un pouvait me donner un indice sur ce que je définis incorrectement, je serais très reconnaissant! Le débogage suggère que le problème est dans la ligne qui a ***** à la fin (ne fait pas partie du code).

Sub Counter2018() 
    Dim Var1 As String 
    Dim CVar1 As Integer 

    Dim i As Integer 
    Dim j As Integer 
    Dim k As Integer 

    For k = 2 To 50 
     Var1 = Worksheets("Teachers").Cells(k, 3) 
     CVar1 = 0 
     For i = 2 To 45 
      For j = 2 To 45 
       If Worksheets("2018 Subjects and Teachers").Cells(i, j) = Var1 Then 
        CVar1 = CVar1 + Worksheets("2018 Subjects and Teachers").Cells(i, j - 1) ***** 
       End If 
      Next j 
     Next i 
     Worksheets("Teachers").Cells(k, 5) = CVar1 
    Next k 
End Sub 
+1

Quelle est la valeur de i & j quand il se bloque et quelles sont les données dans la cellule i, j-1? – SlowLearner

+0

Malheureusement, je ne sais pas comment vérifier cela. Je suis assez nouveau pour tout ça. –

+0

Dans ce cas, je vous suggère de vous renseigner sur la fenêtre immédiate - vous pouvez parcourir votre code en appuyant sur F8 et utiliser ce '? I 'et'? J' pour savoir quelles sont les valeurs à ce point dans le code: Bonne chance et amusez-vous – SlowLearner

Répondre

0

Essayez cette version (non testé)


Option Explicit 

Public Sub Counter2018() 
    Dim wsTeachers As Worksheet, wsSubjects As Worksheet 

    Set wsTeachers = Worksheets("Teachers") 
    Set wsSubjects = Worksheets("2018 Subjects and Teachers") 

    Dim teacher As String, counter As Long 
    Dim i As Long, j As Long, k As Long 

    For k = 2 To 50 
     teacher = wsTeachers.Cells(k, 3) 
     counter = 0 
     For i = 2 To 45 
      For j = 2 To 45 
       If wsSubjects.Cells(i, j).Value2 = teacher Then 
        If Not IsError(wsSubjects.Cells(i, j - 1)) Then 
         counter = counter + Val(wsSubjects.Cells(i, j - 1).Value2) 
        End If 
       End If 
      Next 
     Next 
     wsTeachers.Cells(k, 5) = counter 
    Next 
End Sub 

Je pense que l'erreur Incohérence de type est causée par certaines des cellules dans wsSubjects.Cells(i, j - 1)

Ce compteur attend nombres cette colonne, mais il pourrait y avoir des chaînes ou des erreurs

+1

Je recommande de toujours utiliser 'Long' au lieu de' Integer', surtout quand vous itérez des cellules. (par exemple, Excel a plus de lignes que 'Integer' peut gérer). Et il n'y a aucun avantage à utiliser 'Integer' du tout (seulement les inconvénients). Voir https://stackoverflow.com/a/26409520/3219613 –

+1

Merci beaucoup Paul Bica! Cela n'a pas fonctionné au début car la ligne 'teacher = wsTeachers.Cells (k, 3)' était avant que k ne soit défini et donc il a commencé à une cellule dans la rangée 0. Une fois que j'ai mis ça dans la boucle ça a fonctionné parfaitement. Merci beaucoup tout le monde! –

+0

@Peh - bon point; Je n'utilise jamais d'entiers, mais c'était un oubli qui est maintenant corrigé –