Excel 求解器忽略 VBA 中的约束

标签 excel vba optimization constraints solver

我正在尝试使用求解器找到简单投资组合的最大返回。在工作表中直接使用 Solver 可以正常工作,但在 VBA 中设置命令时则不然。相反(正如您从屏幕截图中看到的)它忽略了其中一个约束(T10 中计算的权重总和应 = 1)。有趣的是,如果我将第三行改为:

SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="100"

或“1”以外的任何其他整数。 (它也可能忽略其他约束,但我无法检查这一点)。 该表如下所示: enter image description here

我的代码是:

Sub FindRange()

                SolverReset
                SolverOk SetCell:="$T$7", MaxMinVal:=1, ValueOf:="0", ByChange:="$O$10:$R$10"
                SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="1"
                SolverAdd CellRef:="$O$10:$R$10", Relation:=3, FormulaText:="0"
                SolverSolve UserFinish:=True
                SolverFinish KeepFinal:=1
                Range("T9").Value = Range("T7").Value
           End Sub

非常欢迎任何建议!

最佳答案

找到了解决该错误的方法。对于标志“FormulaText:=1”。不要使用 1,而是使用对任何值为 1 的单元格的引用。

即将“FormulaText:=1”更改为“FormulaText:=$H$5”,其中 $H$5 的值为 1

关于Excel 求解器忽略 VBA 中的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15620177/

相关文章:

Excel VBA - 1004 运行时错误、应用程序或对象定义错误

如果文件以编程方式打开,则 Excel 工作簿 ADO 查询本身在第一次运行时失败

ms-access - 如何搜索 VBA 代码文件

c - 有条件地向后或向前迭代的最快方法

c++ - 编译器优化 - 函数没有地址

python - 将Excel定位转换为数字

excel - #值(value)!具有命名范围 vlookup 的 vba 函数出错

r - openxlsx : read. 如果工作表名称包含 "&"字符,xlsx 会引发错误

vba - 当某些条件为真时退出 'For Each' 循环

php - 在 PHP 中缓存?