Warum bekomme ich beim 2. mal durchlaufen fehler index außerhalb des bereichs?

josefhader

Grünschnabel
Warum bekomme ich beim 2. mal durchlaufen bei der fett gedruckten zeile den fehler index außerhalb des bereichs?
Laufzeitfehler '9'
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call berechnen
End Sub





Public Sub berechnen()


Dim varArrayX As Variant, varArrayY As Variant, varArrayZ As Variant, varArrayK As Variant
Dim intIndex As Long
Dim i As Long
i = 0
i = i + 1
Do While Cells((2 + i), 5) Eqv 0

varArrayX = Split(Cells((i + 2), 22), ";") 'Zelle mit dem beschädigten durchmesser
varArrayY = Split(Cells((i + 2), 24), ";") 'Zelle mit dem Rollendurchmesser
varArrayZ = Split(Cells((i + 2), 23), ";") 'Zelle mit dem Gewicht der Beschädigten Rolle
varArrayK = Split(Cells((i + 2), 26), ";") 'Zelle mit durchschnittlichen Durchmesser
If UBound(varArrayX) = UBound(varArrayY) Then

If CDec(varArrayY(intIndex)) <= 0.95 * CDec(varArrayK(intIndex)) Then

For intIndex = 0 To UBound(varArrayX)
Cells(intIndex + (i + 2), 25) = ((400 * CDec(varArrayY(intIndex)) * (CDec(varArrayK(intIndex)) - CDec(varArrayY(intIndex))) / (CDec(varArrayK(intIndex)) ^ 2 - (Cells((i + 2), 12)) ^ 2)) / 100) * (400 * CDec(varArrayX(intIndex)) * (CDec(varArrayY(intIndex)) - CDec(varArrayX(intIndex))) / (CDec(varArrayY(intIndex)) ^ 2 - (Cells((i + 2), 12)) ^ 2)) / 100 * (CDec(varArrayZ(intIndex)))
Next
Else


For intIndex = 0 To UBound(varArrayX)
Cells(intIndex + (i + 2), 25) = (400 * CDec(varArrayX(intIndex)) * (CDec(varArrayY(intIndex)) - CDec(varArrayX(intIndex))) / (CDec(varArrayY(intIndex)) ^ 2 - (Cells((i + 2), 12)) ^ 2)) / 100 * (CDec(varArrayZ(intIndex)))
'Ausgabe in Spalte B
Next
End If
Else
MsgBox "In den Zelle für Beschädigter- Eingesetzte Rollendurchmesser und Rollen gewicht ist die Anzhal von Zahlen unterschiedlich." & vbLf & "Programmabbruch.", 16, "Fehler"

End If




Loop

End Sub
dank im voraus
 
Wenn die fettgedruckte Zeile den Fehler auslöst, gehe ich davon aus daß intIndex außerhalb des Bereichs ist. Setz es am Ende der Prozedur doch mal auf Null und starte dann einen zweiten Durchlauf. Dann weißt Du es... :-)
 
Zurück