Ich erhalte einen Typenkonfliktfehler in meinem VBA-Makro. Hier ist der wesentliche Teil meiner Code:Typenkonflikt in For-Schleife einschließlich Tests der Werte der Arbeitsblattzelle
Public Function CalculateSum(codes As Collection, ws As Worksheet) As Double
On Error GoTo ErrorHandler
If ws Is Nothing Then
MsgBox ("Worksheet is necessery")
Exit Function
End If
Dim balanceColumnIndex, codesCulumnIndex As Integer
Dim searchStartRow, searchEndRow As Integer
balanceColumnIndex = 17
codesColumnIndex = 4
searchStartRow = 7
searchEndRow = ws.Cells(ws.Rows.Count, codesColumnIndex).End(xlUp).Row
Dim result As Double
result = 0#
For counter = searchStartRow To searchEndRow
If Len(ws.Cells(counter, codesColumnIndex)) > 0 And Len(ws.Cells(counter, balanceColumnIndex)) > 0 And _
IsNumeric(ws.Cells(counter, codesColumnIndex).Value) And IsNumeric(ws.Cells(counter, balanceColumnIndex).Value) Then
If Contains(codes, CLng(ws.Cells(counter, codesColumnIndex).Value)) Then
result = result + ws.Cells(counter, balanceColumnIndex).Value
''' ^^^ This line throws a type-mismatch error
End If
End If
Next counter
CalculateSum = result
ErrorHandler:
Debug.Print ("counter: " & counter & "\ncode: " & ws.Cells(counter, codesColumnIndex).Value & "\namount: " & ws.Cells(counter, balanceColumnIndex).Value)
End Function
Nun, was passiert, ist, dass ein Typ-Fehlanpassungsfehler occures auf der Linie, wo aktuelle Zeile Balance zu result
obwohl hinzugefügt:
- searchEndRow gleich 129 Zähler, und irgendwie gleich 130
- Zellen unter dem aktuellen Adresse sind leer, aber irgendwie hielt sie Pass-Test für Länge und numerische Werte (ich an dieser Stelle zu debuggen,
IsNumeric(ws.Cells(counter, codesColumnIndex).Value)
kehrttrue
!
Jetzt bin ich einfach verwirrt und ich weiß nicht, was ich tun soll. Bitte helfen Sie.
Die in einem 'für ... bis ... 'verwendete Variable ist immer die Grenze + 1 nach der Schleife. Das ist normal. – litelite
'Cells.Value' gibt eine Variante zurück. Wenn es leer ist, kann es als Zahl (0) ausgegeben werden und ist somit numerisch. Auch das ist normal. – litelite
@litelite, aber warum passiert Len (ws.Cells (counter, codesColumnIndex))> 0 Test? –