使用Java中的Jacob运行个人VBA代码

时间:2018-04-27 12:02:15

标签: java vba excel-vba jacob excel

在问我的问题之前,我搜索了很多,但我找不到答案。实际上,我设法从Java运行自定义宏但在完成之前它向我显示一条错误消息,说明在VBA中的一行代码上类型不匹配,当我手动运行它时它完美地工作。

有人可以帮助我吗?

you find here the message error

我在这里输入导致错误的代码行:

Det_Lundi = Evaluate("TEXT(DATE(" & Annee & ",1,3)-WEEKDAY(DATE(" & Annee & ",1,3))-5+(7*" & semaine & ")+" & NumJour & ",""dd/mm/yyyy"")")

正如我所说,如果我手动运行它也能完美地运行我测试我在java中编写的运行宏的方法,并且它与其他宏一起工作唯一的问题就是这行。

感谢您的回答。 我真的不同意因为我在这里手动运行它是有效的我发布了我的VBA代码:

函数Det_Lundi()作为日期 Dim ws_c作为工作表 Dim Annee As Integer,semaine As Integer,NumJour As Integer

semaine =格式(工作表(" Abs")。范​​围(" a1")。值," ww",vbMonday,vbFirstFourDays)

Annee = Year(工作表(" Abs")。范​​围(" a1")。值) ' semaine = 16

NumJour = 0' 0 = Lundi,1 = Mardi ......

Det_Lundi =评估(" TEXT(日期("& Annee&",1,3)-WEEKDAY(日期("& Annee&&#34) ;,1,3)) - 5+(7 *"& semaine&")+"& NumJour&",""日/月/年"")&#34)

结束功能

我也将我的方法放在java中:

public static void UpdateFile(final File file, final 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();
    final Dispatch workBook = Dispatch.call(workbooks, "Open",
            file.getAbsolutePath()).toDispatch();

    // Calls the macro
    final com.jacob.com.Variant result = Dispatch.call(excel, "Run", macroName);

    // 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");
    ComThread.Release();
}
}

1 个答案:

答案 0 :(得分:0)

您的问题可能是内部日期,Excel只能识别英语,因此dd/mm/yyyy可能实际上是mm/dd/yyyy。虽然这只是猜测。

如果这没有帮助,请查看this是否有帮助。