Джейкоб: вызов VBA не удался

У меня есть Excel VBA, написанный и пытающийся вызвать его из java (используя Jacob), как показано ниже:

public void PnlCubeExcelMacroCallAndRefresh() {
  ComThread.InitSTA();
  File file=new File("C:\\Users\\Pnl_Cube_Template.xlsm");
 // String macroName="Retrieve()";
   String macroName="Retrieve()";

    final ActiveXComponent excel = new ActiveXComponent("Excel.Application");

    try {
        // This will open the excel if the property is set to true
        excel.setProperty("Visible", new Variant(true));
        final Dispatch workbooks = excel.getProperty("Workbooks").getDispatch();
        //String    eventSink = null ;
        int id = Dispatch.get(workbooks, "Count").getInt();
        System.out.println("le nbre" + id);
        Dispatch.call(workbooks, "Add");
        Dispatch workBook = Dispatch.call(workbooks, "Open", file.getAbsolutePath()).toDispatch();

        Variant V1 = new Variant( file.getName() + macroName);
        // Calls the macro
        final Variant result = Dispatch.call(excel, "Run", V1);

        // Saves and closes
        //Dispatch.call(workBook, "Save");

        com.jacob.com.Variant f = new com.jacob.com.Variant(true);
        //  Dispatch.call(workBook, "Close", f);

    } catch (Exception e) {
        e.printStackTrace();
    } finally {

        excel.invoke("Quit", new Variant[0]);
        ComThread.Release();
    }
}

Но когда я запускаю эту ошибку ниже, возникает ошибка:

com.jacob.com.ComFailException: Вызов: Источник запуска: Microsoft Excel Описание: Не удается запустить макрос «Pnl_Cube_Template.xlsmRetrieve». Макрос может быть недоступен в этой книге или все макросы могут быть отключены.

Я также пытался изменить настройки центра управления безопасностью, все та же проблема.

введите здесь описание изображения


person Vinod    schedule 24.03.2015    source источник
comment
Хорошо, у вас есть макрос в книге под названием Pnl_Cube_Template.xlsmRetrieve?   -  person user253751    schedule 24.03.2015
comment
@immibis: Да .. Да, добавил скриншот.   -  person Vinod    schedule 24.03.2015
comment
Я вижу макрос с именем Retrieve, а не макрос с именем Pnl_Cube_Template.xlsmRetrieve.   -  person user253751    schedule 24.03.2015
comment
@ Винод, ты уверен, что это имя правильное? Может быть, попробовать просто Восстановить.   -  person Andy Turner    schedule 24.03.2015
comment
@immibis: я изменил вариант на просто имя макроса, теперь он работает до 3-й строки макроса, а затем я получаю ошибку времени выполнения: не удается запустить макрос «EssMenuRetrieve».   -  person Vinod    schedule 24.03.2015
comment
@AndyTurner: Спасибо, сделал это   -  person Vinod    schedule 24.03.2015
comment
Я могу запустить макрос через excel, когда я вызываю макрос с помощью вышеуказанного метода, он выдает ошибку времени выполнения.   -  person Vinod    schedule 24.03.2015


Ответы (1)


Измените свой код

Variant V1 = new Variant( file.getName() + "!"+macroName);

и

macroName = "Retrieve" 

без скобок

person Francisco Euán López    schedule 30.06.2016