我今天发现了一些新的东西,这将导致我将来有关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
答案 0 :(得分:0)
“工作簿 2”的存在是相关的,但不是因果关系。就我而言,有一个特定的工作簿会导致求解器变慢;大多数其他人没有。导致速度变慢的工作簿大约为 4mb。更大的工作簿不会导致速度变慢。据我所知,导致速度变慢的那个不包含宏或 VB。我建议将这个问题展示给开发原始求解器的 Frontline 系统。