none
Solverアドインの参照設定について RRS feed

  • 質問

  • Excel2010にてSolverアドインを用いたVBAマクロを使用しています。

    マクロを作成したのがOffice2000の時代であったためか、

    Solverアドインの参照設定が「C:\Program Files\Microsoft Office\Office\Library\SOLVER\SOLVER.XLA」になっており、

    現状の会社の標準バージョンであるOffice2010で当該ファイルを開くと、

    参照不可が発生してしまいます。

    これを回避できるようにソースを修正したいのですが、

    「C:\Program Files\Microsoft Office\Office\Library\SOLVER\SOLVER.XLA」を読みに行くように指定している個所が分からず、

    どこを変更すればいいか困っています。

    マクロを用いてバージョンごとにSOLVER.XLA/SOLVER.XLAMの読み先を変える様に変更したいのですが、

    ファイルを開いた時点で参照不可が発生しており、VBAでこれを解除することができません。

    古い方のSOLVER.XLAを読むようにどこかで指定しているのでしょうか?

    ちなみに、手動で参照不可を外し、参照できるSolverに修正したシートを保存すると、

    以降は開いた際に参照不可が発生しなくなるのですが、

    このファイルをマスターとすれば、少なくともExcel2010を用いてほかの端末で開いても、

    参照不可が発生しなくなると考えてよいのでしょうか?

    2017年4月25日 0:21

回答

  • 一応VBAから参照設定を変更することは可能です。
    #セキュリティが低下しますが。

    Option Explicit
    Const SOLVER_XLA As String = "\SOLVER\SOLVER.XLA"
    Const SOLVER_XLAM As String = "\SOLVER\SOLVER.XLAM"
            
    Private Sub Workbook_Open()
        ChangeSolverRef
    End Sub
    
    Public Sub ChangeSolverRef()
        'Microsoft Visual Basic for Applications Extensibilityを参照
        'さらにマクロのセキュリティでVBAプロジェクトオブジェクトモデルへのアクセスを信頼
        Dim v As VBIDE.VBProject
        Dim r As VBIDE.Reference
        Dim fileName As String
    
        For Each v In Application.VBE.VBProjects
        
            On Error Resume Next
            fileName = v.fileName
            If (Err.Number <> 0) Then
                fileName = ""
            End If
            On Error GoTo 0
            
            If (fileName = ThisWorkbook.FullName) Then
                For Each r In v.References
                    If (r.IsBroken) Then
                        If (VBA.Right(r.FullPath, Len(SOLVER_XLA)) = xla Or VBA.Right(r.FullPath, Len(SOLVER_XLAM)) = xlam) Then
                            fileName = Application.LibraryPath & SOLVER_XLA
                            If (Dir(Path) <> "") Then
                                Call v.References.Remove(r)
                                Call v.References.AddFromFile(fileName)
                                 MsgBox ""
                                Exit For
                            End If
                            
                            fileName = Application.LibraryPath & SOLVER_XLAM
                            If (Dir(fileName) <> "") Then
                                Call v.References.Remove(r)
                                Call v.References.AddFromFile(fileName)
                                MsgBox ""
                                Exit For
                            End If
                            
                            Err.Raise 513, , "ソルバーが見つかりませんでした"
                        End If
                    End If
                Next
                Exit For
            End If
        Next
    End Sub

    このファイルをマスターとすれば、少なくともExcel2010を用いてほかの端末で開いても、参照不可が発生しなくなると考えてよいのでしょうか?
    ソルバーアドインがインストールされていない環境や、全く違う場所にファイルがあるような場合は参照不可となるでしょう。

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年4月25日 3:48