VB6/VBA Laat COM-invoegtoepassing niet laden

Ik heb een VB6/VBA-toepassing die inhaakt op Excel en een werkmap laadt. Het werkt al vele jaren geweldig. We hebben nu een upgrade naar Excel 2010 uitgevoerd en zijn enkele problemen tegengekomen. Na het oplossen van problemen lijkt het erop dat als ik de PowerPivot COM-invoegtoepassing uitschakel, het proces zonder problemen kan worden uitgevoerd zoals voorheen. Terwijl ik naar de exacte oorzaak zoek, wilde ik zien of ik die invoegtoepassing alleen voor mijn app kan uitschakelen. Ik laad Excel als volgt:

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

Op een test Excel-werkboek heb ik deze code om de invoegtoepassingen weer te geven. Alleen Excel-invoegtoepassingen zijn echter de enige die worden vermeld. "COM-invoegtoepassingen" worden niet weergegeven.

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

Nadat ik een manier heb gevonden om naar de COM-invoegtoepassing te verwijzen, moet ik voorkomen dat deze wordt geladen in het Excel-object in mijn app. Alle hulp of suggesties welkom.

Bedankt

3

2 antwoord

Ik weet niet of er een "mooie" manier is om dit te bereiken, maar een "vuile" manier zou zijn om de registerinstellingen voor de invoegtoepassing te wijzigen voordat u Excel start, zodat deze niet wordt geladen. Dit kan gedaan worden door HKCU \ Software \ Microsoft \ Office \ Excel \ AddIns \\ LoadBehavior in te stellen op 0 (laad niet automatisch).
Dit moet u echter waarschijnlijk niet doen tenzij u zeker weet dat de gebruiker het accepteert, dus zorg ervoor dat u de gebruiker vraagt ​​of hij akkoord gaat met deze wijziging.

Je zat heel dicht bij je code, de manier om te gaan is zoiets als dit:

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

U kunt de eigenschap Connect gebruiken om een ​​COM-invoegtoepassing te laden en te ontladen.

1
toegevoegd
Bedankt voor de tip, maar je hebt gelijk, dat is extreem. Dit is voor een interne app, maar ik aarzel niet om het gebruikersregister te wijzigen.
toegevoegd de auteur sinDizzy, de bron
ik heb daar zelfs niet aan gedacht. laat me dat maar eens proberen.
toegevoegd de auteur sinDizzy, de bron
oke getest in Excel 2007 en Excel 2010 en werkte als een charme. Ik zocht overal naar dit type object en kon het niet vinden. bedankt voor de hulp.
toegevoegd de auteur sinDizzy, de bron

Ik heb hetzelfde probleem, maar er is een eenvoudigere oplossing. Ik zet de Powerpivot-invoegtoepassing gewoon uit van het excel (vink het uit) en zet het weer aan ... probleem opgelost.

0
toegevoegd
Nou ja dat is het voor de hand liggende antwoord. Het hele idee hier is dat het geautomatiseerd is en dat de eindgebruiker niets handmatig hoeft te doen.
toegevoegd de auteur sinDizzy, de bron