我继承了许多我公司很多人使用的excel表。最近,一个用户已经开始获得在其他计算机上不会出现的应用程序定义的错误。 我在他的机器上调试过,当工作表被激活时就会发生这种情况。它仅发生在工作表中具有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
工作簿名为Setup
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
我假设有一个设置在激活工作表时调用代码的完整编译。我想在我的开发环境中打开它,以便我可以在本地调查这些问题 我在哪里可以找到这个设置? (我正在使用办公室2013年)
编辑: 根据答案澄清。 Option Explicit在代码的开头设置。我有自动语法检查,并且需要在我的开发设置中设置变量声明,但不会遇到此问题。
答案 0 :(得分:1)
在模块顶部显式选项强制进行变量检查,如果不想检查变量,可以对其进行注释,或者如果需要,可以添加它。
请注意,可以在所有创建的新模块中自动添加此选项,并在选项中添加设置:
VBE的工具►选项►编辑器►复选框需要变量声明
答案 1 :(得分:0)
根据我的经验,当您在代码中使用某些特定于x86体系结构的命令时,有时会在其他计算机上的VBA中出现错误,因为其他计算机是x64并且由于您使用引用(在VBA工具 - >引用中)在其他机器上不可用。我遇到的最后一个原因是不同的安全设置,例如: G。也许您的代码使用需要访问vba对象模型的代码(在Excel文件中 - >选项 - >信任中心 - >信任中心设置 - >宏设置)。首先,我建议检查可疑机器上的Windows体系结构。然后检查您在工作簿中使用的引用。最后检查信任中心设置。我认为您可能很可能不会在您的计算机上遇到相同的错误,因为它们可能只针对一台计算机(例如,不同的系统架构,某些特定的参考或信任中心设置)。
如果错误是由代码中的特定行引起的,我理解,e。 G。有两个woorkbook用户和一个删除了一个标签,你的代码引用并导致错误。所以我认为对你来说也许是一个很好的方法来管理错误。您可以在vba中使用On Error语句,e。 G。你有在工作簿打开时触发的代码,它从Modules运行三个程序,所以你可以这样做:
On Error GoTo Procedure1Error
这里运行程序一
On Error GoTo Procedure2Error
这里运行程序二
On Error GoTo Procedure3Error
这里运行程序三
退出子
Procedure1Error:
MsgBox("程序1导致致命错误。未执行代码。) 退出子
Procedure2Error:
MsgBox("程序2导致致命错误。未执行代码。) 退出子
Procedure3Error:
MsgBox("程序3导致致命错误。未执行代码。) 退出子
End Sub
如果您没有通知用户有关问题的信息,那么您可以使用刚才的On Error简历(您的代码将继续执行),但我不推荐它。