使用 VBA 最大化的 Excel 求解器不起作用

Posted

技术标签:

【中文标题】使用 VBA 最大化的 Excel 求解器不起作用【英文标题】:Excel Solver to maximise by using VBA doesn't work 【发布时间】:2013-11-28 11:57:49 【问题描述】:

我正在尝试使用求解器录制宏。我正在尝试最大化单元格 M24,更改单元格 D8、E8、D13 和 E13。 D8、E8、D13、E13都大于0,F8=D8+E8=1,F13=D13+E13=1。我的代码不起作用。基本上,它根本不会改变单元格 D8、E8、D13 和 E13 中的任何值吗?谁能指出我哪里做错了?

Sub SolverMacro1()
'
' SolverMacro1 Macro
'

        Worksheets("Optimise").Activate

        SolverAdd CellRef:="$D$8", Relation:=3, FormulaText:="0"
        SolverAdd CellRef:="$E$8", Relation:=3, FormulaText:="0"
        SolverAdd CellRef:="$F$8", Relation:=2, FormulaText:="1"
        SolverAdd CellRef:="$D$13", Relation:=3, FormulaText:="0"
        SolverAdd CellRef:="$E$13", Relation:=3, FormulaText:="0"
        SolverAdd CellRef:="$F$13", Relation:=2, FormulaText:="1"


        SolverOk SetCell:="$M$24", MaxMinVal:=1, ByChange:="$D$8:$E$8 & $D$13:$E$13"

        SolverSolve

End Sub

非常感谢!

【问题讨论】:

【参考方案1】:

尝试将传递给SolverOkByChange 参数的值更改为"$D$8:$E$8,$D$13:$E$13"。您可能还想在激活工作表之后但在调用其他 Solver 过程之前调用 SolverReset

【讨论】:

运行宏时会发生什么?是否出现“求解器结果”对话框?运行宏后,如果手动打开 Solver(使用菜单),“Solver 参数”对话框是否显示您所期望的? 嗨大脑,在我运行宏后,出现对话框询问是否要保存求解器值或保持原始值,但单元格中没有任何变化......这很奇怪。另一个奇怪的是,我有 E8=1-D8 和 E13=1-D13 的公式,运行宏后,所有公式都消失了,只剩下原始值。是的,运行宏后,当我手动打开求解器时,参数是我为上面的代码设置的。 直到出现“求解结果”对话框后,更改才会显示(至少对我而言),您选择“保留求解结果”并选择“确定”。你试过了吗? 为什么 E8 和 E13 单元格中有公式?尝试删除它们,因为您放置在单元格 F8 和 F13 上的约束就足够了。单元格的初始值是否有可能给出最佳解决方案?如果是这样,它们可能看起来不会改变。

以上是关于使用 VBA 最大化的 Excel 求解器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Vba窗体的keydown怎么不起作用

使用 Access 2010 数据库的 Excel 2010 VBA DAO 查询不起作用

VBA Dir 函数在 Excel 2010 上不起作用

AppleScriptTask 命令在 Excel 2016 for Mac VBA 中不起作用

插入代码时,打开事件中的 Excel 2010 vba EnableEvent 不起作用

VBA Excel ADO SQL 更新查询不起作用