停止并发访问 VBA 函数
Stop concurrent access to a VBA function
在 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 window 的右下角它说: Calculating: (4 Processors(s)): 9%
VBA 及其主机应用程序 运行 在 STA COM 线程上:并发性不能成为 VBA 代码中的一个问题。即使是 MTA 托管线程上的 .NET 代码 运行ning 也需要通过 COM 互操作将自身编组到 STA - 涉及 COM 的 MT 问题修复起来很有趣。
也就是说,访问文件系统的 UDF,在数千个单元中使用,无论如何都可能 Excel 屈服。
我建议尝试另一种方法 - 也许将结果缓存在 Dictionary
中,以避免在重复输入的情况下不必要地访问文件系统(如果这是您的数据中的内容),and/or制作一个按钮触发的宏过程,将给定的 table 列扫描到 运行 findDocumentInFolder
并将结果直接写入这些单元格,而不是使它们成为每次工作簿都不必要地重新计算的 UDF重新计算。
在 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 window 的右下角它说: Calculating: (4 Processors(s)): 9%
VBA 及其主机应用程序 运行 在 STA COM 线程上:并发性不能成为 VBA 代码中的一个问题。即使是 MTA 托管线程上的 .NET 代码 运行ning 也需要通过 COM 互操作将自身编组到 STA - 涉及 COM 的 MT 问题修复起来很有趣。
也就是说,访问文件系统的 UDF,在数千个单元中使用,无论如何都可能 Excel 屈服。
我建议尝试另一种方法 - 也许将结果缓存在 Dictionary
中,以避免在重复输入的情况下不必要地访问文件系统(如果这是您的数据中的内容),and/or制作一个按钮触发的宏过程,将给定的 table 列扫描到 运行 findDocumentInFolder
并将结果直接写入这些单元格,而不是使它们成为每次工作簿都不必要地重新计算的 UDF重新计算。