如何使用Jacob从java代码中禁用VB6 MsgBox

kha*_*ane 5 java excel vba excel-vba jacob

我正在使用JACOB API从VB宏调用一些Sub.我想阻止这个宏生成的MsgBox.

这是我打开宏XXXX.xls并运行包含一些MsgBox的子traiteOT的代码.

    `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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

`

Our*_*nas 1

除非您注释执行该函数的代码,或者避免以其他方式调用该代码,否则您无法阻止消息框。

如果确实需要,您可以将 VBA 代码读入变量,去掉 Msgbox 函数调用,然后执行它(使用 Visual Basic For Applications Extensibility)

最好只编写一个没有工作簿中的 MsgBox 的特殊函数