VBA:如果使用Option Explicit在函数中定义variables的问题
我有以下问题:
Option Explicit
被使用。
代码
Function myFun( myVar as Double) as double myVar = myVar + 1 end function
抛出myVar
未定义的错误
但是,如果我将Dim myVar as Double
添加Dim myVar as Double
则表示variables被声明了两次。
我究竟做错了什么?
谢谢
如果在函数myFun
中将Dim myVar as Double
添加Dim myVar as Double
,则声明了两次。 第一次是与该行,第二行是在这里的参数:
Function myFun( myVar as Double) as double
这与Option Explicit
没有任何关系,你不能在相同的范围内声明两个具有相同名字的variables。
我想你的代码如下所示:
Option Explicit Public Sub TestMe() 'dim myVar as double (uncomment to avoid the error) myVar = 5 Debug.Print myFun(myVar) End Sub Function myFun(myVar As Double) As Double myVar = myVar + 1 End Function
为了避免“未声明的错误”,您应该在Sub TestMe
声明myVar
,而不是在myFun
函数中声明。
根据你对Vityata的问题的评论,让我尝试一种稍微不同的解释方式。
你需要考虑variables的范围 。
考虑你有两个独立的程序:
程序1
Public Sub TestMe() Dim myVar As Double myVar = 5 Debug.Print myFun(myVar) End Sub
程序2
Function myFun(myVar As Double) As Double myFun = myVar + 1 End Function
- 该模块的顶部有
Option Explicit
- 您的variables在每个过程中定义
- variables的范围是过程
- 因此,每个过程中需要声明每个variables。
- 即使它们具有相同的名称,但由于variables的范围仅在过程内,因此它们不是同一个variables。
如果你想声明一个variables,并在多个过程中使用相同的variables,则需要将其声明为模块级别(例如)。
Option Explicit Public myVar As Double Public Sub TestMe() myVar = 5 myFun myVar Debug.Print myVar End Sub Function myFun(myVar) As Double myVar = myVar + 1 End Function
还要注意在两个不同的模块中, Function
和对Function
的调用是微妙的不同的。
另外,在模块级别使用Public
关键字声明variables将使Project
所有过程都可见。 使用Private
关键字声明它将使该Module
所有过程都可见。