5

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

这是我打开宏 XXXX.xls 并运行包含一些 MsgBox 的 sub 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();
            }
        }
    }
}

`

4

1 回答 1

1

除非您注释执行函数的代码,否则您不能阻止 msgbox,或者避免以其他方式调用该代码。

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

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

于 2013-03-25T17:02:47.807 回答