2017-12-20 3 views
0

나는 이중 기준에 간단한 카운터를 설정하려고 내가런타임 오류를 찾을 수 없습니다 (13) 원인

런타임 오류에 의해 중단하고 13

당신이 우는 소리시피, I 여러 개의 카운터를 모두 Integer로 가지고 있고 열 D와 A의 값에 따라 고정 된 모든 적중 수를 계산하기를 원합니다.) 중요한 경우 : D 열의 텍스트가 다른 두 개의 Dates-comparisson을 통해 생성됩니다 열로 표시되지만 텍스트로 서식이 지정됨).

Private Sub Workbook_Open() 

Dim lr, i, k, a, b, c, d, e, f, g, h, j, l, m, n, o, p, q, r, s As Integer 

a = b = c = d = e = f = g = h = j = l = m = n = o = p = q = r = 0 

Worksheets("overdue").Activate 

lr = Range("D" & Rows.Count).End(xlUp).Row 

k = 1 

For i = 1 To lr 

If Cells(i, "D").Value = "OVERDUE" And Cells(i, "A") Like "*φίλτρου*" Then 
a = a + 1 
ElseIf Cells(i, "D").Value = "OVERDUE" And Cells(i, "A") Like "*Λιπαντικού*" Then 
b = b + 1 

k = k + 1 

End If 
Next i 

이 난

If Worksheets("overdue").Cells(i, "D").Value = "OVERDUE" And Worksheets("overdue").Cells(i, "A") Like "*ößëôñïõ*" Then 

처럼 바로 셀 구문에서 워크 시트 이름을 재배치하려하지만 도움이 될 것 같지 않습니다. 아무도 제안이 있습니까? If를 추가하는 것을 잊어 버렸습니다. 디버거에 If가 시작되는 행이 표시되므로 첫 번째 카운터에 대한 명령문이 표시됩니다.

또한, 나는 근본적으로 코드를 변경하고이

Sub testcounter() 

Dim cell As Range 
Dim a As Integer 

For Each cell In Worksheets("Sheet2").Range("D1:D3500") 

If cell.Value = "1" Then 
a = a + 1 
End If 
Next 

MsgBox a 

End Sub 

처럼, 최대한 그것을 단순화 경우 여전히

오류를 준다, 13 참조

IF 문 첫 줄에

입니다.

+2

"나는 정수와 같은 모든 여러 카운터가"- 마지막 하나는 정수입니다. 다른 모든 것은 Variant입니다. VBA에서는 각 유형에 대해 유형을 지정해야합니다. 이와 같이 쉼표로 구분 된 목록을 사용할 수 없습니다. 그리고 쇠사슬로 묶인 임무는 당신이 생각하는 것처럼 작동하지 않습니다. –

+0

그래도 Dim Lr As Integer, i As Integer, k As Integer 등으로 선언을 변경하더라도 동일한 오류가 발생합니다. – user36510

+0

정수는 VBA에서 실제로 사용되지 않습니다. 그들은 16 비트 오피스와의 호환성을 위해 16 비트 정수를 참조합니다. 32 비트 (및 64 비트) 정수는 32 비트이며 VBA에서는 long이라고합니다. 정수 +/- 32K v는 +/- 20 억입니다. – ACatInLove

답변

4
  1. s을 제외한 모든 변수는 Integer입니다.

  2. 모든 변수 (Integer)는 자동으로 0으로 초기화됩니다.

  3. a = b = c = d = e = f = g = h = j = l = m = n = o = p = q = r = 0

    R은 다음이 비교 결과에 q 등 비교 0 같은지 여부를 체크있어 논리 비교, 즉를 가져온다.

+0

...그리고 궁극적으로'a' 만 논리적 비교의 결과와 함께 쓰여지고, 다른 모든 언급 된 변수는 실행되기 전의 값을 유지합니다. – GSerg

4
Dim a, b, c, d As Integer '<< only d is integer... 

a = b = c = d = 0 

Debug.Print "a", a 
Debug.Print "b", b 
Debug.Print "c", c 
Debug.Print "d", d 

출력 :

a    True 
b    
c    
d    0