试图帮助解决 this question ,我在 VBA 中的 Solver 中遇到了一些非常奇怪的行为。
我想知道其他人是否可以重现它或者我的系统(Windows 10、Excel 2016)是否有问题,以及是否有人可以指出发生了什么。
工作簿设置非常简单。
这是我正在测试的代码...
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非线性将计算设置为手动是完全有道理的,因为它将通过更改工作表中的单元格来评估目标函数并且不想评估它们直到正确的输入值就位。当从 Excel 界面调用时,求解器会自行清理。无论谁组装了 VBA 界面,都一定忘记了这个小细节。这显然是一个错误。也许您可以通过 Solver.com 提交错误报告(Frontline Systems 的网站,该公司为 Microsoft 制作了求解器)。解决方法当然很简单:只需输入一行即可
Application.Calculation = xlCalculationAutomatic
在子的底部。
关于excel - 在VBA中使用Solver将计算模式设置为手动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36683180/