以编程方式实例化Excel时加载加载项

以编程方式实例化Excel时加载加载项,excel,vba,excel-addins,Excel,Vba,Excel Addins,我正在尝试使用VBA创建Excel的新实例,方法是: Set XlApp=New Excel.Application 问题是,当我正常打开Excel时,这个新的Excel实例并没有加载所有加载的加载项……Excel应用程序对象中是否有任何内容可以加载到所有用户指定的加载项中 我不是要加载特定的外接程序,而是要让新的Excel应用程序表现得像用户自己打开它一样,因此我实际上是在寻找一个列表,其中列出了用户选择的所有外接程序,这些外接程序通常在打开Excel时加载。请尝试: 不幸的是,使用Crea

我正在尝试使用VBA创建Excel的新实例,方法是:

Set XlApp=New Excel.Application
问题是,当我正常打开Excel时,这个新的Excel实例并没有加载所有加载的加载项……Excel应用程序对象中是否有任何内容可以加载到所有用户指定的加载项中

我不是要加载特定的外接程序,而是要让新的Excel应用程序表现得像用户自己打开它一样,因此我实际上是在寻找一个列表,其中列出了用户选择的所有外接程序,这些外接程序通常在打开Excel时加载。

请尝试:

不幸的是,使用
CreateObject(“Excel.Application”)
设置XlApp=CreateObject(“Excel.Application”)将产生与使用
新的Excel.Application
相同的结果


您必须使用
应用程序.Addins.Add(string fileName)
方法按文件路径和名称分别加载所需的加载项。

我再次研究了这个问题,应用程序.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

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

有点背景。。。在我的公司,我们有一个第三方web应用程序,它使用JavaScript启动Excel并动态生成电子表格。我们还有一个Excel外接程序,可以覆盖“保存”按钮的行为。外接程序使您可以选择将文件保存在本地或在线文档管理系统中

升级到Windows 7和Office 2010后,我们注意到生成电子表格的web应用程序出现问题。当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) { }
}

+1关于你自己的问题!有点像作弊答案很好,这无疑增加了知识体系。是的,这是一个解决“加载项未加载”问题的方法。这个问题已经困扰了太久。回答得好。我如何使用这个功能?当我在工作表中插入此项时,我得到一个值错误。@如果您只是传入正在使用的excel应用程序对象,则返回值错误。我之所以写这个函数,是因为我的应用程序启动Excel的方式有两种,这取决于我们所做的工作,所以我在启动Excel应用程序时只调用这个函数。这对我的情况非常有帮助,因为我正在启动Excel,我希望一个通常不加载的加载项处于活动状态。