将收敛值设置为内置解算器的变量

时间:2014-06-18 18:43:03

标签: vba excel-vba excel-2010 solver excel-2013

在创建使用求解器的程序时,我需要用户能够手动输入收敛值和内置求解器使用的精度。我希望能够将收敛值设置为可以通过用户输入设置的单元格或变量。

以下是我正在使用的解算器代码示例:

SolverReset
SolverOk SetCell:="$D$14", MaxMinVal:=2, ValueOf:=0, ByChange:="$F$2:$F$5", _
    Engine:=1, EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:="$F$2", Relation:=1, FormulaText:="100"
SolverAdd CellRef:="$F$2", Relation:=3, FormulaText:="0.0000000001"
SolverAdd CellRef:="$F$3", Relation:=1, FormulaText:="100"
SolverAdd CellRef:="$F$3", Relation:=3, FormulaText:="-100"
SolverAdd CellRef:="$F$4", Relation:=1, FormulaText:="100"
SolverAdd CellRef:="$F$4", Relation:=3, FormulaText:="-100"
SolverAdd CellRef:="$F$5", Relation:=1, FormulaText:="10"
SolverAdd CellRef:="$F$5", Relation:=3, FormulaText:="0.0000000001"
SolverOptions MaxTime:=0, Iterations:=0, Precision:=1E-18, Convergence:= _
    1E-16, StepThru:=False, Scaling:=True, AssumeNonNeg:=True, Derivatives:= _
    1
SolverSolve True

此代码只是改变单元格F2,F3,F4和F5中的值(在我提供的范围内),以尽量减少D14中的值。

理想情况下,我希望能够将Convergence CellRef:="$B$16"这样的内容放入其中,但这似乎不起作用。有人知道怎么做这个吗?看起来它应该很简单,但我想出一个空白。

1 个答案:

答案 0 :(得分:1)

Convergence以及所有其他SolverOptions都可以使用单元格值设置,例如Convergence:= Range("A1").value

Value2 is a little faster than Value,优良做法是显式转换为单元格值的两倍(并且还会捕获任何错误)。

另一种方法是将值添加为命名范围或名称。 This question详细阐述了这些方法。名称的优点是不需要直接在电子表格中显示,这很优雅。例如,用户可以设置它们并从用户表单中进行编辑。

我希望这有帮助!