如何制作包含暂停而不会拖延Excel的Excel功能

时间:2015-04-20 06:20:30

标签: excel vba dll excel-dna xll

我有一个包含.dll的Excel“项目”,其中我编写了一些通过VBA调用的复杂统计计算。我出于速度原因这样做了。计算大约需要一秒钟。由于它们是通过VBA调用的,因此在计算期间会停止Excel,这是可以接受的。 (Excel的选择不是我的,而是第三方选择提供数据的方式)

但是为了项目的目的,我需要在不是一秒钟之后但是在十点之后将计算结果调高。我可以扩展计算以获得更高的准确性,或者只是在代码中包含暂停。但由于它是通过VBA完成的,因此它将整个项目停止了整整十秒钟,这是不可接受的。

我已经研究过ExcelDNA,因为它完全避免了VBA,并且可以通过VBA与ExcelDNA或现有的内置函数完成所有这些操作。我修改了这个例子进行测试:

https://grumpyop.wordpress.com/2009/11/25/a-third-way-dna/

并包含一个简单的Thread.Sleep(10000);到代码来模拟暂停。但ALSO在计算期间停止了Excel。

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

1 个答案:

答案 0 :(得分:1)

您需要使您的函数异步。

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

ExceDNA还支持异步功能 https://exceldna.codeplex.com/wikipage?title=Asynchronous%20Functions

但是你不能使用VBA UDF异步调用外部资源:UDF必须是XLL。