我有一个Access数据库,可以将数据导出到程序生成的Excel模板中,以实现可见性,更复杂的计算/可视化,最重要的是,它允许用户更多地使用数据。
此模板需要做的基本事情之一是执行求解程序。访问中的任何标准参考库(我知道)中都不存在Solver。我对这方面有点新意,但我环顾网络,发现了Solver32.dll的位置,我指出了它的引用,它不会接受它。看了一下,看到我可能需要用regsvr32注册它,因为它不在system32目录中,我试过了,但它没有用。
这可能是由于我有一些管理员级别的访问问题(工作计算机......叹息),而我正在尝试将这些问题排序,但我觉得这不会解决它。
无论如何,提问时间:
1)我是否只需要管理员权限来注册Solver32.dll,那么我的参考资料是否可以轻松完成?
2)如果没有,是否有另一种方法来引用求解器库?
3)如果没有,或者我无法获得注册solver32.dll的权利(可能,我的IT部门可能很吝啬),有没有办法在我正在使用的Excel工作表中打开插件解算器代码它在那里运行?因为如果有代码是超级简单的:
........
AddIns("Solver Add-In").Installed = True
solveradd cellref:="$D$6", Relation:=1, FormulaText:="1"
solveradd cellref:="$D$6", Relation:=3, FormulaText:="0"
SolverOk SetCell:="$F$6", MaxMinVal:=2, ValueOf:=0, ByChange:="$B$6:$D$6", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve
............
无论如何,一直在为一大块事情寻找解决方案。没有帮助MS的无限智慧选择将这个程序命名为Access,这在google搜索时非常有用(讽刺)。
编辑:在评论中回答一些问题
版本:Access 2010
错误: 当我尝试从Access VBA IDE引用dll时,我收到此错误“无法添加对指定文件的引用”
当我尝试运行regsvre.exe时出现此错误“模块'C:\ ProgramFiles ............. \ Solver32.dll”已加载但入口点DllRegisterServer没找到。确保“C:\ ProgramFiles ......... \ Solver32.dll”是有效的DLL或OCX文件,然后再试一次。“
答案 0 :(得分:2)
好的,我找到了一个胶带解决方案。根据您所在位置的安全设置,这可能有效,也可能无效。我甚至不确定这在我的位置有多好,但现在确实如此。上帝知道当我部署这个时会发生什么
基本上我将一个宏注入Excel工作簿(来自Access)来运行Solver,因为我无法让solver32.dll在Access中本地工作。这是代码
Private Sub InjectSolverMacro(ByRef xlbook As Excel.Workbook, ByRef xlapp As Excel.Application)
Dim xlVBProj As VBProject
Dim xlModule As VBIDE.VBComponent
Dim sCode As String
xlbook.Worksheets(1).Select
AddIns("Solver Add-In").Installed = True
Set xlVBProj = xlbook.VBProject
xlVBProj.References.AddFromFile ("C:\Program Files\Microsoft Office\Office14\Library\SOLVER\Solver.XLAM")
Set xlModule = xlbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
sCode = "Private sub SolverMacro()" & vbCr _
& "SolverAdd CellRef:=""$D$6"", Relation:=1, FormulaText:=""1"" " & vbCr _
& "SolverAdd CellRef:=""$D$6"", Relation:=3, FormulaText:=""0"" " & vbCr _
& "SolverOk SetCell:=""$F$6"", MaxMinVal:=2, ValueOf:=0, ByChange:=""$B$6:$D$6"", Engine:=1, EngineDesc:=""GRG Nonlinear"" " & vbCr _
& "SolverSolve" & vbCr _
& "End Sub"
xlModule.CodeModule.AddFromString (sCode)
End Sub
起初我的引用指向Solver32.dll。这没用。然后我看到this thread有人说你必须指向Solver.XLA。天知道为什么会这样。但它的确有效。
其他几个笔记。您需要在Access中引用Microsoft Visual Basic for Applications Extensibility 5.3库来执行此操作。然后,您需要转到Excel中的信任中心宏设置(文件 - >选项 - >信任中心 - >信任中心设置 - >宏设置)并选择“信任对VBA项目对象模型的访问” 。这将允许您注入代码。当我部署它时,这也可能无法正常工作。我的公司可能不会非常热衷于让我的所有用户禁用此安全性。
但它有效。