【问题标题】:Run an Excel macro from a VB Script, but don't prompt VBA runtime errors从 VB 脚本运行 Excel 宏,但不提示 VBA 运行时错误
【发布时间】:2017-07-24 05:18:01
【问题描述】:

我想在 VB 脚本中运行 Excel 宏,但没有 VBA 给出运行时错误提示,即使该宏有未捕获的运行时错误。

理想情况下,我想捕获实际的运行时错误消息,但我很高兴能够在不与对话框交互的情况下恢复脚本。

这是我正在谈论的一个最小示例。

test.vbs:

Option Explicit 

Dim Excel: set Excel = CreateObject("Excel.Application")
Dim wb: set wb = Excel.Workbooks.Open("C:\Temp\test.xls")

On Error Resume Next
Excel.run "Hello"
On Error Goto 0

wb.Close
Excel.Quit

在名为 test.xls 的 Excel 电子表格的模块 1 中:

Option Explicit

Sub Hello()
    Dim x As Integer
    x = 1 / 0 ' Just causing an error for this example's purposes
End Sub

关于这个问题背后的动机的简短解释。这是一项自动化任务,除了我无法更改需要自动化的宏的代码,因此我无法控制我调用的宏是否会出现未捕获的运行时错误。

Stackoverflow 上有很多很多关于使用 VB 脚本运行 Excel 宏的问题,但我找不到任何能够抑制 VBA 运行时错误提示的地址。

【问题讨论】:

  • 您在寻找Excel.DisplayAlerts = False吗?
  • 这是个好问题。我忘了说:我试过了,但没有用。我还尝试了.Interactive = false 和其他一些。

标签: excel vbscript vba


【解决方案1】:

请在子程序之后包含错误恢复下一个

选项显式

Sub Hello()
On Error Resume Next
' Please include the error statement after sub routine.
    Dim x As Integer
    x = 1 / 0 ' Just causing an error for this example's purposes
End Sub

【讨论】:

  • 我无法更改子程序的代码。我实际尝试运行的子例程有很多、数千行意大利面条式代码,这些代码不是我编写的,并且随时可能被多个用户更改。我不能依赖所有被捕获的运行时错误。该问题的目的是防止 VB 脚本在出现此类错误时停止。
  • 我认为这是不可能的。您正在从 VB 脚本访问宏。您可以访问 VB 脚本,但不能访问宏。弹出事件或对话框等是宏的一部分。由于 VB Scripts 不能修改宏,因此流控制将保持不变。所以我认为不可能从 VB 脚本修改或更改宏中的流控制
  • Excel.Application 对象可以控制 Excel 环境的某些方面。正如上面的 Ansgar 在上面的评论中所说,Excel.DisplayAlerts = FalseExcel.Interactive = False 可以禁止某些对话框在 Excel 环境中发生。我希望有一些我可以设置的其他属性或我可以调用的一些函数来改变 Excel 如何专门处理 VBA 运行时错误。或者,如果这实际上是不可能的,请提供一个指向权威答案的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多