VBA认为Return是一个变量

时间:2016-03-15 21:27:12

标签: vba function fibonacci

我试图以递归的方式制作斐波那契:

Option Explicit
Dim n, contador, termo

function fibonacci(n)
  if n < 2 then
    Return n
  else
    Return fibonacci(n-1) + fibonacci(n-2)
  end if        
End function

termo = InputBox("Diga ate que termo vai a sequencia de fibonacci")*1

for contador = 0 to termo
  MsgBox fibonacci(contador)
next

但是我收到错误:变量未定义:&#39;返回&#39; 我的代码出了什么问题?

3 个答案:

答案 0 :(得分:5)

不会使用Return关键字返回VBA函数的返回值。

事实上,Return作为关键字的唯一有效用途是从GoSub跳转返回:

    foo = 42
    GoSub DoSomething
    Debug.Print foo

DoSomething:
    foo = foo / 2
    Return

GoSub跳转到DoSomething标签,将foo除以2,返回到调用子程序,输出21到调试/即时窗格

古老的SubFunction构造之前的古老关键字和构造。

那么函数如何返回呢?

通过...(屏住呼吸,捏住鼻子)...... 分配功能的标识符

Function GetFoo() As Integer
    GetFoo = 42
End Function

属性getter相同:

Property Get Foo() As Integer
    Foo = 42
End Property

最好的部分?这样做不会返回。它确定返回值。如果您需要立即退出(例如,因为还有其他代码会运行),您需要使用Exit Function

Function GetFoo() As Integer
    GetFoo = 42
    Exit Function
    Debug.Print "dead code here"
End Function

答案 1 :(得分:0)

如果要返回函数的值,可以将该值设置为函数名称,如下所示:

function fibonacci(n)
  if n < 2 then
    fibonacci = n
  else
    fibonacci = fibonacci(n-1) + fibonacci(n-2)
  end if        
End function

你的函数有一个逻辑错误,你的for循环返回termo + 1元素,因为你包含元素0,1,2和3.所以你可以设置你的for循环从0到termo-1。

答案 2 :(得分:0)

更改为...

Function fibonacci(n)
    If n < 1 Then
        fibonacci = n
    Else
        fibonacci = n + fibonacci(n - 1)
    End if        
End Function