【问题标题】:Using Solver in VBA sets calculation mode to manual在 VBA 中使用 Solver 将计算模式设置为手动
【发布时间】:2016-04-17 23:02:35
【问题描述】:

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

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

【问题讨论】:

  • 在没有 VBA 的情况下运行求解器会发生什么。会不会改变计算模式?
  • 否 - 所有通过 Excel 界面按预期工作。

标签: excel vba


【解决方案1】:

我刚刚在 Excel 2010 中运行了您的代码并得到了相同的结果。如果有的话,更糟糕的是,无论是否调用SolverReset,我都会遇到错误,此外,在运行代码后,文本“设置问题...”会在 Excel 底部的状态栏中徘徊

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

Application.Calculation = xlCalculationAutomatic

在子底部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2011-08-22
    • 2023-04-07
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2021-08-17
    相关资源
    最近更新 更多