Загрузка надстроек, когда Excel создается программно - PullRequest
11 голосов
/ 17 октября 2008

Я пытаюсь создать новый экземпляр Excel, используя VBA, используя:

Set XlApp = New Excel.Application

Проблема в том, что этот новый экземпляр Excel не загружает все надстройки, которые загружаются при обычном открытии Excel ... Есть ли что-либо в объекте приложения Excel для загрузки во всех заданных пользователем надстройках?

Я не пытаюсь загрузить определенную надстройку, а скорее заставить новое приложение Excel вести себя так, как будто пользователь сам открыл его, поэтому я действительно ищу список всех выбранных пользователем надстроек которые обычно загружаются при открытии Excel.

Ответы [ 4 ]

24 голосов
/ 30 апреля 2009

Я снова рассмотрел эту проблему, и в коллекции 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
5 голосов
/ 18 октября 2008

Использование CreateObject("Excel.Application") будет иметь тот же результат, что и использование New Excel.Application, к сожалению.

Вам нужно будет отдельно загрузить нужные надстройки по пути и имени файла, используя метод Application.Addins.Add(string fileName).

2 голосов
/ 06 июня 2013

Я оставляю этот ответ здесь для всех, кто сталкивался с этой проблемой, но использует JavaScript.

Немного предыстории ... В моей компании у нас есть стороннее веб-приложение, которое использует JavaScript для запуска Excel и создания электронной таблицы на лету. У нас также есть надстройка для 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) { }
}
0 голосов
/ 18 октября 2008

Попробуйте:

Set XlApp = CreateObject("Excel.Application")

...