2013-03-01 116 views
4

我有一个Access数据库,可以将数据导出到程序生成的Excel模板中,以查看可视性,更复杂的计算/可视化,最重要的是,它允许用户更多地使用数据。从Access VBA引用Solver32.dll

此模板需要做的基本事情之一是执行解算器例程。求解器不存在于访问中的任何标准参考库(我知道的)。我在这方面有点新,但是我看了看网络,发现了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无法帮助MS以无限的智慧选择这个程序Access,这对搜索(讽刺)时确实有帮助。

编辑:回答在评论

版本的一些问题:Access 2010中

错误: 当我尝试从Access VBA IDE我得到这个错误基准的DLL“不能添加引用到指定文件“

当我尝试运行regsvre.exe时出现此错误”模块'C:\ ProgramFiles ............. \ Solver32.dll“被加载但未找到入口点DllRegisterServer。确保“C:\ ProgramFiles ......... \ Solver32.dll”是一个有效的DLL或OCX文件,然后再试一次。“

+0

'我试过了,它没有工作。'我假设这给了某种错误信息? – enderland 2013-03-01 21:23:05

+0

您正在运行的访问版本。 – Hiten004 2013-03-02 03:25:18

+0

你检查了dll的文件属性吗?你试图连接哪个版本的求解器?你有没有试图在Excel中设置一个参考?您是否曾尝试将solver.dll复制到注册副本的文件系统中的其他位置?到目前为止你的错误信息是什么? – collapsar 2013-03-02 14:41:18

回答

2

好的,我想出了一个这种管道胶带解决方案。根据您所在位置的安全设置,这可能会也可能不会工作,我甚至不知道它在我的位置会有多好,但现在它确实如此。基本上我注射宏到Excel工作簿(从访问)来解算器运行,因为我不能让solver32.dll在访问本地工作。下面的代码

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项目对象模型”。这将允许您注入代码。当我部署这个时,这也可能无法正常工作。我的公司可能不会超级热衷于让我的所有用户禁用此安全功能。

但它的工作原理。

+0

大声笑,因为我担心我的老板不会接受这个由于安全over-rides。好吧。 – user2125055 2013-03-08 15:59:37