异步调用dll

时间:2011-01-11 20:21:26

标签: vba dll excel-2003

我希望你能遵循这个。问题是最终的。

我有一个Excel 2003工作簿,其中包含要在DOE(实验设计)中使用的值表。此工作表加载(通过Workbook.Open)另一个工作簿并填充正确的字段,然后在第二个工作簿中运行计算(通过Application.Run("backend.xla!calc"))。

反过来,计算会调用外部.dll(已编译的 Fortan )并等待它完成(通过Declare Sub Calculate Lib "fortran.dll" (args))。每次运行需要4分钟。每个DOE可能有7到21次运行。最后,在第一个工作簿中将键值拉回以显示结果。

请帮我想一个创建第二个工作簿的多个副本的方法,并让它们同时计算(使用不同的参数调用相同的dll)(不同的excel过程)以更好地优化4核处理器

也许某种方式可以异步直接调用外部函数。我知道Excel 2003 VBA是单线程的,外部dll只能用作单例(我不确定)。

PS。随意发言,我几乎坚持顺序风格计算。没关系,我可以接受它。

1 个答案:

答案 0 :(得分:0)

这很快又很脏,但你应该明白这个想法。这个概念是创建全新的Excel流程并从每个新流程中打开工作簿:

Sub MakeNewProcess()
Dim xl As Application

    Set xl = New Application
    xl.Visible = True
    MsgBox "Check task manager and you'll see (at least) two EXCEL.EXE processes"
End Sub

我添加了消息框,因为在消息框上单击“确定”后,xl变量超出范围,新进程将自动终止。如果您从此变量(即Workbooks.Open)运行xl.Workbooks.Open方法,它应该可以让您到达目的地。