使用 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】:尝试将传递给SolverOk
的ByChange
参数的值更改为"$D$8:$E$8,$D$13:$E$13"
。您可能还想在激活工作表之后但在调用其他 Solver 过程之前调用 SolverReset
。
【讨论】:
运行宏时会发生什么?是否出现“求解器结果”对话框?运行宏后,如果手动打开 Solver(使用菜单),“Solver 参数”对话框是否显示您所期望的? 嗨大脑,在我运行宏后,出现对话框询问是否要保存求解器值或保持原始值,但单元格中没有任何变化......这很奇怪。另一个奇怪的是,我有 E8=1-D8 和 E13=1-D13 的公式,运行宏后,所有公式都消失了,只剩下原始值。是的,运行宏后,当我手动打开求解器时,参数是我为上面的代码设置的。 直到出现“求解结果”对话框后,更改才会显示(至少对我而言),您选择“保留求解结果”并选择“确定”。你试过了吗? 为什么 E8 和 E13 单元格中有公式?尝试删除它们,因为您放置在单元格 F8 和 F13 上的约束就足够了。单元格的初始值是否有可能给出最佳解决方案?如果是这样,它们可能看起来不会改变。以上是关于使用 VBA 最大化的 Excel 求解器不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 Access 2010 数据库的 Excel 2010 VBA DAO 查询不起作用
AppleScriptTask 命令在 Excel 2016 for Mac VBA 中不起作用