vba操作规划求解
要前期引用
要使用vba操作规划求解,需要添加引用Solver
Program Files\Microsoft Office\Office14\Library\SOLVER 子文件夹中的 Solver.xlam
可以用代码直接操作,需弹窗后点击信任对VBA工程对象模型的访问
Sub 用vba代码添加模型信任和前期引用规划求解()
Dim oWshell, i
Set oWshell = CreateObject("WScript.Shell")
Application.ScreenUpdating = False
'信任对VBA工程对象模型的访问
oWshell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office" & Application.Version & "\Excel\Security\AccessVBOM", 1, "REG_DWORD" '信任对 VBA 项目的访问
With Application
.SendKeys "~"
.CommandBars.FindControl(ID:=3627).Execute
End With
AddIns("规划求解加载项").Installed = True
With ThisWorkbook.VBProject
For i = 1 To .References.Count
If .References(i).Name = "Solver" Then
Exit Sub
Else
If i = .References.Count Then
ThisWorkbook.VBProject.References.AddFromFile "SOLVER.XLAM"
End If
End If
Next i
End With
Application.ScreenUpdating = True
End Sub
用到的函数
1,SolverReset
重置 “规划求解参数” 对话框中的所有单元格选定区域和约束
2,SolverOk 函数
定义基本求解器模型。 相当于在"数据分析**“组中单击**“规划求解”,然后在"规划求解参数” | 对话框中指定 选项。
SolverOk ( SetCell、MaxMinVal、ValueOf、ByChange、Engine、EngineDesc )
- SetCell 是 Variant 类型的可选参数(不要给单元格,给单元格地址)。 引用活动工作表中的一个单元格。 对应于" 规划求解参数 "对话框中的"设置 目标单元格 "框。
- MaxMinVal 是 Variant 类型的可选参数。 对应于"规划求解参数"对话框中 的"最大值"、最小值 和"值" 选项。
MaxMinVal | 指定 |
---|---|
1 | 最大 |
2 | 最小化 |
3 | 匹配特定值 |
- ValueOf 是 Variant 类型的可选参数。 如果 MaxMinVal 为 3,则必须指定目标单元格匹配到的值。
- ByChange 是 Variant 类型的可选参数(不要给单元格,给单元格地址)。 将更改的单元格或单元格范围,以便在目标单元格中获得所需的结果。 对应于"规划 求解参数" 对话框中的"通过 更改单元格" 框。
- Engine 是 Variant 类型的可选参数。 应用来求解问题的求解方法:2 表示单纯形 LP 方法,1 表示 GRG 非线性方法,或 3 表示演进式方法。 对应于" 规划求解参数 “对话框中的"选择求解 方法” 下拉列表。
- EngineDesc 是 Variant 类型的可选参数。 另一种以字符串形式指定应用来求解问题的求解方法的方式:“单纯形 LP”、“GRG 非线性”或“演进式”。 对应于" 规划求解参数 “对话框中的"选择求解 方法” 下拉列表。
3,SolverAdd 函数
向当前问题添加一个约束。 相当于在"数据分析" 组中 单击&#