我尝试理解VBA范围类型,在VBA中不可能做到这一点,但是在其他语言(java,scala等)中它是可能的:
public sub try()
dim myVar as String
myvar = "hello world"
Call displayVar()
end sub
public sub displayVar()
msgbox (myvar)
end sub
您能否提供一些有关此类限制范围的信息?它是动态的或词汇的,我真的不明白其中的区别:/
答案 0 :(得分:3)
Franck Leveque对本地和全球声明之间的区别进行了清晰而简单的演示。
但是,与大多数语言一样,VBA允许您将参数传递给子例程。有时全局变量是唯一的选择或唯一明智的选择。但通常最好在myVar
中声明try
并将其作为参数传递给displayVar
。这可以防止displayVar
意外更改myVar
,因为默认情况下,参数会作为值传递。如果希望子例程更改参数的值,则必须显式传递参数作为参考。大多数现代编程语言都是如此。
另请注意,Public
表示这些子例程对其他模块中的子例程可见。如果Public
被Private
省略或被try
替换,则displayVar
和myVar
只会在其模块中显示。
在下面的代码中,我已将displayVar
的值作为参数传递给Public Sub try()
Dim myVar As String
myvar = "hello world"
Call displayVar(myVar)
End Sub
Public Sub displayVar(Stg As String)
Call Msgbox(Stg, VBOKOnly)
End Sub
。
{{1}}
答案 1 :(得分:1)
变量myVar在函数try()
中声明因此,您只能在try()函数范围内使用它。
通过try()函数作用域,我的意思是在public sub try()和end sub之间写的所有指令。
您尝试从另一个函数(displayVar)调用您的变量。它定义了它自己的范围,不在try函数范围内。
如果你想要这个,你必须在全局范围内声明你的变量(在任何函数之外)
例如:
dim myVar as String
public sub try()
myvar = "hello world"
Call displayVar()
end sub
public sub displayVar()
msgbox (myvar)
end sub