5

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

`

4

1 に答える 1

1

関数を実行するコードをコメントしない限り、msgbox をブロックすることはできません。または、そのコードを他の方法で呼び出すことは避けてください。

本当に必要な場合は、VBA コードを変数に読み込み、Msgbox 関数呼び出しを取り除いてから実行できます (Visual Basic For Applications Extensibility を使用)。

ワークブックに MsgBox を使用せずに特別な関数を記述するだけのほうがよい

于 2013-03-25T17:02:47.807 に答える