vba 循环没有 Do 错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20476206/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Loop without Do error
提问by Felix Castor
I'm trying to implement a simple Newton's method iterative solver using Excel VB (I have never used VB.)
我正在尝试使用 Excel VB 实现一个简单的牛顿法迭代求解器(我从未使用过 VB。)
I keep getting the error loop without a Do
and I can't figure out what I'm doing wrong here.
我不断收到错误消息loop without a Do
,我无法弄清楚我在这里做错了什么。
I'm trying to find the roots of the function z^3 - z^2 - (B^2 + B - A)z - A*B
called the compressibility factor.
我试图找到z^3 - z^2 - (B^2 + B - A)z - A*B
称为压缩因子的函数的根。
My source MSN
我的源MSN
Function zCalculation(ByVal temp As Double, ByVal press As Double) As Double
Dim tempCr As Double
Dim pressCr As Double
Dim A As Double
Dim B As Double
tempCr = temp / 238.5
pressCr = press / 547.424092
A = pressCr / tempCr
A = A / (9 * (2 ^ (1 / 3) - 1))
B = pressCr / tempCr
B = B * (2 ^ (1 / 3) - 1) / 3
Dim zNot As Double
Dim counter As Integer
counter = 0
zNot = 1#
Do
counter = counter + 1
zNot = zNot - (zNot ^ 3 - zNot ^ 2 - (B ^ 2 + B - A) * zNot - A * B) / (3 * zNot ^ 2 - 2 * zNot - (B ^ 2 + B - A))
If counter > 1000 Then
Exit Do
Loop Until eval(zNot, A, B) < 0.000001
zCalculation = zNot
End Function
break
休息
Function eval(ByVal z As Double, ByVal A As Double, ByVal B As Double) As Double
eval = z ^ 3 - z ^ 2 - (B ^ 2 + B - A) * z - A * B
End Function
回答by Gary's Student
You need an:
你需要一个:
End If
in your code.
在你的代码中。
回答by Makah
You can try:
你可以试试:
Function zCalculation(ByVal temp As Double, ByVal press As Double) As Double
Dim tempCr As Double
Dim pressCr As Double
Dim A As Double
Dim B As Double
tempCr = temp / 238.5
pressCr = press / 0.546789
A = pressCr / tempCr
A = A / (9 * (2 ^ (1 / 3) - 1))
B = pressCr / tempCr
B = B * (2 ^ (1 / 3) - 1) / 3
Dim zNot As Double
Dim counter As Integer
counter = 0
zNot = 1#
Do
counter = counter + 1
zNot = zNot - (zNot ^ 3 + zNot ^ 2 - (B ^ 2 + B - A) * zNot - A * B) / (3 * zNot ^ 2 + 2 * zNot - (B ^ 2 + B - A))
If counter > 1000 Then
Exit Do
End if ' <--- Here
Loop Until eval(zNot, A, B) < 0.000001
zCalculation = zNot
End Function
回答by user8646115
Sub datacalculationsandformat()
Dim row As Integer
row = 2
Do While Cells(row, 2) <> ""
Cells(row, 3).Value = Cells(row, 2).Value * 0.3
Cells(row, 4).Value = Cells(row, 2) * 0.1
Cells(row, 5).Value = Cells(row, 2).Value + Cells(row, 3).Value + Cells(row, 4).Value
If Cells(row, 5).Value >= 8000 Then
Worksheets("Sheet1").Cells(row, 5).Font.Bold = True
row = row + 1
Loop