VB6/VBA 不允许加载 COM Add-In

3

我有一个VB6/VBA应用程序,它连接到Excel并加载工作簿。多年来一直表现良好。我们现在升级到Excel 2010,遇到了一些问题。经过故障排除,似乎如果关闭PowerPivot COM Add-In,则该进程能够像以前一样运行而没有任何问题。虽然我正在寻找确切的原因,但我想看看是否可以仅针对我的应用程序关闭该Add-In。我这样加载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 Add-In之后,我需要防止它在我的应用程序中加载Excel对象。欢迎任何帮助或建议。
谢谢。
2个回答

2
我不知道是否有一种“优美”的方法来实现这个,但一种“粗暴”的方法是,在启动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 插件。

谢谢你的建议,但你说得对,那太极端了。这是为内部应用程序而设计的,但我还是有些犹豫是否更改用户注册表。 - sinDizzy
我居然没想到那个。让我试一下。 - sinDizzy
在 Excel 2007 和 Excel 2010 中测试通过,非常好用。我在各个地方都找不到这种对象。感谢您的帮助。 - sinDizzy

0
我有同样的问题,但有一个更简单的解决方案。我只需要从Excel中关闭Powerpivot插件(取消勾选),然后再重新启用它...问题就解决了。

2
嗯,是的,那是显而易见的答案。整个想法在于它是自动化的,最终用户不必手动执行任何操作。 - sinDizzy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接