2

Jacobを使用して、ExcelファイルのマクロにあるVB関数を呼び出しています。

これが私のコードです:[ファイルとvb関数名をパラメーターとして以下のjavaメソッドに渡します]

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


        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();
        //new DispatchEvents(sourceOfEvent, eventSink, progId)

        //new DispatchEvents(workBook, w , "Excel.Application");
        //System.out.println("le résultat"+eventSink);      

        //d.safeRelease();
        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();
    }
}

コードは正常に実行されますが、私の問題は、命令を呼び出したくないということです

Dispatch workBook = Dispatch.call(workbooks, "Open", file.getAbsolutePath()).toDispatch();

これにより、デフォルトのマクロが実行する内容(入力フィールドを持つインターフェイス)が表示されます。

Excelファイルを「開く」ことなくVB関数を「実行」する方法はありますか?

ありがとう。

4

1 に答える 1

2

ファイルを開かずにExcelブックでVBA関数を実行する方法はありません...

もちろん、Excelアプリケーションオブジェクトのイベントを無効にすることで、AUto_openマクロの実行を防ぐことができます。

Excel VBAでは、次のように実行します。

Application.enableevents=false

(多くの場合、ScreenUpdatingやDisplayAlertsなどの他の設定と組み合わせて)

Javaでは多分あなたは使用します:

excel.setProperty("EnableEvents", new Variant(false));

私はあなたを正しい方向に向けることを願っています(笑、ブームブーム!)

フィリップ

于 2013-03-25T15:22:22.097 に答える