0

我正在尝试制作一个宏,该宏在运行时至少会向用户返回一些部分控制权。如果用户编辑单元格,则不能危险地更改宏行为,因为依赖内容很少。

我正在使用这种方法来允许用户在宏重新获得控制权并继续执行下一条语句之前占用执行线程并提交他们的单元格更改:

Sub retCtrl(Optional ms As Long = 350)
Dim l As Long: l = Timer
Do While Timer - l < (0# + ms / 1000)
    DoEvents
Loop
End Sub

我把它放在了一些长语句和内部循环之后。

它很不稳定,但很实用,只有一个问题:如果用户需要很长时间来编辑单元格,宏就会静默停止。

谁能解释为什么会这样?是因为计时器超过了阈值吗?我认为当工作簿处于编辑模式时所有宏执行都会停止?

有关如何处理此问题的任何建议?

4

1 回答 1

0

在代码运行时,您不能也不应该将控制权返回给用户,而您的问题就是一个例子。

Excel 期望某些元素处于某些状态,当用户开始更改内容时,可能会发生意想不到的事情。例如,如果用户在 Excel 需要数据的同时尝试更改数据,会发生什么情况?没有内置多处理,“这不是那种编程......”

因此,当 Excel 注意到发生了某些事情时,它会停止运行宏。如果您需要同时运行不同的进程,请在单独的 Excel 实例中执行。


更多信息:

于 2018-02-26T13:08:49.590 回答