在试图帮助解决这个问题,我在 VBA 中的 Solver 中遇到了一些非常奇怪的行为。
我想知道如果其他人可以复制它或者如果我的系统有问题(Windows 10、Excel 2016),以及如果有人能告诉我发生了什么事.
工作簿设置非常简单。
![enter image description here](https://i.stack.imgur.com/uA4Y2.png)
这是我正在测试的代码...
Sub mySolve()
Dim SetRng As Range, ChangeRng As Range
Dim i As Long
For i = 2 To 4
Set SetRng = Sheets("Sheet1").Cells(i, 5)
Set ChangeRng = Sheets("Sheet1").Cells(i, 4)
SolverReset
SolverOk SetCell:=SetRng.Address, MaxMinVal:=3, _
ValueOf:=1, ByChange:=ChangeRng.Address, _
Engine:=1, EngineDesc:="GRG NONLINEAR"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Next i
End Sub
我使用 F8 单步执行此代码,并在执行每行后手动检查选项中的计算模式。
- SolverSolve之后,计算模式是手动的,除非我这样做,否则不会恢复。
- 如果我删除对 SolverReset 的调用,则在调用 SolverSolve 后,计算模式不会更改为手动。
我刚刚在 Excel 2010 中运行了您的代码并得到了相同的结果。如果有的话,更糟糕的是我是否遇到了这个错误SolverReset
被调用,此外,运行代码后,文本“设置问题...”在 Excel 底部的状态栏中徘徊
求解器需要将计算设置为手动,这是完全有道理的GRG Nonlinear
因为它将通过更改工作表中的单元格来评估目标函数,并且在正确的输入值到位之前不想评估它们。当从 Excel 界面调用时,求解器会自行清理。无论谁组装了 VBA 界面,都一定忘记了这个小细节。这显然是一个错误。也许您可以在以下位置提交错误报告:Solver.com(Frontline Systems 的网站,该公司为 Microsoft 制作了求解器)。解决方法当然很简单:只需将行
Application.Calculation = xlCalculationAutomatic
在子系统的底部。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)