4

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

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

例子:

德语错误消息“1004”

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

我该如何解决这个问题?

4

6 回答 6

1

无法进入调试模式的一个原因是 VBA 受保护 - VBA 项目属性 - 锁定项目以供查看。

于 2012-04-13T07:42:58.170 回答
1

VBA 宏中的此错误通常表明滥用了 excel VBA 函数。您将不会获得调试信息,因为它会从调试器无法访问的内部办公室代码中抛出。

隔离失败行的最佳方法是在失败的宏顶部放置一个断点,并逐行跟踪它。您还可以在堆栈跟踪中找到您的代码行(尽管我不记得在 VBA 中有多少可用的代码)。

如果您知道某些代码部分发生故障,您可以将其添加到您的问题中,让我们看看。

于 2012-04-12T22:21:03.820 回答
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
于 2012-04-13T00:18:31.997 回答
0

您可以在 MZTools 中创建错误处理程序“模板”,并非常快速地将它们应用于项目中的每个子/功能。这样的模板会在遇到错误时给您一个消息框,告诉您错误所在的模块/子,并且停止将导致代码中断,因此您可以按 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
于 2012-04-13T18:13:09.780 回答
0

有时这种错误发生在受密码保护的代码部分中——尤其是在加载项中——因为 VBA 无法将其调试光标移动到那里。这就是为什么它不给你行号。

于 2012-04-15T23:22:22.707 回答
0

我发现了几个没有行号的巧妙解决方案。实现时被称为天赐之物的那个触发了我的实现,我在直奔错误线中描述了它

于 2022-02-17T21:19:52.033 回答