2017-01-09 33 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 

正如所建議。

相關問題