在Excel中,我定义了一个搜索文件的VBA函数。我想阻止并发访问此功能,否则硬盘驱动器会被不必要地打乱。
这是我定义的功能:
Public Function findDocument(docName As String)
findDocument = findDocumentInFolder(docName, "C:\Correspondence")
End Function
然后我使用以下公式在Excel中调用数千个单元格:
=findDocument(<cell reference>)
在java中,我们可以使用synchronized关键字来控制并发访问。 VBA中是否有任何等价物?
P.S。我假设它同时运行,因为在excel窗口的右下角显示:Calculating: (4 Processors(s)): 9%
答案 0 :(得分:2)
VBA及其主机应用程序在STA COM线程上运行:并发不是VBA代码中的问题。即使在MTA托管线程上运行的.NET代码也需要通过COM互操作将自己编组到STA上 - 而涉及COM的MT问题几乎无法修复。
也就是说,访问文件系统的UDF,在数千个单元格中使用,无论如何都可能使Excel瘫痪。
我建议尝试另一种方法 - 也许将结果缓存在Dictionary
中,以避免在给定重复输入(如果这是数据中的内容)和/或制作按钮时不必要地访问文件系统触发宏过程,扫描给定的表列以运行findDocumentInFolder
并将结果直接写入这些单元格,而不是使它们成为每次重新计算工作簿时不必要地重新计算的UDF。