如何在VBA中正确调用函数/返回值?

时间:2019-11-18 02:07:34

标签: excel vba function

尝试编写一个方法,对于每一步,我都必须调用另一个方法(我将其编码为单独的Sub),但是它不起作用。

Sub implicit()


'Setting limits and stepsize

x0 = 0
xfinal = 100
h = 5
Dim y2 As Double
Dim y As Double

'Calculating number of intervals
n = (xfinal - x0) / h

'Setting initial value
y = 100000

'Loop for implicit method
For i = 1 To n
    Call methodN(y)
    y2 = y + h * (0.1 * y2 - 0.0000008 * y2 ^ 2)
    Cells(2 + i, 3) = y2
    y = y2
Next i

End Sub

'N method

Sub methodN(y)

y2 = y - (y * (1 - 0.1 * h + 0.0000008 * h * y) - y) / (1 - 0.1 * h + 0.0000016 * h * y)


End Sub

当我在第二个子句中将Return y2作为最后一行时,出现编译器错误。我知道我没有正确调用Sub,也没有返回y2值,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

在VBA中,Sub是不可返回的方法。您需要改用Function,然后可以返回值

答案 1 :(得分:0)

简而言之,它应该像这样:

Function methodNewton(y)

y2 = y - (y * (1 - 0.1 * h + 0.0000008 * h * y) - y) / (1 - 0.1 * h + 0.0000016 * h * y)

methodNewton = y2

End Function

或更简单地说:

Function methodNewton(y)
  methodNewton = y - (y * (1 - 0.1 * h + 0.0000008 * h * y) - y) / (1 - 0.1 * h + 0.0000016 * h * y)
End Function

,然后改为这种方式:

y2 = methodNewton(y)

但是您缺少一个h变量,所以也许像这样:

Function methodNewton(y, h)
  methodNewton = y - (y * (1 - 0.1 * h + 0.0000008 * h * y) - y) / (1 - 0.1 * h + 0.0000016 * h * y)
End Function

然后这样称呼它

y2 = methodNewton(y, h)