Excel代码阻止打开其他Excel表格

时间:2015-12-22 11:10:52

标签: excel vba excel-vba

我的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文件,其他文件将被打开。

1 个答案:

答案 0 :(得分:0)

问题是当Pause正在运行时,它仍然正在运行。如果在执行pause 60时查看任务管理器,那么您将看到它正在耗尽其中一个核心的几乎所有CPU:

enter image description here

即使你可以修复它 - 你真的想要占用你系统的大部分资源吗?

VBA是旧技术 - 自20世纪90年代末以来只有微小的变化。它是单线程的。对于Excel应用程序的每个实例,只有一个解释器的单线程实例。正在运行的代码阻止了另一个启用宏的工作簿的打开。

在Excel中进行多线程确实没有简单的方法(但请参阅this问题)。您应该寻找涉及Application.OnTime的解决方案。不要暂停 60秒 - 计划将来60秒。有关详细信息,请参阅this(由@Ralph建议)。