【问题标题】:Running a macro that opens a MessageBox运行打开 MessageBox 的宏
【发布时间】:2014-08-28 11:30:44
【问题描述】:

我正在通过 Powershell 在 Excel 文档中调用宏。

要调用宏,我必须运行一个命名宏并在运行中调用它。但是,当宏被调用并成功完成时,会出现一个 MessageBox。据我所知,这个消息框是确定进程是否成功完成的唯一方法。

我无法控制删除消息框的能力。 powershell 脚本必须等待宏完成。

来自文档:documentation 没有为这种情况提供选项,或者看起来如此。

我可以使用的替代选项:(但我不确定如何到达消息框将被关闭的地步)

  1. Excel 文档可以通过 Powershell 在其中插入代码
  2. 可以在文档内存空间内更改选项

是否可以异步运行宏并检查宏的执行情况?

【问题讨论】:

  • 所以您无权编辑宏?如果您可以添加一个参数以使其静默运行而不弹出消息框,这将更简单。
  • 你不知道你的powershell脚本圆满完成没问题吗?
  • 好吧.. 我不会,因为消息框会冻结正在运行的宏,而 powershell 正在等待框消失。
  • 好的。但是为什么不能从 VBA 宏中删除消息框(或用户窗体)?
  • 无法修改传入的文件。我无法控制。

标签: excel powershell scripting vba


【解决方案1】:

有一些复杂的方法可以做到这一点。

1) 调用 Excel 应用程序的另一个实例并使用它运行宏。那你怎么知道它是否完成了?你通过引用传递一个全局变量给它。并使用OnTime 功能每隔几秒钟检查一次是否完成。

这里给出了调用另一个excel实例的例子:Stop VBA-Script from "freezing" while sending MDX-Query

2) 您可以将脚本存储为 .VBS 文件。然后调用 shell 运行 VB 脚本并再次检查一些通过引用传递的变量。

3) 使用隐藏的工作表作为缓冲区,一旦异步代码完成运行,就会在特定位置写入该缓冲区。同样,您需要一些聪明的OnTime 编程来自动运行轮询服务……更重要的是,停止运行它!

【讨论】:

  • OP 指的是Powershell,而不是VBA (1) 或vbs (2)
  • 感谢@brettdj,是的,但是如果问题是特定于需求而不是特定于 Powershell,则可以使用此解决方案。此外,与 VBA 的宏进行异步通信的方式可用于特定用例。还有@monkssy,如果它与您的问题无关,我很乐意将其删除。 Tks
猜你喜欢
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
相关资源
最近更新 更多