使用VBA命令处理“求解器对话”框

时间:2017-09-01 21:38:58

标签: excel vba excel-vba solver

目前我在excel中创建一个运行求解器的程序。我在求解器命令上设置了最大时间限制。如果程序超出时间限制,将出现一个解算器对话框,询问是继续还是停止。我想知道是否有一种方法可以编码到VBA中以自动选择停止而不必让用户单击该选项。

提前致谢!

1 个答案:

答案 0 :(得分:1)

是的,你可以。您需要在Solver对象上设置一些选项。您可以阅读更多相关信息In the MSDN documentation

SolverSolve(UserFinish, ShowRef)
  

UserFinish可选Variant。如果为True,则返回结果而不显示“求解器结果”对话框。 False或省略以返回结果并显示“求解器结果”对话框。

     

ShowRef可选Variant。您可以将宏的名称(作为字符串)作为ShowRef参数传递。然后,只要Solver因列出的任何原因暂停,就会调用此宏,而不是显示“显示试用解决方案”对话框

您需要定义一个运行的宏,该宏必须采用整数参数。这是一个代码示例,直接来自链接页面(此处发布,以防链接在将来中断)

你调用SolverSolve,传递上面的参数:

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

然后,您需要定义运行的ShowTrail宏,并且它必须具有正确的签名:

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,如果你想让它停止,则返回1。

然后你可以让它在完成的不同原因上有不同的行为。例如,如果达到最大时限(您的情况),则停止。否则,继续:

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