如何在没有编译/运行时错误的情况下识别损坏的vba代码?
我想知道,在没有编译/运行时错误的情况下,是否有任何方法可以识别所有损坏的vba代码(例如:变量) 例如: 假设ModuleA.bas中有一个变量定义为:如何在没有编译/运行时错误的情况下识别损坏的vba代码?,vba,ms-word,Vba,Ms Word,我想知道,在没有编译/运行时错误的情况下,是否有任何方法可以识别所有损坏的vba代码(例如:变量) 例如: 假设ModuleA.bas中有一个变量定义为: Public Const REG_SZ长=1 其他文件(如ModuleB.bas、ModuleC.bas等)使用此变量 现在,如果我们删除包含变量REG_SZ的ModuleA.bas文件并构建项目,那么就不会看到编译或运行时错误只有在调试时,您才意识到程序默认此变量没有值。当您在其他模块中右键单击此变量并单击“定义”时,会出现一个错误:“光标
Public Const REG_SZ长=1
其他文件(如ModuleB.bas、ModuleC.bas等)使用此变量
现在,如果我们删除包含变量REG_SZ的ModuleA.bas文件并构建项目,那么就不会看到编译或运行时错误只有在调试时,您才意识到程序默认此变量没有值。当您在其他模块中右键单击此变量并单击“定义”时,会出现一个错误:“光标下的标识符不可识别”。解决方案是在每个文件上本地声明此变量,或使用声明的变量重新恢复原始ModuleA.bas文件
我想知道是否有任何方法可以在没有编译/运行时错误的情况下识别所有损坏的vba代码(例如:变量)?要回答您关于变量的特定问题。。。在每个代码模块的顶部放置一个
选项Explicit
语句。您插入的任何未声明其变量的VBA代码都将自动标记,而无需编译代码。要回答您关于变量的特定问题。。。在每个代码模块的顶部放置一个选项Explicit
语句。您插入的任何未声明其变量的VBA代码将自动标记,而无需编译代码。VBE选项对话框的[Editor]选项卡中有一个标记为“要求变量声明”的设置,该设置将自动向每个模块添加Option Explicit
:
在模块的声明部分使用Option Explicit
,会使VBA拒绝编译/运行使用未声明变量的项目
Visual Basic编辑器(VBE)除此之外没有多大帮助,但是VBE附加模块(例如)可以进一步推动静态代码分析-例如,当模块中缺少Option Explicit
时,如果从未分配变量或未使用过程,它可以向您发出警告,如果赋值在使用前是冗余的或被覆盖的,如果IsMissing
功能被误用,…以及其他许多功能(从v2.3开始,大约80项检查已实施,计划于11月25日发布):
免责声明:我管理此开源项目。VBE选项对话框的[Editor]选项卡中有一个标记为“要求变量声明”的设置,该设置将自动向每个模块添加
Option Explicit
:
在模块的声明部分使用Option Explicit
,会使VBA拒绝编译/运行使用未声明变量的项目
Visual Basic编辑器(VBE)除此之外没有多大帮助,但是VBE附加模块(例如)可以进一步推动静态代码分析-例如,当模块中缺少Option Explicit
时,如果从未分配变量或未使用过程,它可以向您发出警告,如果赋值在使用前是冗余的或被覆盖的,如果IsMissing
功能被误用,…以及其他许多功能(从v2.3开始,大约80项检查已实施,计划于11月25日发布):
免责声明:我管理这个开源项目。您的意思是它将强制该文件本身声明变量吗?或者,只要项目中某个地方有一个变量就可以了?@variable它是特定于代码模块的。如果有多个模块,则每个模块都必须有一个显式选项。每个UserForm还需要语句。@变量它取决于它是公共变量还是私有变量。尝试搜索/阅读它,因为它有点复杂。任何关于这个概念的文章链接或搜索关键字都将不胜感激。谢谢。@变量VBE的选项菜单中还有一个设置:
需要变量声明
(或类似设置)-这将自动将选项显式
添加到从此点创建的任何新模块中。(我强烈建议激活该设置!)您的意思是它将强制该文件本身声明变量吗?或者,只要项目中某个地方有一个变量就可以了?@variable它是特定于代码模块的。如果有多个模块,则每个模块都必须有一个显式选项。每个UserForm还需要语句。@变量它取决于它是公共变量还是私有变量。尝试搜索/阅读它,因为它有点复杂。任何关于这个概念的文章链接或搜索关键字都将不胜感激。谢谢。@变量VBE的选项菜单中还有一个设置:需要变量声明
(或类似设置)-这将自动将选项显式
添加到从此点创建的任何新模块中。(我强烈建议激活该设置!)您可能需要查看外接程序。它将检查代码中的常见问题(包括未声明的变量)。完全公开,我是一个贡献者。您可能想看看外接程序。它将检查代码中的常见问题(包括未声明的变量)。充分披露,我是一个贡献者。