2008-10-17 16 views
10

Estoy intentando crear una nueva instancia de Excel con VBA usando:Carga de complementos de Excel cuando se crea una instancia mediante programación

Set XlApp = New Excel.Application

El problema es que esta nueva instancia de Excel no se carga todos los complementos que se cargar cuando abro Excel normalmente ... ¿Hay algo en el objeto Aplicación de Excel para cargar en todos los complementos especificados por el usuario?

No estoy intentando cargar un complemento específico, sino que hago que la nueva aplicación de Excel se comporte como si el usuario la hubiera abierto, así que estoy buscando una lista de todos los complementos seleccionados por el usuario ins que generalmente se cargan al abrir Excel.

Respuesta

24

Volví a examinar este problema y la colección Application.Addins parece tener todos los complementos enumerados en el menú Herramientas-> Complementos, con un valor booleano que indica si se ha instalado o no un complemento. Entonces, lo que parece funcionar para mí ahora es recorrer todos los complementos y si .Installed = true, configuro .Installed a False y de nuevo a True, y eso parece cargar mis complementos correctamente.

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 
+0

+1 en su propia pregunta! Algo así como hacer trampa. ;-) Sin embargo, es una buena respuesta, esto definitivamente se agrega al cuerpo de conocimiento. –

+0

Sí, esto es una solución para el problema "AddIns no cargado" – A9S6

+0

Ha estado molesto por demasiado tiempo. Buena respuesta. – JDunkerley

-1

Probar:

Set XlApp = CreateObject("Excel.Application")

5

Usando CreateObject("Excel.Application") tendría el mismo resultado que utilizar New Excel.Application, por desgracia.

Tendrá que cargar los complementos que necesita de forma individual por la ruta del archivo & nombre utilizando el método Application.Addins.Add(string fileName).

+0

Esto es muy útil para mi situación, cuando estoy lanzando Excel y quiero un complemento que no está normalmente cargado a estar activo. – 4AM

2

Estoy dejando esta respuesta aquí para cualquier otra persona que haya tenido este problema, pero usando JavaScript.

Un poco de historia ... En mi compañía tenemos una aplicación web de terceros que usa JavaScript para iniciar Excel y generar una hoja de cálculo sobre la marcha. También tenemos un complemento de Excel que anula el comportamiento del botón Guardar. El complemento le brinda la opción de guardar el archivo localmente o en nuestro sistema de administración de documentos en línea.

Después de actualizar a Windows 7 y Office 2010, notamos un problema con nuestra aplicación web generadora de hojas de cálculo. Cuando JavaScript generaba una hoja de cálculo en Excel, de repente el botón Guardar ya no funcionaba. Haría clic en guardar y no pasó nada.

Usando las otras respuestas aquí pude construir una solución en JavaScript. Básicamente, creamos el objeto de la Aplicación de Excel en la memoria, luego recargamos un complemento específico para recuperar el comportamiento de nuestro botón guardar. Aquí hay una versión simplificada de nuestra solución:

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) { } 
} 
Cuestiones relacionadas