Vba Excel:更改加载项引用而不打开文件

Vba Excel:更改加载项引用而不打开文件,vba,excel,Vba,Excel,我有几个(如在100年代)使用addin(我们称之为Addin2003)的电子表格。由于要迁移到新版本的Excel,我需要其中一些电子表格来使用新的加载项(我们称之为Addin2010) 是否有一种简单的方法可以在不打开电子表格的情况下检查和更改这些电子表格所使用的引用 比如(伪代码): 编辑 为了更清楚,Excel 2003和2010没有加载相同的加载项,因此我想更改一些依赖2003加载项的电子表格,使它们使用2010加载项。换句话说,这相当于打开工作簿、打开VBA编辑器、转到“工具/引用”菜

我有几个(如在100年代)使用addin(我们称之为Addin2003)的电子表格。由于要迁移到新版本的Excel,我需要其中一些电子表格来使用新的加载项(我们称之为Addin2010)

是否有一种简单的方法可以在不打开电子表格的情况下检查和更改这些电子表格所使用的引用

比如(伪代码):

编辑

为了更清楚,Excel 2003和2010没有加载相同的加载项,因此我想更改一些依赖2003加载项的电子表格,使它们使用2010加载项。换句话说,这相当于打开工作簿、打开VBA编辑器、转到“工具/引用”菜单并将引用从Addin 2003(标记为缺少)更改为Addin 2010。 如果我在Excel 2010中打开其中一个工作簿(它没有2003加载项),我会收到各种错误,因为Excel找不到2003加载项。 这就是为什么我认为不打开工作簿来更改参考资料可能更容易

最后一句话


这似乎是不可能做到的,我将不得不物理打开文件来更改引用。谢谢大家。

您可能想做类似的事情:

Sub ChangeAddins()

    Dim oAddin As AddIn
    Dim sFullNameOfAddin As String, sThisAddinName As String

    sFullNameOfAddin = ThisWorkbook.Path & "\" & "NewAddin.xlam"
    'Add in name of xla
    sThisAddinName = "Add-in Name"

    If Application.Version > 11 Then
        Set oAddin = AddIns.Add(sFullNameOfAddin, True)
        oAddin.Installed = True
        For Each oAddin In Application.AddIns
            If oAddin.Name = sThisAddinName Then
                If oAddin.Installed Then
                    oAddin.Installed = False
                End If
            End If
        Next oAddin
    End If

End Sub

在回答另一个问题时,我对400本2.4Mb Excel工作簿的打开和关闭进行了计时。耗时188秒。对于一次性任务,我认为每400本工作簿3分钟的开销不值得担心。我会尝试一下,但2个版本的Excel中没有安装这2个加载项。如果我在2003年打开工作簿,它与2010加载项不一样,反之亦然……因此,您有一个Excel 2003宏,用于打开工作簿并删除旧的加载项,还有一个Excel 2010宏,用于打开工作簿并添加新的加载项。我还没有写任何东西,只是为了避免可能会更改工作簿链接到的引用不必打开它们…@assylias请你澄清一下,这些是在参考资料部分还是addin的部分中找到的,也不想在游行中下雨,但为了更改引用/加载项,无法避免打开Excel文件,但打开和关闭文件可以通过VB完成,因此不需要手动操作。这仍然需要打开工作簿。但是谢谢你的代码。我不知道不打开工作簿怎么做,你真的可以打开一个excel应用程序的隐藏实例,然后执行它。您不需要打开实际的工作簿。您也可以只在工作簿的open事件上实现代码,然后让新外接程序检查旧外接程序是否仍然存在,如果仍然存在,则删除它。您可能可以让工作簿自行删除,但不确定是否要删除该工作簿。
Sub ChangeAddins()

    Dim oAddin As AddIn
    Dim sFullNameOfAddin As String, sThisAddinName As String

    sFullNameOfAddin = ThisWorkbook.Path & "\" & "NewAddin.xlam"
    'Add in name of xla
    sThisAddinName = "Add-in Name"

    If Application.Version > 11 Then
        Set oAddin = AddIns.Add(sFullNameOfAddin, True)
        oAddin.Installed = True
        For Each oAddin In Application.AddIns
            If oAddin.Name = sThisAddinName Then
                If oAddin.Installed Then
                    oAddin.Installed = False
                End If
            End If
        Next oAddin
    End If

End Sub