Запуск личного кода VBA с Джейкобом на Java

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

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

person Safa HAMMOUDI    schedule 27.04.2018    source источник
comment
Покажите все соответствующие части вашего кода (узнайте, как создать минимальный воспроизводимый пример). Особенно там, где вы объявляете свои переменные. И разве не должно быть = в начале в Evaluate("TEXT, например, Evaluate("=TEXT?   -  person Pᴇʜ    schedule 27.04.2018


Ответы (1)


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

Если это не помогает, посмотрите, поможет ли это.

person CCM    schedule 27.04.2018
comment
Спасибо за ответ, но я уже пробовал это! но теперь я вижу что-то новое, когда запускаю свой макрос из 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, как я могу решить эту проблему? - person Safa HAMMOUDI; 30.04.2018
comment
спасибо за всех, но я решил проблему, я заменил функцию в vba этой строкой: ws_c.Range (c7) = Worksheets (Abs) .Range (a1) .Value - Weekday (Worksheets (Abs) .Range (a1) .Value, vbUseSystemDayOfWeek) + 1. - person Safa HAMMOUDI; 30.04.2018