4

可視性、より複雑な計算/視覚化のために、手続き的に生成されたExcelテンプレートにデータをエクスポートするAccessデータベースがあります。最も重要なことは、ユーザーがデータをより多く操作できるようにすることです。

このテンプレートが実行する必要がある基本的なことの1つは、ソルバールーチンを実行することです。ソルバーは、アクセス中の標準参照ライブラリ(私が知っている)のいずれにも存在しません。私は物事のこの側面に少し慣れていませんが、ネットを見て、Solver32.dllがどこにあるかを見つけました、私はそれを参照しました、それはそれを取りませんでした。もう少し見てみると、system32ディレクトリにないので、zippy32に登録する必要があるかもしれないことがわかりました。それを試してみましたが、機能しませんでした。

これは、私が抱えている管理者レベルのアクセスの問題(仕事用コンピューター....ため息)が原因である可能性があり、それらを並べ替えようとしていますが、これでは修正されないと感じています。

とにかく、質問時間:

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を参照しようとすると、「指定されたファイルへの参照を追加できません」というエラーが表示されます。

zippye.exeを実行しようとすると、「モジュール'C:\ ProgramFiles ............. \ Solver32.dll」というエラーが表示されますが、エントリポイントのDllRegisterServerが見つかりませんでした。 。「C:\ ProgramFiles ......... \ Solver32.dll」が有効なDLLまたはOCXファイルであることを確認してから、再試行してください。

4

1 に答える 1

2

わかりました、私はこれに対するダクトテープの解決策を考え出しました。お住まいの地域のセキュリティ設定に応じて、これが機能する場合と機能しない場合があります。これが私の場所でどれだけうまくいくかさえわかりませんが、今のところはうまくいきます。神は私がこれを展開すると何が起こるかを知っています

基本的に、ソルバーを実行するために(Accessから)Excelブックにマクロを挿入しています。これは、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 ApplicationsExtensibility5.3ライブラリを参照する必要があります。次に、Excelのトラストセンターのマクロ設定([ファイル]->[オプション]->[トラストセンター]->[トラストセンターの設定]->[マクロの設定])に移動し、[VBAプロジェクトオブジェクトモデルへのアクセスを信頼する]を選択する必要があります。これにより、コードを挿入できます。これは、これを展開したときにうまく機能しない可能性もあります。私の会社は、すべてのユーザーにこの安全性を無効にしてもらうことにあまり熱心ではないでしょう。

しかし、それは機能します。

于 2013-03-04T20:06:02.647 に答える