Как отключить VB6 MsgBox из java-кода с помощью Jacob

Я использую JACOB API для вызова некоторого макроса Sub из VB. Я хотел бы заблокировать MsgBox, созданный этим макросом.

Это мой код для открытия макроса XXXX.xls и запуска подпрограммы OT, которая содержит некоторый MsgBox.

    `private static void callExcelMacro(File file, String macroName) {
        ComThread.InitSTA();

        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").toDispatch(); 
            //String    eventSink = null ;

            Dispatch.call(workbooks,"Add");
         Dispatch workBook = Dispatch.call(workbooks,"Open", file.getAbsolutePath()).toDispatch();
            ExcelEventHandler w = new ExcelEventHandler();

            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();
        }
    }

    public static void main(String[] args) {
        ExcelMacroTest emt = null;
        try {

            final File file = new File("D:XXXXXXXX.xls");
            final String macroName = "!TraiteOT";
            callExcelMacro(file, macroName);

        } finally {
            if (emt != null) {
                emt.quit();
            }
        }
    }
}

`


person khaled Rihane    schedule 24.03.2013    source источник


Ответы (1)


вы не можете заблокировать msgbox, если вы не прокомментируете код, который выполняет функцию ИЛИ, избегайте вызова этого кода каким-либо другим способом.

Если вам действительно нужно, вы можете прочитать код VBA в переменную, удалить вызов функции Msgbox, а затем выполнить его (используя Visual Basic для расширяемости приложений)

лучше просто написать специальную функцию без MsgBox в книге

person Our Man in Bananas    schedule 25.03.2013
comment
Спасибо Филипп за ответ. Но я хотел бы вызвать подпрограмму из VB Macro без изменения кода этого макроса. Тогда не могли бы вы подробнее рассказать о решении с использованием Visual Basic For Applications Extensibility? - person khaled Rihane; 26.03.2013
comment
ну, в основном это означает, что вы программно создаете процедуру так, как вы хотите ее выполнить, а затем выполняете ее... читайте на Ozgrid и программно-добавить-макрос-в-Excel - person Our Man in Bananas; 26.03.2013
comment
Эта процедура уже реализована в макросе, и я хочу воспользоваться ею. Затем, если он будет запущен, он может отображать msgBox, который блокирует выполнение процедуры. - person khaled Rihane; 26.03.2013
comment
нет простого способа заблокировать функцию Messagebox. Вам пришлось бы копировать весь код без вызова функции Msgbox. - person Our Man in Bananas; 26.03.2013
comment
Могу ли я получить доступ к коду макроса и прокомментировать строки, содержащие этот MsgBox из Java (Джейкоб). - person khaled Rihane; 27.03.2013
comment
Затем мы используем jacob для запуска VBscript, который содержит код расширения Excel VBA. - person khaled Rihane; 27.03.2013
comment
да, НАЖМИТЕ ЗДЕСЬ: Расширяемость Excel VBA - person Our Man in Bananas; 27.03.2013