2017-12-20 7 views
0

を見つけることができません複数のカウンターがあり、すべて整数として、列DとAの値によってロックされたすべてのヒットをカウントします)。重要な場合:列Dのテキストは、他の2つのDates-comparissonによって生成されています列として表示されますが、テキストとして書式設定されています)。は、私は、二重の基準でシンプルなカウンタを設定しようとしています、あなたが怒鳴る見ての通り、私は</p> <blockquote> <p>ランタイムエラー13</p> </blockquote> <p>によって停止していますランタイムエラー13原因

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が先頭に立っている行を示しているので、最初のカウンタのステートメントが表示されます。

はまた、私は根本的にコードを変更し、この

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

"私はすべての整数として、複数のカウンタを持っている" - 唯一の最後のものは整数です。他はすべてバリアントです。 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)は、自動的にゼロに初期化されます。

  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 
関連する問題

 関連する問題