由于第二个工作簿,Excel Solver速度慢



我今天注意到一些新的东西会给我带来有关Excel求解器的问题,所以我想跳上它。

我正在使用VBA依次应用求解器向下移动一张纸(例如,该表属于"工作簿1")。这一切都很好,我对求解器的结果感到满意。是的...我担心的是:当我有第二个相当大的工作簿打开(让我们称此"工作簿2"),这绝对没有与我当前的工作簿的链接时,Solver的运行时间约为20倍。p>自然而然的事情是,最合理的事情是在求解器运行时没有"工作簿2"。现在,这是我的解决方案,但是,在不久的将来,我需要同时开放两个工作簿。所以我提出以下问题:

,为什么求解器要花费更长的时间才能打开两本书,即使它甚至没有碰到其中一本书?

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

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

存在'Workbook 2'的存在是相关的,但不是因果关系。就我而言,有一个特定的工作簿会导致求解器放缓。大多数其他人都没有。导致放缓的工作簿约为4MB。更大的工作簿不会导致放缓。造成放缓的那个并不是我所知的最大知识包含宏或VB。我建议将此问题显示给开发原始求解器的前线系统。

最新更新