我正在嘗試使用求解器找到一個簡單投資組合的最大回報。在工作表中使用求解器直接工作,但在VBA中設置命令時不會。相反(正如你可以從screengrab中看到的那樣)忽略了其中一個約束條件(在T10中計算的權重總和應該等於1)。Excel求解器忽略VBA中的約束
SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="100"
或大於「1」以外的任何其他整數:有趣的是,如果我改變第三行說工作正常。 (它也可能忽略其他約束,但我無法檢查這一點)。 表看起來是這樣的:
而且我的代碼是:
Sub FindRange()
SolverReset
SolverOk SetCell:="$T$7", MaxMinVal:=1, ValueOf:="0", ByChange:="$O$10:$R$10"
SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="$O$10:$R$10", Relation:=3, FormulaText:="0"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Range("T9").Value = Range("T7").Value
End Sub
任何建議感激地歡迎!
該代碼看起來不錯。它似乎以非VBA vs VBA的方式迭代?也許嘗試在'SolverOK'之前添加'CellRef'? – 2013-03-25 20:41:04
也許嘗試只使用'FormulaText:= 1'?(沒有雙引號)我提到它是因爲[MSDN上的代碼](http://msdn.microsoft.com/en-us/library/office/ff838657.aspx)不使用引號。 – 2013-03-25 22:11:03
謝謝。卸下雙引號確實幫助(即它保持低於10),但它現在忽略「$Ø$ 10:$ R $ 10」應該等於0,所以兩個約束被忽略 – Mary 2013-03-26 12:11:55