4

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

这个模板需要做的基本事情之一是执行求解程序。求解器在访问中的任何标准参考库中都不存在(据我所知)。我对这方面有点陌生,但我环顾网络,发现 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,这在谷歌搜索(讽刺)时确实有帮助。

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

版本:Access 2010

错误:当我尝试从 Access VBA IDE 引用 dll 时,我收到此错误“无法添加对指定文件的引用”

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

4

1 回答 1

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。这没有用。然后我看到了这个帖子,有人说你必须指向 Solver.XLA。天知道为什么会这样。但它有效。

其他几个注意事项。您需要在 Access 中引用 Microsoft Visual Basic for Applications Extensibility 5.3 库来执行此操作。然后,您需要转到 Excel 中的信任中心宏设置(文件->选项->信任中心->信任中心设置->宏设置)并选择“信任对 VBA 项目对象模型的访问”。这将允许您注入代码。这也是我部署它时可能无法正常工作的地方。我的公司可能不会非常热衷于让我的所有用户都禁用此安全性。

但它有效。

于 2013-03-04T20:06:02.647 回答