【发布时间】:2018-05-03 09:30:49
【问题描述】:
这个问题是这个问题的替代:
EXCEL VBA ignores Solver changes values
因为在原始问题中似乎存在另一个问题。
我有以下 Excel VBA 代码的 sn-p 来解决最小化问题:
SolverOk SetCell:="$AP$13", MaxMinVal:=2, ValueOf:=0, ByChange:="$AP$9:$AP$11", Engine:=1
SolverSolve UserFinish:=True
这在宏 (Do_Fit) 中运行,该宏由按下工作表上的按钮触发。我在图表表上有另一个按钮(显示适合),它也运行Do_fit。 SOLVER 在我按下工作表按钮时运行,但在我按下图表按钮时不运行。工作表有一个 Worksheet_change 方法,其中包含以下语句:
If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
处理对工作表特定部分所做的更改,该部分不受Do_fit 的影响。不确定这是否与问题有关,但认为值得一提。更新:当我禁用 Worksheet_Change 宏时,按下图表按钮时 SOLVER 仍然不运行
我尝试使用 SolverReset 重置问题,但这会产生错误提示 Excel 已用尽。
我不明白为什么当我按下工作表按钮而不是图表按钮时 SOLVER 会运行,并且希望就如何解决这个问题提出任何建议
谢谢!
【问题讨论】:
-
求解器在活动工作表上工作。如果活动工作表是图表工作表,则 SetCell 和 ByChange 没有范围。可能如果您在 Do_Fit 开始时激活工作表,那么 Solver 将从图表按钮开始工作。 FWIW,如果这是我的项目,我会将图表放在同一个工作表上,而不是使用独立的图表表。
-
乔恩 - 谢谢。我激活了工作表,然后运行 SOLVER,现在一切正常。此 SELECT 的先前版本已选择工作表,我从未遇到任何问题,但我没有想到这是问题所在。顺便说一句,我使用单独的图表表的原因是因为我可以选择要拟合的点范围,这使它更容易。
-
很惊讶你以前没有这个问题,因为 Solver 总是只在活动工作表上工作。但我也很高兴这很容易。