我在VBA循环中使用Excel 2007中的内置解算器来解决许多不同的问题。偶尔,解算器会达到最大时间,这会导致出现一个弹出对话框,询问用户是要继续,停止还是结束。在所有情况下,我都希望它结束,然后继续循环的下一行。这将防止用户不得不坐在那里并且每次响应。VBA解算器禁用每次迭代后弹出的对话框
我跑与求解宏直通法(Catch max time/iteration dialog box when using Excel Solver in VBA),但是它给了我另一个对话框,说:“你输入的公式包含一个错误”
我也试过http://msdn.microsoft.com/en-us/library/office/ff197237(v=office.15).aspx。 这是一个不太复杂的版本“求解器直通法”,但每次迭代之后它给了我为“您所输入的公式包含一个错误” 相同的消息这是我的代码
Sub Optimize()
'
' OptimizeShortfall Macro
'
'
Set MyFirstObj = Range("I124")
Set MyFirstRange = Range("H600:H698")
Dim i As Integer
For i = 0 To 1
MyObj = MyFirstObj.Offset(0, i).Address
MyTestRange = MyFirstRange.Offset(0, i).Address
SolverReset
SolverOk SetCell:=MyObj, MaxMinVal:=1, ValueOf:="0", ByChange:= _
MyTestRange
SolverAdd CellRef:=MyTestRange, Relation:=1, FormulaText:="100%"
SolverOptions MaxTime:=20, Iterations:=100, Precision:=0.000001, AssumeLinear _
:=False, StepThru:=False, Estimates:=1, Derivatives:=1, SearchOption:=1, _
IntTolerance:=5, Scaling:=False, Convergence:=0.0001, AssumeNonNeg:=True
SolverSolve UserFinish:=True, ShowRef:="SolverIteration"
Next i
End Sub
Function SolverIteration(Reason As Integer)
MsgBox Reason
SolverIteration = 1
End Function
' ShowRef'参数是可选的。你可以忽略它,在这种情况下,循环将运行到下一个求解器问题。 “您键入的公式包含错误”消息意味着其他的错误,可能在模型设置中。 – Ioannis 2014-09-03 15:40:09
如果我省略ShowRef参数,我会看到对话框显示“达到最大时间限制,是否要停止/继续”。为了避免这种情况,我使用ShowRef调用宏'SolverIteration',但它给了我一个味精说:“你输入的公式包含错误”。 – 2014-09-03 17:40:36
你能报告哪一行给出错误?你还可以检查所有的公式是否输入没有任何拼写错误?有时候,诸如在公式中使用分号而不是逗号,或嵌套的许多级别等问题都会导致出现此类错误。 – Ioannis 2014-09-03 19:05:13