如何使Excel函数包含暂停而不拖延Excel

我有一个Excel“项目”,其中包括一个.dll,我已经写了一些复杂的统计计算,通过VBA调用。 我已经这样做了速度的原因。 这个计算大概需要一秒钟。 由于它们是通过VBA调用的,因此在计算过程中会停止Excel,这是可以接受的。 (Excel的select不是我的,而是第三方select传递数据的方式的结果)

但是为了这个项目的目的,我不得不在一秒钟之后,十点钟之后计算结果。 我可以扩大计算的准确度,或者只是在代码中join暂停。 但是由于它是通过VBA完成的,所以整个项目拖延了十秒钟,这是不可接受的。

我已经研究过ExcelDNA,因为它完全避免了VBA,并且可能使得通过VBA和ExcelDNA或现有的函数构build完成所有的工作成为可能。 我修改了这个例子来testing:

A Third Way: DNA?

并包含一个简单的Thread.Sleep(10000); 到代码来模拟暂停。 但是,在计算过程中,Excel也会暂停。

有没有办法在函数中包含一个暂停,不会使Excel等待结果,而是将结果“推送”到单元格/单元格“订阅”结果? 可以通过ExcelDNA,XLL或通过第三种解决scheme来完成吗? 我更喜欢一个可以使用C或非常轻微修改的C的区域,因为所有的统计函数都是用C语言编写的。

您需要使您的functionasynchronous。

Excel从Excel 2010支持此function。https://msdn.microsoft.com/en-us/library/office/ff796219%28v=office.14%29.aspx

ExceDNA还支持asynchronous函数https://exceldna.codeplex.com/wikipage?title=Asynchronous%20Functions

但是,您不能使用VBA UDFasynchronous调用外部资源:UDF必须是XLL。