应用程序定义或对象定义的错误

Raise 方法或 Error 语句生成的错误与 Visual Basic for Applications 定义的错误不对应时,将会显示此消息。 Error 函数也会对与 Visual Basic for Applications 定义的错误不对应的参数返回此消息。 因此,它可能是您定义的错误,也可能是某个对象定义的错误,包括 Microsoft Excel、Visual Basic 等宿主应用程序。 例如,Visual Basic 窗体会生成与窗体相关的错误,而通过在代码中将数字指定为 Raise 方法或 Error 语句的参数将无法生成这些错误。 此错误的原因和解决方案如下:

  • 应用程序执行了 Err.RaisenErrorn 语句,但 Visual Basic for Applications 未定义数字 n。 如果这是有意为之,则必须使用 Err.Raise 并提供其他参数,以便最终用户可以理解错误的性质。 例如,可以包含一个描述字符串、来源和帮助信息。 若要重新生成您捕获的错误,不能在重新生成错误之前执行 Err.Clear 。 如果先执行 Err.Clear ,则必须为 Raise 方法提供其他参数。 请查看出现错误的上下文,并确保重新生成同一错误。

  • 可能存在这样的情况:在从其他应用程序访问对象时,向您的程序传播了一个错误,而该错误无法映射到任何 Visual Basic 错误。

检查您访问的任何对象的文档。 Err 对象的 Source 属性应包含生成该错误的应用程序或对象的程序 ID。 为了理解对象返回的错误的上下文,可能需要在访问对象的代码中使用 On Error Resume Next 构造,而不是 On Error GoToline 语法。

列出主机应用程序的可捕获错误

[!注释] 过去,编程人员通常使用循环来输出所有可捕获错误消息字符串的列表。 这通常使用如下所示的代码完成:

For index = 1 to 500
    Debug.Print Error$(index)
Next index

Such code still lists all the Visual Basic for Applications error messages, but displays "Application-defined or object-defined error" for host-defined errors, for example those in Visual Basic that relate to forms, controls, and so on. Many of these are trappable run-time errors. 使用帮助“搜索”对话框来查找特定于主机应用程序的可捕获错误的列表。 Click Search, type Trappable in the first text box, and then click Show Topics. Select Trappable Errors in the lower list box and click Go To.

有关其他信息,选择有问题的项并按 F1(在 Windows 中)或 HELP(在 Macintosh 上)。

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。