2011-10-27 67 views
3

我有一個VB6/VBA應用程序掛鉤到Excel並加載工作簿。它一直在努力很多年。我們現在升級到Excel 2010並遇到了一些問題。在排除故障後,似乎如果關閉PowerPivot COM Add-In,則該過程可以像以前那樣運行,而不會出現問題。當我尋找這個的確切原因時,我想看看我是否可以關閉那個只爲我的應用程序加載項。我加載這樣的Excel:VB6/VBA不允許COM加載項加載

Set xlApp = CreateObject("Excel.Application") 
xlApp.Visible = False 

在測試Excel工作簿我有這段代碼列出加載項。但是隻有「Excel加載項」纔是列出的。 「COM加載項」不會列出。

Sub ListAddIns() 
    Dim CurrAddin As Excel.AddIn 
    Dim r As Long 
    Dim ws As Excel.Worksheet 

    Set ws = ActiveSheet 
    Cells.Select 
    Selection.ClearContents 
    Range("A1").Select 

    r = 1 
    For Each CurrAddin In Excel.Application.AddIns 
     ws.Cells(r, 1).Value = CurrAddin.FullName 
     ws.Cells(r, 2).Value = CurrAddin.Installed 
     ws.Cells(r, 3).Value = CurrAddin.Name 
     ws.Cells(r, 4).Value = CurrAddin.Path 
     ws.Cells(r, 5).Value = CurrAddin.progID 
     ws.Cells(r, 6).Value = CurrAddin.CLSID 

     r = r + 1 
    Next CurrAddin 

    MsgBox "Its done.", vbInformation 
End Sub 

後,我找到一種方式來引用COM加載項,我需要保持它裝載在我的應用程序Excel對象。歡迎任何幫助或建議。

感謝

回答

1

我不知道是否有一個「漂亮」的方式來實現這一目標,而是一個「髒」的方式是更改加載註冊表設置啓動Excel之前,所以它將不會被加載。 這可以通過將HKCU \ Software \ Microsoft \ Office \ Excel \ AddIns \ LoadBehavior設置爲0來完成(不要自動加載)。
但是,除非您確定用戶接受它,否則您可能不應該這樣做,因此請務必詢問用戶是否同意此更改。

你是非常接近你的代碼,要走的路是這樣的:

Sub ListAddIns() 
    Dim CurrAddin As **Office.COMAddIn** 
    Dim r As Long 
    Dim ws As Excel.Worksheet 

    Set ws = ActiveSheet 
    Cells.Select 
    Selection.ClearContents 
    Range("A1").Select 

    r = 1 
    For Each CurrAddin In **Excel.Application.COMAddIns** 
     ws.Cells(r, 1).Value = CurrAddin.Description 
     ws.Cells(r, 2).Value = CurrAddin.Application 
     ws.Cells(r, 3).Value = CurrAddin.GUID 
     ws.Cells(r, 4).Value = CurrAddin.Connect 
     ws.Cells(r, 5).Value = CurrAddin.Creator 
     ws.Cells(r, 6).Value = CurrAddin.progID 
     r = r + 1 
    Next CurrAddin 
    MsgBox "Its done.", vbInformation 
End Sub 

可以使用連接屬性來加載和卸載一個COM插件。

+0

感謝您的提示,但你是對的,這是極端的。這是一個內部應用程序,但我對改變用戶註冊表猶豫不決。 – sinDizzy

+0

但我沒有想到這一點。讓我給一個鏡頭。 – sinDizzy

+0

在Excel 2007和Excel 2010中正常測試並像魅力一樣工作。我到處尋找這種類型的物體,並找不到它。謝謝您的幫助。 – sinDizzy

0

我有同樣的問題,但有一個更簡單的解決方案。 我只需將Excel中的Powerpivot加載項關閉(解開它)並再次打開它...問題已修復。

+2

好的,這是明顯的答案。這裏的整個想法是它是自動化的,最終用戶不必手動進行任何操作。 – sinDizzy