2017-09-08 10 views
1

내 변수의 정의에 문제가 있는데 어디에서 또는 왜 볼 수 없습니다. 교사가 배운 교훈의 양을 세는 것은 아주 간단한 코드입니다. 이 정보는 워크 시트 'Subects and Teachers 2018'에 있으며 '교사'워크 시트에 인쇄해야합니다. 수량은 항상 이름 왼쪽에 표시됩니다.Excel VBA 런타임 오류 '13'형식 불일치 오류

다음은 코드입니다. 누군가 내가 잘못 정의한 것에 대한 힌트를 줄 수 있다면 나는 매우 감사 할 것입니다! 디버깅은 문제가 코드 끝에 포함되지 않은 ***** 행에 있음을 나타냅니다.

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

충돌이 발생할 때 i & j의 값은 무엇이며 셀 i, j-1의 데이터는 무엇입니까? – SlowLearner

+0

불행히도 이것을 확인하는 방법을 모르겠습니다. 나는이 모든 것에 아주 새로운 사람이다. –

+0

그럴 경우 즉각적인 창에 대해 알아볼 것을 제안합니다. F8 키를 눌러 코드를 단계별로 실행할 수 있고이 '? i' 및'? j'를 사용하여 코드의 해당 지점에있는 값을 확인할 수 있습니다.) 행운을 빌며 즐거워하십시오. – SlowLearner

답변

0


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 

내가 형식 불일치 오류가 wsSubjects.Cells(i, j - 1)

그 카운터에 일부 셀에 의해 발생 생각 (안된)이 버전을 사용해보십시오가에 숫자를 기대 그 열에는 문자열이나 오류가있을 수 있습니다.

+1

특히 정수를 반복 할 때는 항상 정수 대신에 'Long'을 사용하는 것이 좋습니다. (예 : Excel에서 'Integer'가 처리 할 수있는 것보다 많은 행이 있음). 그리고 Integer를 전혀 사용하지 않는 것이 장점입니다 (단지 단점 임). https://stackoverflow.com/a/26409520/3219613 –

+1

Paul Bica에게 감사드립니다. 처음에는 선생님 = wsTeachers.Cells (k, 3)가 k가 정의되기 전에 있었기 때문에 행 0의 셀에서 시작되었습니다.이 루프를이 루프에 넣으면 완벽하게 작동했습니다. 많은 분들께 감사드립니다! –

+0

@ 펫 - 좋은 지적; 나는 Integers를 사용하지 않았지만, 이제는 고정 된 감독이었습니다 –