2017-01-09 35 views
0

嗨我想添加一个参考programnatically按照:How to Add/Remove reference programmatically?如何以编程方式将.xlam插件(作为对象)添加到vba中?

但是,我希望以编程方式添加的引用是opensolver.org的.xlam文件。

Sub AddWS() 
    'Create a reference to Windows Script Host, ' 
    'where you will find FileSystemObject ' 
    'Reference name: "IWshRuntimeLibrary" ' 
    'Reference Name in references list: "Windows Script Host Object Model" ' 
    ReferenceFromFile "C:\Users\path\OpenSolver2.8.5_LinearWin\OpenSolver.xlam" 
    End Sub 

和功能:

Function ReferenceFromFile(strFileName As String) As Boolean 
Dim ref As Object 
MsgBox (strFileName) 

     'On Error GoTo Error_ReferenceFromFile 
     'References.AddFromFile (ref) 
     'ref = strFileName 
     'vbProj.References.AddFromFile strFileName 
     References.AddFromFile (strFileName) 
     MsgBox (strFileName) 
     ReferenceFromFile = True 

Exit_ReferenceFromFile: 
     Exit Function 

Error_ReferenceFromFile: 
     ReferenceFromFile = False 
     Resume Exit_ReferenceFromFile 
End Function 

,但我得到的对象错误424:

用下面的代码

所以 “对象需要” 就行了:

  References.AddFromFile (strFileName) 

它是因为我不知道如何:

a。将.xlam文件设置为对象 b。将.xlam文件转换为.ocx文件,以便将其读取并添加到引用。

有没有人对如何自动编程的OpenSolver.xlam从任何随机位置添加到Microsoft Excel任何建议*

*对于我来说,如果我粘贴包含在.xlam文件夹正常工作:?

C:\Program Files (x86)\Microsoft Office\root\Office16\Library 

然后手动打开它,但我需要我的代码的用户也能够从mac运行它,而不需要他们在我从另一个模块调用它之前手动添加opensolver作为参考。

如下所述,succesfull代码的确将OpenSolver.xlam添加到引用中,但我似乎无法以编程方式在vba> tools>引用中标记复选框。

有没有人对代码有任何建议,它会在引用中的Opensolver之前自动标记该复选框,一旦它被添加了?

+1

不添加.xlam文件作为参考 - 您需要将它们添加为Excel加载项。 – Comintern

+0

谢谢,我现在要阅读。 –

回答

0

@Comintern你是我的一天!我花了至少4个小时尝试不同的代码,排除了已经出现的问题,并且就您遇到的问题提出了简单的建议,我在两分钟内找到了我需要的工作和确切的解决方案!非常感谢你:)

有效代码为:Programatically Install Add-In VBA

希望这仍然可以帮助那些面临相同的问题:

Private Sub Workbook_Open() 

On Error Resume Next 
Application.AddIns("OpenSolver").Installed = False 
On Error GoTo 0 

With Application 
    .AddIns.Add "C:\Users\random path\OpenSolver2.8.5_LinearWin\OpenSolver.xlam", False 
    .AddIns("OpenSolver").Installed = True 
End With 

'ThisWorkbook.Close False 

End Sub 

正如所建议。

相关问题