Excel求解程序VBA不会让一个单元受两个约束(最小和最大)

我正在尝试解决一个inputvariables必须受最小和最大约束限制的优化问题。 因为最后我不运行SolverReset,所以我可以告诉Solver忽略了第三个约束($ F $ 5 <= 1)。 我也可以告诉,因为有时它会给我一个答案,$ F $ 5> 1。

当我手动使用Solver时,我可以添加第三个约束。 我试图录制macros,看看我失踪,但我仍然难住。 我正在运行Excel 2007.任何想法? 谢谢,

Public Sub SEDMSolver() SolverReset SolverAdd CellRef:="$F$5", Relation:=3, FormulaText:="0.1" SolverAdd CellRef:="$F$4", Relation:=3, FormulaText:="0" SolverAdd CellRef:="$F$5", Relation:=1, FormulaText:="1" SolverOk SetCell:="$G$8", MaxMinVal:=2, ValueOf:="0", ByChange:="$F$4:$F$5" SolverSolve userFinish:=True End Sub 

求解器可能有点不爽 尝试设置您的MaxMinVal = 2行上面的第一个。 当我运行解算器macros时,我总是必须在约束之上设置它。 有时它会抛出错误。

我试图复制您的问题(使用Excel 2010),但它适用于我。 随着MxMinVal在开始和结束。 你可以尝试重新启动你的机器和Excel,看看问题是否依然存在。 但是你的代码对我来说是有效的,所有这三个约束都加载了

另一个一般的build议,我会为你的代码是添加:

 Application.Calculation = xlAutomatic 

这将使计算变为自动。 当运行更复杂的涉及求解器的macros时,我已经closures了它。

将一些单元格(例如H9)设置为1,并在代码中使用对该单元格的引用。 SolverAdd CellRef:=“$ F $ 5”,关系:= 1,FormulaText:=“$ H $ 9”

根据我使用求解器的经验并尝试用VBA实现自动化,最好的解决scheme是不要自动化Excel的求助器,而是编写自己的迭代来解决你的目标。 例如

  For j = 1 To 100 result = someCalculation If result > minConstraint Then result = j - 1 Exit For Else End If Next j