|
本帖最后由 zhyj_88 于 2012-7-29 13:02 编辑
大家可以看一下附件和图片,不知为何第二个约束没有加进去?难道是规划函数有问题?
附程序代码:
- Option Explicit
- Private Sub 清空规划原始数据_Click()
- Dim Rng As Range
- With ActiveSheet
- Set Rng = .Range("B6:K7")
- Set Rng = Union(Rng, .Range("L7"))
- Set Rng = Union(Rng, .Range("B9:M18"))
- Rng.ClearContents
- End With
- Set Rng = Nothing
- End Sub
- Private Sub 规划求解_Click()
- Dim i, ExistSolver, RelRng As Range
- ExistSolver = False
- For i = 1 To ThisWorkbook.Application.VBE.VBProjects.Count
- If ThisWorkbook.Application.VBE.VBProjects(i).Name = "SOLVER" Then ExistSolver = True: Exit For
- Next i
- If Not ExistSolver Then MsgBox "没有加载SOLVER.XLAM 程序退出!", 64: Exit Sub
- ExistSolver = False
- For i = 1 To ThisWorkbook.VBProject.References.Count
- If ThisWorkbook.VBProject.References(i).Name = "SOLVER" Then ExistSolver = True: Exit For
- Next i
- If Not ExistSolver Then MsgBox "没有引用SOLVER.XLAM 程序退出!", 64: Exit Sub
- With Worksheets("线性规划")
- SolverReset
- SolverOptions Precision:=0.00001, AssumeLinear:=True, AssumeNonNeg:=True
- For i = 1 To WorksheetFunction.CountA(.Range("L9:L18"))
- Set RelRng = .Range("L9").Offset(i - 1, 0)
- If RelRng.Value = "≤" Then
- SolverAdd cellRef:=.Range("N9").Offset(i - 1, 0), relation:=1, formulaText:=.Range("M9").Offset(i - 1, 0).Value
- ElseIf RelRng.Value = "=" Then
- SolverAdd cellRef:=.Range("N9").Offset(i - 1, 0), relation:=2, formulaText:=.Range("M9").Offset(i - 1, 0).Value
- ElseIf RelRng.Value = "≥" Then
- SolverAdd cellRef:=.Range("N9").Offset(i - 1, 0), relation:=3, formulaText:=.Range("M9").Offset(i - 1, 0).Value
- Else
- MsgBox "第" & CStr(i) & "个约束条件发生错误 程序退出!", 64: Exit Sub
- End If
- Next i
- ' SolverOKdialog setCell:=.Range("N7"), maxMinVal:=2, byChange:=.Range("B6:K6")
- SolverOKdialog setCell:=.Range("N7"), maxMinVal:=2, byChange:=.Range("B6:K6")
- SolverSolve userFinish:=True
- SolverFinish KeepFinal:=1
- End With
- Set RelRng = Nothing
- End Sub
复制代码
|
|