Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有编译/运行时错误的情况下识别损坏的vba代码?_Vba_Ms Word - Fatal编程技术网

如何在没有编译/运行时错误的情况下识别损坏的vba代码?

如何在没有编译/运行时错误的情况下识别损坏的vba代码?,vba,ms-word,Vba,Ms Word,我想知道,在没有编译/运行时错误的情况下,是否有任何方法可以识别所有损坏的vba代码(例如:变量) 例如: 假设ModuleA.bas中有一个变量定义为: Public Const REG_SZ长=1 其他文件(如ModuleB.bas、ModuleC.bas等)使用此变量 现在,如果我们删除包含变量REG_SZ的ModuleA.bas文件并构建项目,那么就不会看到编译或运行时错误只有在调试时,您才意识到程序默认此变量没有值。当您在其他模块中右键单击此变量并单击“定义”时,会出现一个错误:“光标

我想知道,在没有编译/运行时错误的情况下,是否有任何方法可以识别所有损坏的vba代码(例如:变量)

例如:

假设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的选项菜单中还有一个设置:
需要变量声明
(或类似设置)-这将自动将
选项显式
添加到从此点创建的任何新模块中。(我强烈建议激活该设置!)您可能需要查看外接程序。它将检查代码中的常见问题(包括未声明的变量)。完全公开,我是一个贡献者。您可能想看看外接程序。它将检查代码中的常见问题(包括未声明的变量)。充分披露,我是一个贡献者。