Question

J'essaie de créer une nouvelle instance d'Excel à l'aide de VBA à l'aide de:

Définir XlApp = New Excel.Application

Le problème est que cette nouvelle instance d'Excel ne charge pas tous les compléments chargés lorsque j'ouvre Excel normalement ... Y a-t-il quelque chose dans l'objet Application Excel à charger dans tous les compléments spécifiés par l'utilisateur?

Je n'essaie pas de charger un complément spécifique, mais plutôt de faire en sorte que la nouvelle application Excel se comporte comme si l'utilisateur l'ouvrait elle-même. Je recherche donc vraiment la liste de tous les compléments sélectionnés par l'utilisateur. qui se charge habituellement lors de l'ouverture d'Excel.

Était-ce utile?

La solution

J'ai examiné à nouveau ce problème et la collection Application.Addins semble avoir tous les compléments répertoriés dans le menu Outils-> Modules complémentaires, avec une valeur booléenne indiquant si un complément est installé ou non. Donc, ce qui semble fonctionner pour moi à présent, c’est de parcourir tous les addins. Si .Installed = true, je règle alors .Installed sur False, puis sur True, et cela semble charger correctement mes addins.

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

Autres conseils

L'utilisation de CreateObject ("Excel.Application") aurait le même résultat que l'utilisation de Nouvel Excel.Application , malheureusement.

Vous devrez charger les compléments dont vous avez besoin individuellement par chemin de fichier & amp; nom en utilisant la méthode Application.Addins.Add (string fileName) .

Je laisse cette réponse ici à toute personne ayant rencontré ce problème, mais utilisant JavaScript.

Un peu d’arrière-plan ... Dans mon entreprise, nous avons une application Web tierce utilisant JavaScript pour lancer Excel et générer un tableur à la volée. Nous avons également un complément Excel qui annule le comportement du bouton Enregistrer. Ce complément vous permet d’enregistrer le fichier localement ou dans notre système de gestion de documents en ligne.

Après la mise à niveau vers Windows 7 et Office 2010, nous avons constaté un problème avec notre application Web générant des feuilles de calcul. Lorsque JavaScript a généré une feuille de calcul dans Excel, le bouton Enregistrer n'a plus fonctionné. Vous cliquez sur Enregistrer et rien ne se passe.

En utilisant les autres réponses ici, j'ai pu construire une solution en JavaScript. Essentiellement, nous créerions l'objet Application Excel en mémoire, puis rechargerions un complément spécifique pour obtenir le comportement du bouton de sauvegarde. Voici une version simplifiée de notre correctif:

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

Essayez:

Définissez XlApp = CreateObject ("Excel.Application")

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top