SolverSolve 函數

開始執行規劃求解解決方案。 相當於按一下 [規劃求解參數] 對話方塊中的 [規劃求解]

注意 預設不會啟用規劃求解增益集。 使用本函數之前,必須先安裝並啟用規劃求解增益集。 如需如何安裝並啟用規劃求解增益集的詳細資訊,請參閱使用規劃求解 VBA 函數。 安裝規劃求解增益集之後,必須建立對規劃求解增益集的參照。 在模組作用中的 Visual Basic 編輯器中,按一下 [工具] 功能表上的 [參照],然後選取 [可用參照] 下的 [規劃求解]。 如果 [規劃求解] 沒有出現在 [可用的參考] 底下,按一下 [瀏覽],然後開啟 \Program Files\Microsoft Office\Office14\Library\SOLVER 子資料夾中的 Solver.xlam。

SolverSolve ( UserFinishShowRef)

UserFinish 的選用 Variant 。 若指定為 True ,則傳回結果時不顯示 [規劃求解結果] 對話方塊。 若指定 False 或省略,則傳回結果的同時還顯示 [規劃求解結果] 對話方塊。 ShowRef Optional Variant. 您可以將宏的名稱 (做為字串) 做為 ShowRef 自 變數。 接著會呼叫這個宏,以取代顯示 [ 顯示試用版解決方案 ] 對話方塊,每當規劃求解因為下列任何原因而暫停時。 ShowRef 宏必須具有簽章 式名稱 (Reason as Integer) Reason 引數是從 1 到 5 的整數值:

  1. 因為已選取 [規劃求解選項] 對話方塊中的 [顯示反覆運算結果] 方塊,所以 (會在每次反覆運算時) 呼叫函數,或是因為使用者按下了 ESC 鍵中斷規劃求解,所以呼叫函數。

  2. 因為已超過 [規劃求解選項] 對話方塊中的 [最大時限],所以呼叫函數。

  3. 因為已超過 [規劃求解選項] 對話方塊中的 [反覆運算次數] 限制,所以呼叫函數。

  4. 因為已超過 [規劃求解選項] 對話方塊中的 [子問題數目上限],所以呼叫函數。

  5. 因為已超過 [規劃求解選項] 對話方塊中的 [合適解答數目上限],所以呼叫函數。

如果規劃求解應停止 (與 [顯示試用方案] 對話方塊中的 [停止] 按鈕相同,則宏函式必須傳回 1) ,如果規劃求解應該繼續執行,則必須傳回 0, (與 [繼續] 按鈕) 相同。ShowRef宏可以檢查工作表上的目前方案值,或採取其他動作,例如儲存或繪製中繼值的圖表。 然而,此巨集不應更改變數儲存格中的值,或變更目標式和限制式儲存格中的公式,因為這麼做可能會對求解過程造成不利影響。

SolverSolve 傳回值

如果規劃求解問題尚未完整定義,SolverSolve 會傳回 #N/A 錯誤值。 否則,規劃求解便會執行,而 SolverSolve 會傳回與 [規劃求解結果] 對話方塊中出現的訊息對應之整數值:

傳回值 訊息
0 規劃求解找到解答。 可滿足所有限制式和最適率條件。
1 規劃求解收斂目前的解答。 已滿足所有的限制式。
2 規劃求解無法改進目前的解答。 已滿足所有的限制式。
3 當已達最高反覆運算次數時停止。
4 Objective Cell 值不會聚合。
5 規劃求解找不到合適的解答。
6 使用者中斷規劃求解。
7 未滿足此 LP 規劃求解所需的線性條件。
8 規劃求解的問題太大無法處理。
9 規劃求解在目標儲存格或限制式儲存格中遇到錯誤值。
10 當已達最長時間限制時停止。
11 此問題的求解,無足夠的記憶體可用。
13 模式錯誤。 請檢查所有的儲存格和限制式是否有效。
14 規劃求解在誤差範圍內找到一整數解。 已滿足所有的限制式。
15 當已達合適解答的數目 [整數] 上限時停止。
16 當已達整數子問題數目 [整數] 上限時停止
17 規劃求解收斂於全域解答的機率。
18 所有變數必須含有上下限。
19 二進制或 Alldifferent 限制式的變數範圍限制有所衝突。
20 變數的上下限無法產生合適的解。

範例

此範例將在商務問題中使用 [規劃求解] 函數,以使總利潤達到最大值。 SolverSolve 函數開始執行規劃求解。 當上述五個條件的其中一項發生時,規劃求解會呼叫 ShowTrial 函數;函數只會以 1 到 5 的整數值顯示訊息。

Worksheets("Sheet1").Activate 
SolverReset 
SolverOptions Precision:=0.001 
SolverOK SetCell:=Range("TotalProfit"), _ 
    MaxMinVal:=1, _ 
    ByChange:=Range("C4:E6") 
SolverAdd CellRef:=Range("F4:F6"), _ 
    Relation:=1, _ 
    FormulaText:=100 
SolverAdd CellRef:=Range("C4:E6"), _ 
    Relation:=3, _ 
    FormulaText:=0 
SolverAdd CellRef:=Range("C4:E6"), _ 
    Relation:=4 
SolverSolve UserFinish:=False, ShowRef:= "ShowTrial" 
SolverSave SaveArea:=Range("A33") 
 
Function ShowTrial(Reason As Integer) 
  Msgbox Reason 
  ShowTrial = 0 
End Function

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應