2013-03-01 112 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