J'espère que vous pourrez suivre cela. La question est à la fin.Appeler une DLL de manière asynchrone
J'ai un classeur Excel 2003 qui contient une table de valeurs à utiliser dans DOE (Design of Experiments). Cette feuille charge (via Workbook.Open
) un autre classeur et remplit les champs corrects, puis exécute le calcul dans le deuxième classeur (via Application.Run("backend.xla!calc")
).
À son tour, le calcul appelle un .dll
externe (compilé Fortan) et attend qu'elle se termine (via Declare Sub Calculate Lib "fortran.dll" (args)
). Chaque course prend 4 minutes. Il pourrait y avoir 7 à 21 points par DOE. À la fin, les valeurs clés sont retirées dans le premier classeur pour afficher les résultats. S'il vous plaît aidez-moi à penser à un moyen de créer plusieurs copies du deuxième classeur et de les faire calculer (appeler la même DLL, avec différents paramètres) en même temps (processus Excel différent) pour utlitiser un processeur 4-core meilleur.
Ou peut-être un moyen d'appeler directement une fonction externe de manière asynchrone. Je comprends que Excel 2003 VBA est single threaded, et une DLL externe ne peut être utilisée que comme singleton (je ne suis pas sûr).
PS. Sentez-vous libre de dire que je suis plutôt bloqué par les calculs de style séquentiel. C'est bon, je peux le prendre.
Intéressant. Lorsque j'essaie de calculer avec xl.Run, le thread attend jusqu'à ce qu'il se termine avant de pouvoir continuer, et ne peut donc pas exécuter plusieurs calculs en même temps. – ja72
Hmm. Je suis désolé que cela n'a pas fonctionné. Je serais intéressé de voir comment cette question se résout. – mwolfe02