【发布时间】:2020-06-03 07:47:43
【问题描述】:
假设我正在创建一个宏,该宏需要调用另一个我无权更改其代码的 Excel 应用程序的宏。
现在,在调用其他 excel 应用程序的宏中,每当其他 excel 应用程序显示 MSGBOX 时,除非我单击该 MSGBOX,否则我的宏中的进程将停止。
现在我希望能够在显示的 MSGBOX 中获取消息,并且能够单击其“确定”按钮。
这可以通过 vba 实现吗(这意味着没有用户交互)?
顺便说一句,我正在使用 Application.Run 来运行另一个 Excel 应用程序的宏,这将创建另一个实例。(因为它在任务管理器中生成了 2 个 MS Excel 进程)
【问题讨论】:
-
当你说“外部宏”是什么意思?是否有“外部应用程序”在您的计算机上运行,但不在 Excel 中?我想强调的是,这是可能的,但在同一会话 VBA 显示 MsgBox 的情况下是不可能的。当出现这样的消息时,VBA 将暂停。您需要另一个应用程序等待,拦截并按下按钮...\
-
假设你的意思是你从你的宏中调用另一个工作簿中的另一个宏,并且另一个宏显示一个消息框,那么不,你不能做任何事情,因为它不是您当前正在执行的代码。您只能从另一个 Excel 实例执行某些操作,但即便如此,您也无法将消息框的内容传递给仍在运行的原始宏,甚至无法使其重新获得控制权并读取它,因为您的第一个 Excel 中的代码将被完全阻止,直到其他宏完成为止。
-
Q 对我来说似乎很清楚@jaypax123,但是为了那些似乎不确定的人的利益,您可以将用于调用另一个宏的代码添加到您的 Q
-
它可能(无法测试 ATM)。推测,这可能允许您在第一个实例中继续执行代码,而另一个宏运行。然后使用 Windows API 挂钩 MsgBox
-
@chrisneilsen 不管是不是同一个Excel实例,怎么不等它完成就调用另一个宏继续执行呢?