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