从Access VBA引用Solver32.dll

从Access VBA引用Solver32.dll,vba,dll,reference,solver,Vba,Dll,Reference,Solver,我有一个Access数据库,可以将数据导出到程序生成的excel模板中,以实现可视性、更复杂的计算/可视化,最重要的是,它允许用户更多地使用数据 此模板需要执行的基本操作之一是执行解算器例程。解算器不存在于access中的任何标准引用库中(据我所知)。我对这方面有点陌生,但我环顾了一下网络,发现Solver32.dll在哪里,我把引用指向它,它不会接受它。再看一看,我可能需要向regsvr32注册它,因为它不在system32目录中,我尝试了一下,但没有成功 这可能是由于我有一些管理级别的访问问

我有一个Access数据库,可以将数据导出到程序生成的excel模板中,以实现可视性、更复杂的计算/可视化,最重要的是,它允许用户更多地使用数据

此模板需要执行的基本操作之一是执行解算器例程。解算器不存在于access中的任何标准引用库中(据我所知)。我对这方面有点陌生,但我环顾了一下网络,发现Solver32.dll在哪里,我把引用指向它,它不会接受它。再看一看,我可能需要向regsvr32注册它,因为它不在system32目录中,我尝试了一下,但没有成功

这可能是由于我有一些管理级别的访问问题(工作计算机…叹气),我正试图将这些问题分类,但我感觉这不会解决它

无论如何,提问时间:

1) 我是否只需要管理员权限来注册Solver32.dll,然后我的引用就能轻松工作

2) 如果没有,是否有其他方法引用解算器库

3) 如果没有,或者如果我无法获得注册solver32.dll的权限(可能的话,我的IT部门可能会很吝啬),是否有办法将plug solver代码打开到我正在使用的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

不管怎么说,我们已经花了一整天的时间在寻找解决方案。没有帮助的是,微软在它的无限智慧选择了命名这个程序访问,这真的有助于谷歌搜索(讽刺)

编辑:回答评论中的一些问题

版本:Access 2010

错误: 当我尝试从Access VBA IDE引用dll时,会出现以下错误“无法添加对指定文件的引用”


当我尝试运行regsvre.exe时,出现以下错误:“已加载模块'C:\ProgramFiles………\Solver32.dll',但未找到入口点DllRegisterServer。请确保“C:\ProgramFiles………\Solver32.dll”是有效的dll或OCX文件,然后重试。“

好的,我想出了一个管道胶带解决方案。根据您所在位置的安全设置,这可能有效,也可能无效。我甚至不确定这在我的位置会有多好,但现在确实如此。天知道当我部署这个时会发生什么

基本上,我将一个宏注入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。这不起作用。然后我看到有人说你必须指向SOLVIE.XLA。天知道为什么会这样。但它是有效的

还有几张便条。要执行此操作,您需要在Access中参考Microsoft Visual Basic for Applications Extensionability 5.3库。然后,您需要转到Excel中的信任中心宏设置(文件->选项->信任中心->信任中心设置->宏设置),并选择“信任VBA项目对象模型的访问权限”。这将允许您注入代码。这也是我部署它时可能无法正常工作的地方。我的公司可能不会特别希望我的所有用户都禁用这个安全


但它是有效的

我试过了,但没有成功。
我假设这会给出某种错误消息?您正在运行哪个版本的access。是否检查了dll的文件属性?您尝试连接到哪个版本的解算器?您是否尝试从excel中设置引用?是否尝试将solver.dll复制到文件系统中的其他位置以注册副本?到目前为止,您收到了哪些错误消息?可能有一些旧的/已损坏的参考资料在附近?参考版本:这是Access 2010lol,因为我担心我的老板不会接受这一点,因为乘车时会有安全问题。哦,好吧。