如何在worksheet.activate上强制VBA编译工作表代码

我inheritance了很多人在我公司使用的excel表格。 最近有一个用户已经开始获取其他计算机上不存在的应用程序定义的错误。 我已经在他的机器上进行了debugging,并且在工作表激活时发生。 它只发生在工作表中带有VBA的工作表上,以及未使用例程中出现错误的地方。 例如。

option explicit sub RunReport() ... Setup.Activate 'compilation error occurs here when debugging 'I assume that this is the cause of the application-defined error which occurs when not debugging ... end sub 

名为设置的工作簿

 Option Explicit .... other code Private Sub ListBox1_Initialize()'Listbox1 has been deleted from the sheet so this is never called Dim allReports() As String allReports = Split(ALL_LOCS, DELIM) ListBox1.list = allReports 'compile error here because listbox1 doesn't exist End Sub 

我假设有一个设置是在工作表激活时调用代码的完整编译。 我想打开我的开发环境,所以我可以在本地调查这些问题。
我在哪里可以find这个设置? (我正在使用office 2013)

编辑:基于答案澄清。 Option Explicit在代码的开始处被设置。 我有自动语法检查,并要求在我的开发设置不会遇到此问题的variables声明集。

显式位于模块顶部的选项会强制进行variables检查,如果您不想进行variables检查,则可以对其进行注释,或者在需要时添加它。

请注意,可以在所有创build的新模块中自动添加此选项,并在选项中进行设置:

VBE的工具►选项►编辑器►checkbox需要variables声明

根据我的经验,当您在代码中使用x86架构特有的某些命令时,在其他计算机上的VBA中有时会出现错误,因为其他计算机为x64,并且由于您使用了不可用的引用(在VBA Tools->引用中)在其他机器上。 我遇到的最后一个原因是不同的安全设置,例如,也许你的代码使用需要访问vba对象模型(在Excel文件 – >选项 – >信任中心 – >信任中心设置 – >macros设置)。 所以我首先build议检查怀疑机器上的Windows体系结构。 然后检查您在工作簿中使用的引用。 最后检查信任中心的设置。 我认为,在您的计算机上,您可能很难得到与只有一台计算机相同的错误(例如,不同的系统体系结构,某些特定参考或信任中心设置)。

如果错误是由代码中的特定行引起的,那么我明白,例如,有两个woorkbook用户,一个删除了一个标签,您的代码引用该标签并导致错误。 所以我认为这可能是一个很好的方法来处理错误。 您可以在vba中使用On Error语句,例如,您有打开工作簿时触发的代码,它从模块运行三个过程,因此您可以这样做:

在错误转到Procedure1Error

这里运行一个程序

在错误转到Procedure2Error

这里运行程序二

在错误转到Procedure3Error

这里运行程序三

退出小组

Procedure1Error:

MsgBox(“Procedure 1 caused fatal error。Code was not executed。)Exit Sub

Procedure2Error:

MsgBox(“Procedure 2 caused fatal error。Code was not executed。)Exit Sub

Procedure3Error:

MsgBox(“Procedure 3 caused fatal error。Code was not executed。)Exit Sub

结束小组

如果你没有通知用户有关的问题,那么你可以使用只是在错误恢复下一步(您的代码将继续执行),但我不推荐它。