【问题标题】:Running Personal VBA code with Jacob in Java在 Java 中使用 Jacob 运行个人 VBA 代码
【发布时间】:2018-04-27 12:02:14
【问题描述】:

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

谁能帮帮我?

我把导致错误的代码行放在这里:

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

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

感谢您的回答。 我真的不同意,因为当我在这里手动运行它时它起作用了我发布了我的 VBA 代码:

函数 Det_Lundi() 作为日期 将 ws_c 调暗为工作表 Dim Annee 作为整数,semaine 作为整数,NumJour 作为整数

semaine = Format(Worksheets("Abs").Range("a1").Value, "ww", vbMonday, vbFirstFourDays)

Annee = Year(Worksheets("Abs").Range("a1").Value) 'semaine = 16

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

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

结束函数

我也把我的方法放在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();
}
}

【问题讨论】:

  • 请显示代码的所有相关部分(看看如何构建minimal reproducible example)。特别是在您声明变量的地方。并且在Evaluate("TEXT 的开头不应该有= 就像Evaluate("=TEXT 一样吗?

标签: java vba excel jacob


【解决方案1】:

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

如果这没有帮助,请查看this 是否可以提供帮助。

【讨论】:

  • 感谢您的回答,但我已经尝试过了!但现在当我从 Eclipse 运行宏时我可以看到一个新事物,并生成错误结果: Det_Lundi = Evaluate("TEXT(DATE(" & Annee & ",1,3)-WEEKDAY(DATE(" & Annee) & ",1,3))-5+(7*" & semaine & ")+" & NumJour & ",""dd/mm/yyyy"")") 显示 Det_Lundi 的格式为 00:00 :00 我该如何解决这个问题?
  • 感谢每一个人,但我解决了问题,我用这一行替换了 vba 中的函数:ws_c.Range("c7") = Worksheets("Abs").Range("a1") .Value - Weekday(Worksheets("Abs").Range("a1").Value, vbUseSystemDayOfWeek) + 1
猜你喜欢
  • 1970-01-01
  • 2014-07-25
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多