Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 异步调用dll_Vba_Dll_Excel 2003 - Fatal编程技术网

Vba 异步调用dll

Vba 异步调用dll,vba,dll,excel-2003,Vba,Dll,Excel 2003,我希望你能明白这一点。问题终于来了 我有一个Excel 2003工作簿,其中包含一个用于DOE实验设计的值表。此工作簿通过工作簿加载。打开另一工作簿并填充正确的字段,然后通过Apdio.RunButEn.xLa在第二工作簿中运行计算。计算 反过来,计算调用外部.dll编译的Fortan,并通过声明子计算库fortran.dll参数等待它完成。每次跑步需要4分钟。每个能源部可能有7到21次运行。最后,第一个工作簿中的键值会被拉回以显示结果 请帮助我想出一种方法来创建第二个工作簿的多个副本,并让它们

我希望你能明白这一点。问题终于来了

我有一个Excel 2003工作簿,其中包含一个用于DOE实验设计的值表。此工作簿通过工作簿加载。打开另一工作簿并填充正确的字段,然后通过Apdio.RunButEn.xLa在第二工作簿中运行计算。计算

反过来,计算调用外部.dll编译的Fortan,并通过声明子计算库fortran.dll参数等待它完成。每次跑步需要4分钟。每个能源部可能有7到21次运行。最后,第一个工作簿中的键值会被拉回以显示结果

请帮助我想出一种方法来创建第二个工作簿的多个副本,并让它们各自调用同一个dll,同时使用不同的参数和不同的excel进程来计算,以便更好地实现4核处理器的本地化

或者可以通过某种方式直接异步调用外部函数。我知道Excel2003VBA是单线程的,外部dll只能作为单线程使用,我不确定


顺便说一句,我非常坚持顺序式的计算。没关系,我可以接受。

这既快又脏,但你应该明白。其概念是创建全新的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

我添加了消息框,因为在单击消息框上的OK之后,xl变量超出范围,新进程将自动终止。如果您运行工作簿,请使用此变量的.Open方法,即xl.Workbooks.Open,它将使您到达所需的位置。

有趣。当我尝试使用xl.Run进行计算时,线程会等到它完成后才能继续,因此无法同时运行多个计算。我很抱歉,那没有成功。我很想知道这个问题是如何解决的。