2017-12-20 4 views
0

Ich versuche, einen einfachen Zähler mit Doppel Kriterien einzurichten und ich hörte ich vonKann Laufzeitfehler 13 nicht Ursache finden

Laufzeitfehler 13

Wie Sie unten sehen, ich habe mehrere Zähler, alle als Ganzzahl und ich möchte, dass sie jeden Treffer zählen, der in Abhängigkeit von den Werten der Spalten D und A gesperrt ist. Falls es darauf ankommt: Der Text in Spalte D wird über Datumsvergleich in zwei anderen generiert Spalten, aber ist als Text formatiert).

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 

Ich habe sogar versucht, die Arbeitsblatt-Namen direkt an der Zell-Syntax wie

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

zu verlagern, aber es scheint nicht zu helfen. Hat jemand einen Vorschlag? Ich habe vergessen hinzuzufügen, dass der Debugger die Zeile zeigt, wo das If beginnt, also die Anweisung für den ersten Zähler.

Auch ich sehe, dass, wenn ich den Code radikal und vereinfachen, es so weit wie möglich zu ändern, wie diese

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 

Es ist immer noch die 13

Fehler

gibt aus

in der ersten Zeile der IF-Anweisung.

+2

"Ich habe mehrere Zähler, die alle als Integer" - nur die letzte einer ganzen Zahl ist. Alle anderen sind Varianten. In VBA müssen Sie den Typ für jede angeben: Sie können eine durch Kommas getrennte Liste nicht verwenden. Und diese angekettete Aufgabe funktioniert nicht wie du denkst. –

+0

OK, aber auch wenn ich die Deklaration zu Dim lr As Ganzzahl ändere, wie As Integer, k As Integer usw. Ich bekomme den gleichen Fehler – user36510

+0

Ganzzahlen werden nicht wirklich in VBA verwendet. Sie beziehen sich auf 16-Bit-Integer für die Kompatibilität mit 16-Bit-Office. Die 32 Bit (und 64 Bit) Ganzzahl ist 32 Bit und wird in VBA als Long bezeichnet. Integer +/- 32K v ist eine lange +/- 2 Milliarden. – ACatInLove

Antwort

4
  1. Alle Variablen mit Ausnahme s, sind nicht Integer s.

  2. Alle Variablen (waren sie Integer s) werden automatisch auf Null initialisiert.

  3. a = b = c = d = e = f = g = h = j = l = m = n = o = p = q = r = 0 bringt logischen Vergleich, das heißt es aktiviert ist, ob r gleich 0 ist, dann wird das Ergebnis dieses Vergleichs im Vergleich zu q und so weiter.

+0

...und schließlich wird nur "a" mit dem Ergebnis des logischen Vergleichs geschrieben, alle anderen erwähnten Variablen behalten die Werte bei, die sie hatten, bevor die Klausel ausgeführt wurde. – 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 

Ausgang:

a    True 
b    
c    
d    0 
Verwandte Themen