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

标签 excel vba

试图帮助解决 this question ,我在 VBA 中的 Solver 中遇到了一些非常奇怪的行为。

我想知道其他人是否可以重现它或者我的系统(Windows 10、Excel 2016)是否有问题,以及是否有人可以指出发生了什么

工作簿设置非常简单。

enter image description here

这是我正在测试的代码...

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 底部

求解器需要使用GRG非线性将计算设置为手动是完全有道理的,因为它将通过更改工作表中的单元格来评估目标函数并且不想评估它们直到正确的输入值就位。当从 Excel 界面调用时,求解器会自行清理。无论谁组装了 VBA 界面,都一定忘记了这个小细节。这显然是一个错误。也许您可以通过 Solver.com 提交错误报告(Frontline Systems 的网站,该公司为 Microsoft 制作了求解器)。解决方法当然很简单:只需输入一行即可

Application.Calculation = xlCalculationAutomatic

在子的底部。

关于excel - 在VBA中使用Solver将计算模式设置为手动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36683180/

相关文章:

excel - 修剪功能无法正常工作,我做错了什么?

excel - 拆分功能 - 按字符串划分单元格

Excel 索引匹配数组 - 显示列表中的所有值

html - 使用 XMLHTTP 使用 vba 进行网页抓取

vba - 列出 Excel 工作表和图表选项卡

xml - xml功能区代码中的 "getPressed"和 "onAction"按钮属性有什么区别?

vba - 如何在 Excel VBA 中使用输入框过滤数据透视表

vba - Excel VBA : Compile Error: Method or data member not found

vba - 使用宏/vba 将多行从一个工作表复制到另一工作表

C#导出到excel