Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

### Ошибка при выполнении макроса с Solver в Excel, запущенном через OLE из Delphi

Delphi , Технологии , OLE

Ошибка при выполнении макроса с Solver в Excel, запущенном через OLE из Delphi

Пользователи, работающие с Excel и макросами VBA, иногда сталкиваются с проблемами, когда пытаются автоматизировать работу Excel через OLE из других приложений, например, из Delphi. Одной из таких проблем является ошибка при выполнении макроса, который использует надстройки, такие как Solver. В данном руководстве мы рассмотрим, как решить эту проблему, используя примеры кода на Object Pascal (Delphi).

Описание проблемы

Пользователь столкнулся с ошибкой при попытке запустить макрос в Excel, который использует надстройку Solver, когда Excel запускается через OLE-объект из приложения Delphi. То же самое происходит и при использовании VBScript. Ошибка возникает, когда выполняется метод Run объекта Excel, и указывает на проблему с названием макроса или его местоположением.

Контекст и решение проблемы

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

Пример решения

В вашем коде на Delphi перед вызовом макроса добавьте строку для открытия надстройки Solver:

Excel.Workbooks.Open(Excel.LibraryPath + '\Solver\Solver.xlam');

Эту строку следует добавить перед открытием основного рабочего листа:

Excel.Workbooks.Open('c:\Local Data\filename.xlsm');

Объяснение

Это поведение описано в документации Microsoft: http://support.microsoft.com/kb/213489

Подтвержденный ответ

Решение в том, чтобы загрузить надстройки вручную перед выполнением операций, которые от них зависят. Это необходимо, когда Excel запущен через OLE-автоматизацию, так как автоматически загружаемые надстройки в таких случаях не работают.

Пример кода на Delphi

uses ComObj, ActiveX;

// Инициализация COM-библиотеки
CoInitialize(nil);

// Создание объекта Excel
var
    Excel: OleVariant;
begin
    Excel := CreateOleObject('Excel.Application');
    try
        // Загрузка надстройки Solver
        Excel.Workbooks.Open(Excel.LibraryPath + '\Solver\Solver.xlam');

        // Открытие рабочей книги
        Excel.Workbooks.Open('c:\Local Data\filename.xlsm');
        Excel.Visible := True; // Показать Excel для демонстрации

        // Выбор листа
        var
            WkSheet: OleVariant;
        begin
            WkSheet := Excel.Worksheets.Item['6 Units'];
            WkSheet.Select;
        end;

        // Вызов макроса
        Excel.Run('sheet2.SolveCCD6');
        // Здесь должен быть код для обработки возможных ошибок

    finally
        // Освобождение ресурсов
        Excel.Quit;
        CoFreeUnusedLibraries;
    end;
end;

Заключение

При работе с Excel и макросами через OLE-автоматизацию важно помнить о необходимости ручного загрузки надстроек, которые используются макросами. Это позволит избежать ошибок, связанных с недоступностью надстроек.

Создано по материалам из источника по ссылке.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OLE ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 16:34:03/0.00337815284729/0