Vba 通过外部程序使用Excel解算器进行计算

Vba 通过外部程序使用Excel解算器进行计算,vba,excel,solver,Vba,Excel,Solver,目前,我有一个电子表格,它使用一个外部程序进行计算(假设它是一个空气动力学计算工具)。在Excel VBA中,我通过电子表格级别的UDF更新程序的输入(=input(“var1”,1.234)) 然后,使用VBA编写输入文件,运行external.exe,然后读取输出文件。输出通过UDF再次报告到电子表格级别(=输出(“var2”)) 我想使用Excel解算器函数对电子表格进行优化。这里,我希望它更改输入值(通过=input()函数)以获得输出中的最佳值(通过=output()函数)。解算器应该

目前,我有一个电子表格,它使用一个外部程序进行计算(假设它是一个空气动力学计算工具)。在Excel VBA中,我通过电子表格级别的UDF更新程序的输入(=input(“var1”,1.234)

然后,使用VBA编写输入文件,运行external.exe,然后读取输出文件。输出通过UDF再次报告到电子表格级别(=输出(“var2”)

我想使用Excel解算器函数对电子表格进行优化。这里,我希望它更改输入值(通过=input()函数)以获得输出中的最佳值(通过=output()函数)。解算器应该能够更改输入,等待进行新计算(通过external.exe),然后在获得输出时恢复

到目前为止,我还没有找到可靠的方法让它工作。Excel解算器不知道它需要等待.exe完成,即使我在输入UDF中嵌入了shell(.exe)命令……解算器仍然像什么都没有发生一样艰难地通过

预料之中,它会出现bunk,因为输出与输入不同步。我撬开SOLVER.XLAM(…ahemm…)以找到插入等待语句的方法,但这没有多大帮助;该接口在VBA与SOLVER.dll接口处结束,该接口将钩子放入Excel中,以便直接从.dll运行Excel计算…因此对我没有帮助

到目前为止,我被难住了。以前似乎没有人遇到过这种情况。我试着研究OpenSolver.org的版本,但它们也以一些神秘的.dll或.exe接口结束。有什么想法吗


(顺便说一句:如果你想知道的话,我没有访问外部程序代码的权限……我只能得到一个.exe和一些文本文件)。

如果你使用NOMAD solver,OpenSolver应该可以工作,它直接在电子表格中进行所有计算。有关更多信息,请参阅。

如果使用NOMAD solver,OpenSolver应该可以工作,它直接在电子表格中进行所有计算。有关更多信息,请参见。

With.vbs script:Pause(10)”睡眠10秒子暂停(N秒)Wscript.sleep(N秒*1000)End子项这可能会有所帮助--它描述了让vba代码等待shell进程完成想法的存储,但问题不在于让VBA等待.exe…这已经完成,而且功能正常。目前,它使用的方法是执行shell命令,然后等待释放进程句柄。问题是SOLVER.dll直接操作UDF输入(函数=input()和=output())。这会导致问题,因为如果没有外部.exe执行,UDFs无法提供正确的响应;我相信它会破坏正常的VBA流控制,而正常的VBA流控制允许其他进程使用.vbs脚本继续(如Shell()命令):Pause(10)'休眠10秒Sub Pause(n秒)Wscript.sleep(n秒*1000)End子项这可能会有所帮助---它描述了让VBA代码等待Shell进程完成对想法的存储,但问题不在于让VBA等待.exe…这已经完成,而且功能正常。目前,它使用的方法是执行shell命令,然后等待释放进程句柄。问题是SOLVER.dll直接操作UDF输入(函数=input()和=output())。这会导致问题,因为如果没有外部.exe执行,UDFs无法提供正确的响应;我相信它会破坏正常的VBA流控制,而VBA流控制允许其他进程继续进行(例如Shell()命令)。有没有一种简单的方法可以获得它所需要的“OpenSolverNomad.dll”?我刚刚花了一个小时试图从GitSource hub编译它……但我很沮丧,放弃了(我不是VisualStudioWiz)。显然,由于ExcelXLLSDK的一些复杂的许可问题,他们没有直接把它放进去……你必须自己构建它:-有没有一种简单的方法来获取它所需要的“OpenSolverNomad.dll”?我刚刚花了一个小时试图从GitSource hub编译它……但我很沮丧,放弃了(我不是VisualStudioWiz)。显然,由于ExcelXLLSDK的一些复杂的许可问题,他们没有直接将其放入…您必须自己构建它:-|