没有行号的错误消息

时间:2012-04-12 21:58:30

标签: excel vba error-handling

我正在Visual Basic for Applications(6.5)中编写一个小程序(宏),我正在使用集成到Excel 2007中的标准编辑器。

我的问题是我收到没有任何行号信息的错误消息。 我不是指我的错误处理或用户定义的消息。

示例:

German Error Message '1004'

错误消息显示我有一个运行时错误'1004'。 我无法点击“调试”按钮,只有“结束”和“帮助”可用。 因此,我没有看到错误发生在哪一行。这非常令人沮丧。

如何解决此问题?

5 个答案:

答案 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无法在其中移动其调试光标。这就是为什么它没有给你行号。