2011-01-11 92 views
0

我希望你可以關注這個。問題在最後。異步調用dll

我有一個Excel 2003工作簿,其中包含一個將在DOE(實驗設計)中使用的值表。此工作表(通過Workbook.Open)加載另一個工作簿並填充正確的字段,然後在第二個工作簿中(通過Application.Run("backend.xla!calc"))運行計算。

反過來,計算調用外部.dll(編譯富通),並等待它完成(通過Declare Sub Calculate Lib "fortran.dll" (args))。每次運行需要4分鐘。每個DOE可能有7到21次運行。最後,在第一個工作簿中將鍵值拉回來顯示結果。

請幫助我想辦法創建第二個工作簿的多個副本,並讓他們每個計算(調用相同的DLL,具有不同的參數)在同一時間(不同的Excel過程),以優化一個四核處理器更好。

或者可能是某種方式異步直接調用外部函數。我知道Excel 2003 VBA是單線程的,並且外部的dll只能用作單例(我不確定)。

PS。隨意在一個說,我幾乎堅持序列風格計算的鐘聲。它好,我可以接受。

回答

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)它應該讓你在你想要的地方。

+0

有趣。當我嘗試用xl.Run進行計算時,線程會等待,直到它完成,然後才能繼續,因此無法同時運行多個計算。 – ja72 2011-01-13 16:17:28