【发布时间】:2016-08-15 18:20:03
【问题描述】:
在 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%
【问题讨论】:
-
你能在 VBA 中拥有多个线程吗?!
-
不用担心 VBA 中根本没有并发。
-
就像@cyboashu 说vba 中没有并发。 source
-
请参阅此处以“缓存”UDF 结果以避免重新计算结果的过多工作:stackoverflow.com/questions/38079543/…
-
我认为,理论上,您可以在多个线程中运行 VBA - 前提是您在完全独立的 Excel 实例中并行运行相同的工作表宏(即不复制/重命名工作簿并在相同的 Excel 实例,但运行 Excel - 打开工作簿,打开 new 单独的 Excel(它将具有不同的进程 ID)并打开相同的工作簿并运行它)。
标签: vba concurrency synchronization mutex