VBA中未声明的变量去哪里了

Ser*_*rge 4 excel vba

我尝试了解一些旧的 VBA 代码的作用(以及如何作用)。

我有一个Sub,并且我有一个未在该Sub中声明的变量。

设置Option ExplicitFalse

我应该将该变量视为全局变量吗?在 VBA 文档中没有找到该信息...

Sub test1()
    x = "test one"
End Sub

Sub test2()
    x = "test2"
    Call test1
    MsgBox (">'" + x + "'<")
End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

无法导航到未声明变量的定义 在此输入图像描述

RBa*_*ung 5

不,未声明的变量是在方法/子例程的本地创建的。当您退出例程时,它将被释放。如果您在另一个例程中引用相同的变量名,它只会创建另一个未初始化的局部变量。

  • @serge [doc](https://learn.microsoft.com/en-us/office/vba/language/concepts/getting-started/understanding-scope-and-visibility) 说“*在过程中定义的变量是程序本地*”。当您尝试使用未声明的变量时,它们会被隐式定义,这意味着隐式定义始终发生在 VBA 的过程中(没有其他方法可以“使用”变量)。 (3认同)
  • @serge 这是一个公平的声明“如果你不是代码的作者”。如果不去任何过程之外搜索“x”的显式定义,可能没有明确的方法来理解“x”是否是全局的。但是……公平地说,VBA 是一种不太出色的语言,而 VBE 是一种不太出色的 IDE。如果您要在 Excel 中实现一个足够复杂的功能,或者要与一个开发团队一起实现,那么 C# 插件之类的东西可能是一种更简洁的方法。 (3认同)
  • @serge 关于范围和可见性:https://learn.microsoft.com/en-us/office/vba/language/concepts/getting-started/understanding-scope-and-visibility 关于“生命周期”:https:// learn.microsoft.com/en-us/office/vba/language/concepts/getting-started/understanding-the-lifetime-of-variables (2认同)
  • @serge 正如我上面指出的,除了可执行代码之外,没有其他方法可以使用变量。在 VBA 可执行代码中*仅*出现并在程序内执行。过程之外的所有代码都是声明性(因此是不可执行的)代码。我承认该文档并没有很好地涵盖这一点,而且其中很多都是暗示,但事实就是如此。如果你问微软,他们会说只使用“Option Explicit”,然后你就不会有任何疑问了。 (2认同)
  • @RBarryYoung啊,谢谢,我明白了,未声明的变量可能只出现在程序内部,而永远不会出现在模块或全局级别 (2认同)
  • 另外,在 VBE(VBA 的 IDE)内,您应该能够使用 *Shift-F2* 转到任何变量的定义(也可以从弹出菜单中访问)。对于未声明的变量,它将要么转到第一次使用,要么就不去任何地方(我不确定,因为我总是使用 Option Explicit)。...好吧,我刚刚检查过,对于未声明的变量,当您尝试转到定义时,它会显示“无法识别标识符”。 (2认同)
  • @RBarryYoung,在OP中添加了图像,并尝试导航到未声明变量的定义(错误) (2认同)