Выполнение персонального кода VBA с Jacob в Java - PullRequest
0 голосов
/ 27 апреля 2018

Прежде чем задать вопрос, я много искал, но не могу найти ответ. Фактически мне удалось запустить пользовательский макрос из 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 () As Date Dim ws_c As Worksheet Дим Анни как целое число, семя как целое число, NumJour как целое число

semaine = Формат (рабочие таблицы ("Abs"). Диапазон ("a1"). Значение, "ww", vbMonday, vbFirstFourDays)

Annee = Год (рабочие листы ("Abs"). Диапазон ("a1"). Значение) 'semaine = 16

NumJour = 0 '0 = Лунди, 1 = Марди ...

Det_Lundi = Evaluate ("TEXT (DATE (" & Annee & ", 1,3) -WEEKDAY (DATE (" & Annee & ", 1,3)) - 5+ (7 *" & semaine & ") + "& NumJour &", "" дд / мм / гггг "") ")

Функция завершения

также я положил свой метод в 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 голосов
/ 27 апреля 2018

Возможно, ваша проблема связана с датой внутри, Excel понимает только английский, поэтому dd/mm/yyyy может быть mm/dd/yyyy. Хотя это всего лишь предположение.

Если это не поможет, посмотрите, может ли это помочь.

...