在VBA中使用Solver将计算模式设置为手动

Old*_*gly 4 excel vba excel-vba

在尝试帮助解决这个问题时,我在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
Run Code Online (Sandbox Code Playgroud)

我使用F8逐步执行此代码,并在执行每一行后手动检查Options中的计算模式.

  1. 在SolverSolve之后,计算模式是手动的,除非我这样做,否则不会被设置.
  2. 如果我删除对SolverReset的调用,则在调用SolverSolve后,计算模式不会更改为手动.

Joh*_*man 5

我刚刚在Excel 2010中运行了您的代码并获得了相同的结果.如果有的话,更糟糕的是我得到了bug是否SolverReset被调用,而且,在运行代码之后,文本"设置问题..."在Excel底部的状态栏中徘徊

理所当然,Solver需要将计算设置为手动,GRG Nonlinear因为它将通过更改工作表中的单元格来评估目标函数,并且在正确的输入值到位之前不希望对它们进行求值.从Excel界面调用时,Solver会自行清理.放在一起VBA界面的人一定忘记了这个小细节.这显然是一个错误.也许你可以在Solver.com(前线系统的网站,为微软的求解器)提交错误报告.解决方法当然很简单:只需放线

Application.Calculation = xlCalculationAutomatic
Run Code Online (Sandbox Code Playgroud)

在sub的底部.