总是使用显式选项

在 VBA 编辑器窗口中,从工具菜单中选择选项

StackOverflow 文档

然后在编辑器选项卡中,确保选中需要变量声明

StackOverflow 文档

选择此选项将自动将 Option Explicit 置于每个 VBA 模块的顶部。

小注意: 这对于目前尚未打开的模块,类模块等是正确的。因此,如果你在激活需求变量声明选项之前已经查看了例如 Sheet1 的代码,则不会添加 Option Explicit

Option Explicit 要求在使用前必须定义每个变量,例如使用 Dim 语句。如果没有启用 Option Explicit,VBA 编译器将假定任何未识别的单词为 Variant 类型的新变量,从而导致与打印错误相关的极难发现的错误。启用 Option Explicit 后,任何无法识别的单词都会导致抛出编译错误,表示有问题的行。

示例:

如果你运行以下代码:

Sub Test()
  my_variable = 12
  MsgBox "My Variable is : " & myvariable
End Sub

你将收到以下消息:

StackOverflow 文档

你通过编写 myvariable 而不是 my_variable 来表示错误,然后消息框显示一个空变量。如果你使用 Option Explicit,则无法执行此错误,因为你将收到指示问题的编译错误消息。

StackOverflow 文档

现在,如果你添加正确的声明:

Sub Test()
  Dim my_variable As Integer
  my_variable = 12
  MsgBox "My Variable is : " & myvariable
End Sub

你将获得一条错误消息,指出 myvariable 的错误:

StackOverflow 文档

关于 Option Explicit 和 Arrays声明动态数组 )的注意事项

你可以使用 ReDim 语句在过程中隐式声明数组。

  • 使用 ReDim 语句时,请注意不要拼错数组的名称

  • 即使模块中包含 Option Explicit 语句,也会创建一个新数组

    Dim arr() as Long

    ReDim ar()'creates new array "ar" - "ReDimar()" acts like "Dim ar()"