2011-10-27 2 views
3

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

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

В тестовой книге Excel у меня есть этот код, чтобы перечислить надстройки. Однако только «Excel Add-Ins» являются единственными, которые попадают в список. «Надстройки 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 Add-In Мне нужно, чтобы сохранить его от загрузки в объекте 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 

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

+0

Спасибо за подсказку, но вы правы, это экстремально. Это для внутреннего приложения, но я не решаюсь изменить реестр пользователей. – sinDizzy

+0

duh Я даже не думал об этом. позвольте мне дать это выстрел. – sinDizzy

+0

одобрено в Excel 2007 и Excel 2010 и работает как шарм. Я везде искал этот тип объекта и не мог его найти. Спасибо за помощь. – sinDizzy

0

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

+2

Ну да, это очевидный ответ. Вся идея здесь в том, что она автоматизирована, и конечному пользователю не нужно ничего делать вручную. – sinDizzy

Смежные вопросы