2015-03-24 4 views
0

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

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: Invoke of: Run Источник: Microsoft Excel Описание: Не удается запустить макрос «Pnl_Cube_Template.xlsmRetrieve». Макрос может быть недоступен в этой книге или все макросы могут быть отключены.

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

enter image description here

+0

Ну, у вас есть макрос в книге под названием 'Pnl_Cube_Template.xlsmRetrieve'? – immibis

+0

@immibis: Да. Я делаю, добавил снимок экрана. – Vinod

+0

Я вижу макрос, называемый 'Retrieve', а не макрос, называемый' Pnl_Cube_Template.xlsmRetrieve'. – immibis

ответ

0

Изменить код

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

и

macroName = "Retrieve" 

без скобок

Смежные вопросы