3

我试图理解 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

你能给我一些关于这种有限范围的信息吗?它是动态的或词汇的,我不太明白其中的区别:/

4

2 回答 2

3

Franck Leveque 对本地声明和全局声明之间的区别进行了清晰而简单的演示。

但是,与大多数语言一样,VBA 允许您将参数传递给子例程。有时全局变量是唯一的选择或唯一明智的选择。但通常最好在myVar内部声明try并将其作为参数传递给displayVar. 这可以防止displayVar意外更改myVar,因为默认情况下,参数作为值传递。如果您希望子例程更改参数的值,则必须显式将该参数作为引用传递。大多数现代编程语言都是如此。

另请注意,这Public意味着这些子程序对其他模块中的子程序可见。IfPublic被省略或替换为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
于 2012-01-06T09:54:02.107 回答
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
于 2012-01-06T09:15:28.740 回答