使用VBA命令与“求解器对话框”配合使用

目前我正在创build一个运行求解器的excel程序。 我已经为求解器命令设置了最大时间限制。 如果程序超出了时间限制,会出现一个求解器对话框,询问是继续还是停止。 我想知道是否有办法编码到VBA自动select停止,而不是有一个用户点击选项。

提前致谢!

是的你可以。 你需要在Solver对象上设置一些选项。 您可以阅读更多关于它在MSDN文档

SolverSolve(UserFinish, ShowRef) 

UserFinish可选变体。 如果返回结果而不显示求解器结果对话框,则返回true。 假或省略以返回结果并显示求解器结果对话框。

ShowRef可选Variant。 您可以传递一个macros的名称(作为一个string)作为ShowRef参数。 然后,只要Solver由于任何列出的原因而暂停,就会调用该macros来代替显示“试用解决scheme”对话框

您需要定义一个运行的macros,它必须采用整数参数。 这里是一个代码示例,直接从链接页面(在这里发布,以防链接在将来被打破)

你可以调用SolverSolve,把上面的参数传给它:

 SolverSolve UserFinish:=True, ShowRef:= "ShowTrial" 

然后你需要定义运行的ShowTrailmacros,它必须有正确的签名:

 Function ShowTrial(Reason As Integer) 'Msgbox Reason <= commented out, as you just want it to end, with no user input ShowTrial = 0 'See comment below on the return value. End Function 

返回值很重要。 如果你想解算器只返回0,或者如果你想停止的话。

然后,您可以根据不同的原因使其具有不同的行为。 例如,如果达到最大时限(你的情况),然后停止。 否则,继续:

 Function ShowTrial(Reason As Integer) Select Case Reason Case 1 '//Show iterations option set ShowTrial = 0 '//Carry on Exit Function Case 2 '//Max time limit reached ShowTrial = 1 '//Stop Exit Function Case 3 '//Max Iterations limit reached ShowTrial = 0 '//Keep going Exit Function Case 4 '//Max subproblems limit reached ShowTrial = 0 '//Keep Going Exit Function Case 5 '//Max feasible solutions limit reached ShowTrial = 0 '//Keep going Exit Function End Select End Function