【发布时间】:2015-10-24 22:32:18
【问题描述】:
以下代码在我第一次运行时完美运行,
但是当我第二次或第三次再次运行它时
它给了我一个来自求解器的消息框,告诉它找到了解决方案,然后当我点击选择OK
它只是从 Sub 中退出。不明白为什么。
我还想知道如何通过 vba 从 Solver 对话框中将 OK 命令提供给提示符?或者干脆避免它。
Option Explicit
Sub MinimizeCost()
Dim wm, ws, wr As Worksheet
Dim i, j, FinalRow As Long
Dim char As Variant
Dim ScnCap, ScnDem As Range
Set wm = Sheets("Model")
Set ws = Sheets("Scenarios")
Set wr = Sheets("Results")
For i = 1 To 5
With ws
j = i + 1
Set ScnCap = .Range(.Cells(5, j), .Cells(7, j))
End With
wm.Range("Capacities") = ScnCap.Value
With ws
j = i + 1
Set ScnDem = .Range(.Cells(10, j), .Cells(13, j))
End With
ScnDem.Copy
wm.Range("Demands").PasteSpecial Transpose:=True
Call Solveit
FinalRow = wr.Range("A9000").End(xlUp).Row
FinalRow = FinalRow + 1
wr.Range("A" & FinalRow + 1) = "Scenario" & " " & i
wr.Range("A" & FinalRow + 2) = "Shipments"
wr.Range("F" & FinalRow + 2) = "Total Cost"
wm.Range("TotalCost").Copy
wr.Range("F" & FinalRow + 3).PasteSpecial xlPasteValues
wm.Range("Shipped").Copy
wr.Range("A" & FinalRow + 3).PasteSpecial xlPasteValues
SendKeys ("{ESC}")
wm.Range("A1").Select
Next i
End Sub
Sub Solveit()
Dim wk As Worksheet
Set wk = Sheets("Model")
wk.Select
SolverOk SetCell:="$B$20", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$13:$F$15", _
Engine:=2, EngineDesc:="Simplex LP"
SolverOk SetCell:="$B$20", MaxMinVal:=2, ValueOf:=0, ByChange:="$C$13:$F$15", _
Engine:=2, EngineDesc:="Simplex LP"
SolverSolve
End Sub
【问题讨论】: