Excel Solver由于第二个工作簿而变慢

时间:2017-09-20 21:45:09

标签: excel vba excel-vba solver

我今天发现了一些新的东西,这将导致我将来有关Excel的解决方案的问题,所以我想跳过它。

我正在使用VBA顺序应用向下移动的工作表(让我们说这张工作表属于'工作簿1')。这一切都很好,我对Solver的结果很满意。是的...我的担忧是这样的:当我打开第二个相当大的工作簿时(让我们称之为工作簿2'),它绝对没有链接到我当前的工作簿,Solver需要解决运行时间长20倍。

当然,最合理的做法是没有'工作簿2'当Solver运行时打开。但是,就我现在的解决方案而言,在不久的将来,我需要同时打开两个工作簿。所以我提出以下问题:

为什么解算者需要花更长时间才能打开两本书,即使它甚至没有触及其中一本?

如果怀疑论者担心我的代码在这里做了一些不寻常的事情,那就是:

Sub ExampleSeqSolver()
Dim Iter As Long
Dim Time0 As Double
Dim Duration As Double

Application.ScreenUpdating = False
' Solver requires that it is working on the 'active sheet', silly but w/e
Sheets("Sheet1").Activate
' watch optimization efficiency
Time0 = Timer

For Iter = 2 To 13

    ' my data are sometimes related to adjacent rows so I was considering supplying an initial solution to reduce the number of runs
    ' Sheets("Sheet1").Range("$AC$" & ITER & ":$AI$" & ITER) = _
    ' Sheets("Sheet1").Range("$AC$" & ITER - 1 & ":$AI$" & ITER - 1)

    If Cells(Iter, 1) <> 0 Then
        SolverReset
        SolverOptions AssumeNonNeg:=True, Iterations:=100
        SolverAdd CellRef:="$AK" & Iter, Relation:=2, FormulaText:="1"
        SolverOK SetCell:="$AW$" & Iter, MaxMinVal:="2", ByChange:=Sheets("Sheet1").Range("$AC$" & Iter & ":$AI$" & Iter), Engine:=1
        SolverSolve True
    End If

Next Iter

' report optimization duration
Duration = Round(Timer - Time0, 2)
MsgBox "Optimization finished in " & Duration & " seconds", vbInformation
Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:0)

“工作簿 2”的存在是相关的,但不是因果关系。就我而言,有一个特定的工作簿会导致求解器变慢;大多数其他人没有。导致速度变慢的工作簿大约为 4mb。更大的工作簿不会导致速度变慢。据我所知,导致速度变慢的那个不包含宏或 VB。我建议将这个问题展示给开发原始求解器的 Frontline 系统。