2

我通过 VSTO 将 Excel 作为计算引擎(无用户交互)运行,并且希望能够以编程方式取消长时间运行的宏。

我目前的方法是将阻塞调用在单独的线程上运行宏 (Application.Run("MyMacro")),然后尝试从主线程中断它。

似乎没有任何用于此目的的内置方法调用,例如 Application.Interrupt(),因此我尝试以编程方式触发按下 CTRL+Break 或 ESC 时发生的键盘中断。

当前代码如下所示:

Application.CalculationInterruptKey = XlCalculationInterruptKey.xlAnyKey;
Application.EnableCancelKey = XlEnableCancelKey.xlInterrupt;

Application.SendKeys("{ESC}", false); //have tried with true as second argument 

在这种情况下,最后一行的代码块在宏完成之前不会执行。

我还尝试获取 Excel 的进程挂钩,将其设置为活动进程/窗口并调用 SendKeys 没有成功。

由于这需要成为执行任何宏的通用解决方案,因此我无法修改或提供有关宏内容的任何保证。

有任何想法吗?

谢谢,

PS 我也尝试过发送 CTRL+BREAK 键盘命令,如 Application.SendKeys("^{BREAK}", false); 调试器在此行暂停,直到宏完成执行,所以看起来 Application 对象被阻止处理任何更多命令,直到宏完成。

4

0 回答 0