【问题标题】:Loading addins when Excel is instantiated programmatically以编程方式实例化 Excel 时加载插件
【发布时间】:2010-09-17 19:43:40
【问题描述】:

我正在尝试使用 VBA 创建一个新的 Excel 实例:

Set XlApp = New Excel.Application

问题是这个新的 Excel 实例没有加载我正常打开 Excel 时加载的所有插件...Excel 应用程序对象中是否有任何东西可以加载所有用户指定的插件?

我不是试图加载特定的加载项,而是让新的 Excel 应用程序的行为就像用户自己打开它一样,所以我真的在寻找所有用户选择的加载项的列表通常在打开 Excel 时加载。

【问题讨论】:

    标签: excel vba excel-addins


    【解决方案1】:

    我再次查看了这个问题,Application.Addins 集合似乎在“工具”->“插件”菜单中列出了所有插件,并带有一个布尔值,说明是否安装了插件。所以现在似乎对我有用的是遍历所有插件,如果 .Installed = true 然后我将 .Installed 设置为 False 并返回 True,这似乎可以正确加载我的插件。

    Function ReloadXLAddins(TheXLApp As Excel.Application) As Boolean
    
        Dim CurrAddin As Excel.AddIn
    
        For Each CurrAddin In TheXLApp.AddIns
            If CurrAddin.Installed Then
                CurrAddin.Installed = False
                CurrAddin.Installed = True
            End If
        Next CurrAddin
    
    End Function
    

    【讨论】:

    • +1 就您自己的问题!有点像作弊。 ;-) 不错的答案,这肯定会增加知识体系。
    • 是的,这是“未加载插件”问题的解决方法
    • 被这个烦了太久了。很好的答案。
    • 如何使用此功能?将其插入工作表时出现 VALUE 错误。
    • @OligarchicTendencies 您只需传入您正在使用的 excel 应用程序对象。我把它写成一个函数,因为我的应用程序根据我们正在做的事情以几种不同的方式启动 Excel,所以我只是在启动 Excel 应用程序时调用它
    【解决方案2】:

    不幸的是,使用CreateObject("Excel.Application") 与使用New Excel.Application 的结果相同。

    您必须使用Application.Addins.Add(string fileName) 方法按文件路径和名称单独加载您需要的插件。

    【讨论】:

    • 这对我的情况非常有帮助,我正在启动 Excel 并且我想要一个通常不会加载的加载项处于活动状态。
    【解决方案3】:

    我将把这个答案留给其他遇到此问题但使用 JavaScript 的人。

    一点背景知识... 在我的公司,我们有一个使用 JavaScript 启动 Excel 并动态生成电子表格的 3rd 方网络应用程序。我们还有一个 Excel 加载项,它覆盖了“保存”按钮的行为。该插件让您可以选择将文件保存在本地或我们的在线文档管理系统中。

    升级到 Windows 7 和 Office 2010 后,我们注意到生成电子表格的网络应用存在问题。当 JavaScript 在 Excel 中生成电子表格时,突然保存按钮不再起作用。你会点击保存,但什么也没发生。

    使用此处的其他答案,我能够在 JavaScript 中构建一个解决方案。本质上,我们将在内存中创建 Excel 应用程序对象,然后重新加载特定的加载项以恢复我们的保存按钮行为。这是我们修复的简化版本:

    function GenerateSpreadsheet()
    {
        var ExcelApp = getExcel();
        if (ExcelApp == null){ return; }
    
        reloadAddIn(ExcelApp);
    
        ExcelApp.WorkBooks.Add;
        ExcelApp.Visible = true;
        sheet = ExcelApp.ActiveSheet;
    
        var now = new Date();
        ExcelApp.Cells(1,1).value = 'This is an auto-generated spreadsheet, created using Javascript and ActiveX in Internet Explorer';
    
        ExcelApp.ActiveSheet.Columns("A:IV").EntireColumn.AutoFit; 
        ExcelApp.ActiveSheet.Rows("1:65536").EntireRow.AutoFit;
        ExcelApp.ActiveSheet.Range("A1").Select;
    
        ExcelApp = null;
    }
    
    function getExcel() {
       try {
           return new ActiveXObject("Excel.Application");
       } catch(e) {
           alert("Unable to open Excel. Please check your security settings.");
           return null;
       }
    }
    
    function reloadAddIn(ExcelApp) {
        // Fixes problem with save button not working in Excel,
        // by reloading the add-in responsible for the custom save button behavior
        try {
            ExcelApp.AddIns2.Item("AddInName").Installed = false;
            ExcelApp.AddIns2.Item("AddInName").Installed = true;
        } catch (e) { }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 2013-08-11
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多