我有以下问题:
Option Explicit
已被使用。
代码
Function myFun( myVar as Double) as double
myVar = myVar + 1
end function
抛出myVar
未定义的错误
但是,如果我添加行Dim myVar as Double
,则表示该变量被声明两次。
我做错了什么?
由于
答案 0 :(得分:3)
如果您在函数Dim myVar as Double
中添加myFun
,则会将其声明两次。第一次是该行,第二行是参数:
Function myFun( myVar as Double) as double
这与Option Explicit
没有任何关系,不允许在同一范围内声明两个具有相同名称的变量。
我想您的代码如下所示:
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
为了避免"未声明错误",您应该在myVar
而不是Sub TestMe
函数中声明myFun
。
答案 1 :(得分:1)
根据您对Vityata提问的评论,让我尝试一种稍微不同的解释方式。
您需要考虑变量的范围。
请考虑您有两个独立的程序:
程序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
如果要声明变量,并使其在多个过程中具有相同的变量,则需要将其声明为模块级别(例如)。
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
和对函数的调用略有不同。
另外,在模块级别使用Public
关键字声明变量将使Project
中的所有过程都可以看到该变量。使用Private
关键字对其进行声明会使Module
中的所有过程都可以看到它。