我正在Visual Basic for Applications(6.5)中编写一个小程序(宏),我正在使用集成到Excel 2007中的标准编辑器。
我的问题是我收到没有任何行号信息的错误消息。 我不是指我的错误处理或用户定义的消息。
示例:
错误消息显示我有一个运行时错误'1004'。 我无法点击“调试”按钮,只有“结束”和“帮助”可用。 因此,我没有看到错误发生在哪一行。这非常令人沮丧。
如何解决此问题?
答案 0 :(得分:1)
VBA宏中的此错误通常表示滥用excel VBA函数。您将无法获得调试信息,因为它将从调试器无法访问的内部办公室代码中抛出。
隔离失败的行的最佳方法是将断点放在失败的宏顶部并逐行跟踪。您也可以在堆栈跟踪中找到代码行(尽管我不记得VBA中有多少可用)。
如果您知道代码的某些部分出现故障,您可以将其添加到您的问题中,让我们一起来看看。
答案 1 :(得分:1)
您需要手动添加行号并捕获错误。在陷阱中,使用Erl获取行号。我现在没有Excel来检查我的语法,但你的代码应该是这样的:
public sub Test()
on error goto TestError
10 Dim i as Integer
20 Dim j as Integer
30 i = 1
40 j = 0
50 debug.Print i/j
TestExit:
exit sub
TestError:
debug.Print Err.Number, Err.Description, Erl
goto TestExit
end sub
答案 2 :(得分:1)
无法进入调试模式的一个原因是VBA受到保护 - VBA项目属性 - 用于查看的锁定项目。
答案 3 :(得分:0)
您可以在MZTools中创建错误处理程序“模板”,并快速将它们应用于项目中的每个子/函数。这样的模板会在遇到错误时给你一个消息框,告诉你哪个模块/ sub出错了,Stop会导致代码中断,所以你可以点击F8然后踩到一行代码。这引发了错误。
On Error GoTo {PROCEDURE_NAME}_ErrorHandler
{PROCEDURE_BODY}
NormalExit:
Exit {PROCEDURE_TYPE}
{PROCEDURE_NAME}_ErrorHandler:
MsgBox "Error " & Err.Number & " (" _
& Err.Description & ") in {PROJECT_NAME}:{MODULE_NAME}:{PROCEDURE_NAME}"
Stop
Resume Next
答案 4 :(得分:0)
有时这种错误发生在密码保护部分的代码中 - 特别是在加载项中 - 因为VBA无法在其中移动其调试光标。这就是为什么它没有给你行号。