VBA似乎没有原因留下for循环?

时间:2017-05-30 00:26:00

标签: vba

我有一个for循环(下面代码中的最后一个循环),它通过一些计算用一些数组填充值。

然而,由于某种原因,一旦i = 5,它会跳回到循环的顶部(x + h部分),而不会通过循环的其余部分。

While x < xmax

    If x + h < xmax Then                            'If the step is going to overshoot the desired xmax
        x = x + h                                   'make h adequately smalller
    Else
        h = xmax - x
        x = xmax
    End If

                                                                            'k(Order #, equation #)
    For j = 1 To 6                                                          'First to 6th order
        'temp=riddersmethodT(temp)          'Calculate temperature of mixture
        FT = 0
        rho(0) = 0                                 'Setting FT and rho_av to 0 to be re-calculated
        For i = 1 To 7
            rho(0) = rho(0) + rho(i) * Y4(i)       'Calculate average density of mixture
            FT = FT + Y4(i)
            vol_F = vol_F + Y4(i) * MW(i) / rho(i)      'Calculating the total volumetric flowrate (m^3/s)
        Next i

        rho(0) = rho(0) / FT

        For i = 1 To 8                         'Calculating all of the k(1) values for eq 1 to 8
            k(j, i) = AllODES(x, Y4, i, j, k, h, temp, diameter, vol_F, rho(0))
        Next i
    Next j

    For i = 1 To 8
        Y4Old(i) = Y4(i)                                                    'Saving old y4 values to calc delta0
        Y4(i) = Y4(i) + h * (k(1, i) * (37 / 378) + k(3, i) * (250 / 621) + k(4, i) * (125 / 594) + k(6, i) * (512 / 1771))
        Y5(i) = Y4(i) + h * (k(1, i) * (2825 / 27648) + k(3, i) * (18575 / 48384) + k(4, i) * (13525 / 55296) + k(5, i) * (277 / 14336) + k(6, i) * (0.25))

        delta0(i) = error
        delta1(i) = Abs(Y5(i) - Y4(i))
        delRatio(i) = Abs(delta0(i) / delta1(i))                                'Ratio of errors; careful of getting zeroes!
    Next i

我不明白这是怎么可能看到因为我没有在那个循环中被操纵。如果您有任何见解,请告诉我们!

1 个答案:

答案 0 :(得分:1)

我的猜测是你的i上的最后一个循环在某个地方除以零。您可以使用以下内容处理循环中的错误:

Sub yourSub()
    For i = 1 To 8
        On Error GoTo ErrorHandler:
        Y4Old(i) = Y4(i)                                                    
        'Saving old y4 values to calc delta0
        Y4(i) = Y4(i) + h * (k(1, i) * (37 / 378) + k(3, i) * (250 / 621) + k(4, i) * (125 / 594) + k(6, i) * (512 / 1771))
        Y5(i) = Y4(i) + h * (k(1, i) * (2825 / 27648) + k(3, i) * (18575 / 48384) + k(4, i) * (13525 / 55296) + k(5, i) * (277 / 14336) + k(6, i) * (0.25))

        delta0(i) = error
        delta1(i) = Abs(Y5(i) - Y4(i))
        delRatio(i) = Abs(delta0(i) / delta1(i)
    Next i

    Cleanup:
        ' do cleanup here
    Exit Sub

    ErrorHandler:
        ' handle error here
    Resume Cleanup
End Sub

但最好修正你的比赛,首先允许除以零。