在尝试帮助解决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逐步执行此代码,并在执行每一行后手动检查Options中的计算模式。
答案 0 :(得分:5)
我刚刚在Excel 2010中运行了您的代码并获得了相同的结果。如果有的话,更糟糕的是,无论是否调用sorted(hosts, key=getSpeed)
我都会得到错误,而且,在运行代码之后,文本“设置问题...”会在Excel底部的状态栏中徘徊
完全合理的是,求解器需要将计算设置为手动SolverReset
,因为它将通过更改工作表中的单元格来评估目标函数,并且在正确输入之前不想评估它们价值到位。从Excel界面调用时,Solver会自行清理。放在一起VBA界面的人一定忘记了这个小细节。这显然是一个错误。也许你可以在Solver.com(前线系统的网站,为微软的解决方案)提交错误报告。解决方法当然很简单:只需放线
GRG Nonlinear
在潜艇的底部。