VB6/VBA COM Eklentisinin yüklenmesine izin verme

Excel'e girip bir çalışma kitabı yükleyen bir VB6/VBA uygulamasına sahibim. Uzun yıllar boyunca harika çalışıyor. Şimdi Excel 2010'a geçtik ve bazı sorunlara yol açtık. Sorun giderme işleminden sonra PowerPivot COM Eklentisini kapatırsam, işlem herhangi bir sorun olmadan önce olduğu gibi çalışabilir. Bunun tam sebebini ararken, sadece benim uygulamam için bu eklentiyi kapatabilir miyim diye sormak istedim. Excel'i şöyle yüklerim:

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

Bir test Excel çalışma kitabında Eklentileri listelemek için bu kod var. Ancak sadece "Excel Eklentileri" listelenenlerdir. "COM Eklentileri" listelenmiyor.

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 Eklentisine başvurmanın bir yolunu bulduktan sonra, uygulamasındaki Excel nesnesinde yüklenmesini engellemem gerekiyor. Herhangi bir yardım veya öneri hoş geldiniz.

Teşekkürler

3

2 cevap

Bunu başarmak için "güzel" bir yol olup olmadığını bilmiyorum, ancak "kirli" bir yol, Excel'in başlamadan önce eklenti için kayıt defteri ayarlarını değiştirmek olacaktır. Bu, HKCU \ Software \ Microsoft \ Office \ Excel \ AddIns \\ LoadBehavior 'ı 0'a ayarlayarak yapılabilir (otomatik olarak yüklenmez). Ancak, bu, kullanıcının kabul ettiğinden emin olmadıkça, muhtemelen yapmamanız gereken bir şeydir, bu yüzden kullanıcıya bu değişikliği kabul edip etmediğini sorduğunuzdan emin olun.

Koduna çok yakındın, gitmenin yolu şunun gibi:

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 eklentisini yüklemek ve boşaltmak için Connect özelliğini kullanabilirsiniz.

1
katma
Bahşiş için teşekkürler ama haklısın, bu aşırı. Bu bir iç uygulama içindir, ancak kullanıcı kayıt defterini değiştirmek konusunda tereddüt ediyorum.
katma yazar sinDizzy, kaynak
Bunu düşünmedim bile. Bana bir şans vereyim.
katma yazar sinDizzy, kaynak
Tamam Excel 2007 ve Excel 2010'da test edildi ve bir cazibe gibi çalıştı. Bu tür bir nesne için her yere baktım ve bulamadım. yardım için teşekkürler.
katma yazar sinDizzy, kaynak

Aynı problemim var ama daha kolay bir çözüm var. Sadece Powerpivot eklentisini excel'den (unick) kapatıp tekrar açıyorum ... sorun giderildi.

0
katma
Evet, açık cevap budur. Buradaki tüm fikir, otomatik ve son kullanıcının elle bir şey yapmak zorunda olmamasıdır.
katma yazar sinDizzy, kaynak