在VBA中使用求解器将计算模式设置为手动

在试图帮助解决这个问题时 ,我遇到了Solver在VBA中的一些非常奇怪的行为。

我想知道是否有其他人可以重现它,或者如果我的系统有问题(Windows 10,Excel 2016),并且任何人都可以指向我正在发生的事情

工作簿设置非常简单。

在这里输入图像说明

这是我正在testing的代码…

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单步执行此代码,并在每行执行后手动检查选项中的计算模式。

  1. SolverSolve之后,计算模式是手动的,除非我这样做,否则不会退后。
  2. 如果我调用SolverReset,调用SolverSolve之后,计算模式不会变为手动。

我只是在Excel 2010中运行你的代码,得到了相同的结果。 如果有的话,更糟糕的是无论是否调用SolverReset ,都会得到错误,而且在运行代码之后,文本“正在设置问题…”在Excel底部的状态栏中

解决scheme需要使用GRG Nonlinear将计算设置为手动,这是非常有意义的,因为它将通过更改工作表中的单元格来评估目标函数,并且不希望在正确的input值到位之前对它们进行评估。 从Excel界面调用时,Solver自行清理。 无论谁把VBA接口放在一起,都必须忘记这个细节。 它显然是一个错误。 也许你可以在Solver.com网站(Frontline Systems的网站,他是微软的解决者)提交bug报告。当然,这个解决方法很简单:

 Application.Calculation = xlCalculationAutomatic 

在底部的底部。