VBA似乎无缘无故地留下for循环?
我有一个for循环(下面代码中的最后一个循环),它通过一些计算用值填充一些数组 然而,出于某种原因,一旦i=5,它就会跳回到循环的顶部(x+h部分),而不经过循环的其余部分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
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中生成“需要对象”错误吗?(或者是一些我不熟悉的插件-这是很有可能的!!)