在Excel中,我定义了一个搜索文件的VBA函数。我想阻止对这个函数的并发访问,因为否则硬盘驱动器会受到不必要的损坏。
这是我定义的函数:
Public Function findDocument(docName As String)
findDocument = findDocumentInFolder(docName, "C:\Correspondence")
End Function然后,我使用下面的公式在excel中调用数千个单元格:
=findDocument(<cell reference>)在java中,我们可以通过使用synchronized关键字来控制并发访问。在VBA中有没有类似的东西?
附注:我假设它是并发运行的,因为在excel窗口的右下角,它写着:Calculating: (4 Processors(s)): 9%
发布于 2016-08-16 02:41:47
VBA及其宿主应用程序在STA线程上运行:在VBA代码中不能考虑并发性。即使是运行在MTA托管线程上的.NET代码也需要通过COM互操作将其自身编组到STA上-而且涉及COM的MT问题修复起来非常有趣。
也就是说,访问在数千个计算单元中使用的文件系统的UDF很可能会使Excel陷入瘫痪。
我建议尝试另一种方法-也许可以将结果缓存到Dictionary中,以避免在给定重复输入的情况下不必要地访问文件系统(如果这是您的数据中的事情),和/或创建一个按钮触发的宏过程来扫描给定的表列以运行findDocumentInFolder并将结果直接写入这些单元格,而不是使它们成为每次重新计算工作簿时不必要地重新计算的自定义函数。
https://stackoverflow.com/questions/38960670
复制相似问题