首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止对VBA函数的并发访问

停止对VBA函数的并发访问
EN

Stack Overflow用户
提问于 2016-08-16 02:20:04
回答 1查看 343关注 0票数 0

在Excel中,我定义了一个搜索文件的VBA函数。我想阻止对这个函数的并发访问,因为否则硬盘驱动器会受到不必要的损坏。

这是我定义的函数:

代码语言:javascript
复制
Public Function findDocument(docName As String)
    findDocument = findDocumentInFolder(docName, "C:\Correspondence")
End Function

然后,我使用下面的公式在excel中调用数千个单元格:

代码语言:javascript
复制
=findDocument(<cell reference>)

在java中,我们可以通过使用synchronized关键字来控制并发访问。在VBA中有没有类似的东西?

附注:我假设它是并发运行的,因为在excel窗口的右下角,它写着:Calculating: (4 Processors(s)): 9%

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-16 02:41:47

VBA及其宿主应用程序在STA线程上运行:在VBA代码中不能考虑并发性。即使是运行在MTA托管线程上的.NET代码也需要通过COM互操作将其自身编组到STA上-而且涉及COM的MT问题修复起来非常有趣。

也就是说,访问在数千个计算单元中使用的文件系统的UDF很可能会使Excel陷入瘫痪。

我建议尝试另一种方法-也许可以将结果缓存到Dictionary中,以避免在给定重复输入的情况下不必要地访问文件系统(如果这是您的数据中的事情),和/或创建一个按钮触发的宏过程来扫描给定的表列以运行findDocumentInFolder并将结果直接写入这些单元格,而不是使它们成为每次重新计算工作簿时不必要地重新计算的自定义函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38960670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档