VB6 / VBA не разрешать загрузку надстройки COM - PullRequest
3 голосов
/ 27 октября 2011

У меня есть приложение VB6 / VBA, которое подключается к Excel и загружает рабочую книгу.Он работал отлично в течение многих лет.Сейчас мы обновились до Excel 2010 и столкнулись с некоторыми проблемами.После устранения неполадок кажется, что если я отключил надстройку PowerPivot COM, процесс сможет работать так же, как и раньше, без проблем.Пока я ищу точную причину этого, я хотел посмотреть, смогу ли я отключить эту надстройку только для моего приложения.Я загружаю Excel следующим образом:

 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 в моем приложении.Любая помощь или предложения приветствуются.

Спасибо

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Я не знаю, есть ли «симпатичный» способ добиться этого, но «грязным» способом было бы изменить настройки реестра для надстройки перед запуском 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

Вы можете использовать свойство Connect для загрузки и выгрузки надстройки COM.

0 голосов
/ 06 сентября 2012

У меня та же проблема, но есть более простое решение. Я просто отключаю надстройку Powerpivot из Excel (снимите флажок) и включите снова ... проблема исправлена.

...