我的Excel文件阻止打开其他Excel文件。
我有以下代码
Public Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:00:03"), "CommonWorkBook.prepareSheets"
End Sub
在PrepareSheets Macro中,我每60秒从一个txt文件中获取数据。
代码如下
Do While 1 = 1
' Do Something
pause 60
Loop
打开我的.xlsm文件后,我无法打开其他.xlsm文件。
如果我关闭.xlsm文件,其他文件将被打开。
答案 0 :(得分:0)
问题是当Pause
正在运行时,它仍然正在运行。如果在执行pause 60
时查看任务管理器,那么您将看到它正在耗尽其中一个核心的几乎所有CPU:
即使你可以修复它 - 你真的想要占用你系统的大部分资源吗?
VBA是旧技术 - 自20世纪90年代末以来只有微小的变化。它是单线程的。对于Excel应用程序的每个实例,只有一个解释器的单线程实例。正在运行的代码阻止了另一个启用宏的工作簿的打开。
在Excel中进行多线程确实没有简单的方法(但请参阅this问题)。您应该寻找涉及Application.OnTime
的解决方案。不要暂停 60秒 - 计划将来60秒。有关详细信息,请参阅this(由@Ralph建议)。