Chargement de compléments lorsque Excel est instancié par programme
-
03-07-2019 - |
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.
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")