excel vba中的并发和多线程

时间:2013-02-03 22:06:10

标签: multithreading excel vba concurrency

所以我在网上搜索了大多数答案我说在Excel中没有并发性。但有些帖子称,EXCEL 2007提供多线程以实现更快的计算。我真的很困惑,是否有可能?

在我的工作簿中,有一些单元格是使用用户定义的函数计算的。这些单元通过RTD服务器每秒更新一次。那么这是否意味着这些函数似乎是并行重新计算的,但事实上,Excel只是按顺序计划它们?如果计算机有多个核心,它会有所不同吗?

事实上,如果这些函数按顺序运行,那么以下两个函数是否相同?在性能和速度方面。

1)

cell1 = userFunc(1, switch1)
cell2 = userFunc(2, switch2)
cell3 = userFunc(2, switch3)

和2)

cell = func()

where func() is

public function
        if(switch1)  call userfunc1
        if(switch2)  call userfunc2
        ....

end function

让我们假设对函数进行了所有必要的调整。我的意思是,第一个会更快吗?

非常感谢!!!

更新:那么如果VBA中没有真正的并发,这是否意味着顺序调用函数并且可以访问共享的全局变量而不会出现锁定问题?我有一个几乎每个函数都使用的API对象,所以我可以共享它而不是每次使用它时都初始化它吗?这个对象只是一个用于调用某些静态函数的API,对象本身没有任何修改或任何东西。

1 个答案:

答案 0 :(得分:0)

是的Excel 2007及更高版本支持使用多个内核进行多线程计算,但正如Tim所说 - 不可能使用VBA编写多线程UDF。

为了获得良好的UDF性能,您需要使用XLL接口并利用多线程。

您可以使用Excel DNA(免费)或Addin Express(费用)在.NET C#或VB.Net中创建多线程XLL UDF。
VSTO不支持UDF,而.Net自动化UDF非常慢 对于C ++ XLL UDF,我推荐使用Planatech XLL +。