Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA似乎无缘无故地留下for循环?_Vba - Fatal编程技术网

VBA似乎无缘无故地留下for循环?

VBA似乎无缘无故地留下for循环?,vba,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

我有一个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
而x

我不明白这怎么可能,因为我没有在那个循环中被操纵。如果你有任何见解,请让我知道

我猜你在
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

但最好先修复允许除0的匹配。

delta0(i)=error
。。。这里的实际代码是什么?@TimBiegeleisen如果这个位不清楚,很抱歉:“error”是一个表示错误容忍度的变量。在这个函数中它不会改变,它的值通常在0.01左右,在这个循环中有一个除法。如果出现了零点零点,它可能解释了为什么在没有倒计时整个循环计数器的情况下,循环似乎在中间突然失效。是不是可以对一个Rh()或Y4()函数进行改变?@ TimiGeEeleSee实际上是一个除以零的函数。我很困惑,因为代码一直在后面运行,但是是的,我想这意味着在其他地方有问题。谢谢你的帮助!这段代码不是要写“发生了错误”吗?不管是否发生了错误?并且不会在VBA中生成“需要对象”错误吗?(或者是一些我不熟悉的插件-这是很有可能的!!)