所以我在网上搜索和大部分的答案我说Excel中没有并发。但是有些文章说EXCEL 2007提供了多线程来加速计算。我真的很困惑,有没有可能?excel vba中的并发和多线程
在我的工作簿中,有一些单元格是使用用户定义的函数进行计算的。这些单元每秒通过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,对象本身没有任何修改或任何东西。
为了使用并行化,Excel必须考虑函数是线程安全的,VBA UDF不适合该类别。但是,如果你的UDF被定义在VBA以外的东西,那么他们可能是候选人。在这里看到一个完整的破解:http://msdn.microsoft.com/en-us/library/office/bb687899.aspx#xl2007xllsdk_threadsafe –
像C#或Java,在VBA中,你没有线程库或以这种方式限定功能。 VBA不支持多线程。如果你确实需要做多线程,就像Tim指出的那样,使用'interop'调用* COM-able *应用程序来实现你所需要的。但是,我会发现它有问题 - 而是在其他应用程序层中编写整个程序,以便能够使用多线程。 http://stackoverflow.com/questions/14143328/any-ideas-how-to-determine-what-age-group-an-individual-belongs-in-excel/14143756#14143756 – bonCodigo