【发布时间】:2012-01-06 08:49:07
【问题描述】:
我尝试理解 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
你能给我一些关于这种有限范围的信息吗?它是动态的还是词法的,我不太明白其中的区别:/
【问题讨论】:
-
您可以考虑使用 VBA 类 - 请参阅 cpearson.com/excel/classes.aspx 和 stackoverflow.com/questions/118863/when-to-use-a-class-in-vba
-
好的,所以只有在课堂上才能做到这一点,我明白。谢谢!
-
您发布的代码无法使用
option explicit on编译,我建议您打开它,因为这可能会掩盖您认为正在发生的事情 -
附注 - 每当您在方法调用之后和第一个括号之前看到空格时,这意味着您正在传递参数
ByVal在大多数情况下您不希望这样,因此您需要添加Call或删除括号,例如Call MsgBox(myvar)或MsgBox myvar -
@reyman64,VBA 绝对使用词法作用域,而不是动态的。您的困惑可能源于 VBA 确实允许 implicit 变量声明这一事实。因此,在您的示例中,第二个
myvar对其例程是本地的。它在此处隐式声明,与第一个无关,它也是其自身例程的本地。 @Matt 建议您查看 VBAOption Explicit的评论是了解正在发生的事情的关键。
标签: vb.net variables vba scoping