У меня есть макрос VBA для ежедневного извлечения некоторых данных. Макрос не имеет интерактивных компонентов, таких как окно сообщения, настраиваемые поля ввода или поле ввода. Он не ожидает какого-либо пользовательского ввода, он только загружает некоторые данные из БД и генерирует некоторые CSV-файлы.

Моя задача - автоматизировать его извлечение с помощью Планировщика задач Windows.

Я попытался создать приложение VBS, чтобы запускать его, как здесь:

https://stackoverflow.com/questions/58139154/running-an-excel-macro-from-task-scheduler

Это не сработало.

Я создал собственное приложение на C # для его запуска, но оно не сработало.

На этом этапе я застрял, потому что приложение VBS и приложение C # запускают макрос правильно, если я запускаю его вручную .

Я пробовал следующие комбинации:

  • Запускать только тогда, когда пользователь вошел в систему. -> Успешно .
  • Запускается независимо от того, вошел ли пользователь в систему или нет. -> Не удалось .
  • Запускается независимо от того, вошел ли пользователь в систему или нет. Кроме того, бегайте с наивысшими привилегиями. -> Не удалось .
  • Запускается независимо от того, вошел ли пользователь в систему или нет. Плюс, Не хранить пароль ... -> Не удалось .
  • Запускается независимо от того, вошел ли пользователь в систему или нет. Плюс не хранить пароль ... И запустить с наивысшими привилегиями -> Не удалось .
  • Запускается независимо от того, вошел ли пользователь в систему или нет. Плюс к этому бег с высшими привилегиями и скрытый. -> Не удалось .
  • Запускается независимо от того, вошел ли пользователь в систему или нет. Плюс, Не хранить пароль ... и Скрытый -> Неудачный .
  • Запускается независимо от того, вошел ли пользователь в систему или нет. Плюс, Не хранить пароль ..., Запустить с наивысшими привилегиями и Скрыть -> Не удалось .

Кроме того, я попытался запланировать макрос VBA, и разницы не было (это была моя первая попытка).

Кроме того, как я выделил в комментариях. Я протестировал свою учетную запись, которая является учетной записью администратора, и учетной записью службы, которая уже выполняет определенные запланированные задачи.

Кроме того, команды выглядят так:

  • C:\...\MacroRunner.exe
  • C:\...\MacroRunner.vbs

Оба работают в CMD. Кроме того, я пробовал запускать каждый из них вручную . Я не ожидал только того, что назначенное время его выполнило.

Есть идеи, что я делаю не так? Спасибо за ваше время.

PS:

Если вы читаете вопрос StackOverflow, человек сталкивается с той же проблемой, но ищет код. Я лично убежден, что это проблема с сервером, а не с кодом.

Кроме того, это не первое место, где можно найти похожие темы:

https://www.thespreadsheetguru.com/blog/how-to-automatically-run-excel-vba-macros-daily

answer

I have tried the following combinations:

  • Run only when the user is logged on. -> Successful.

Если программа работает только тогда, когда пользователь вошел в систему, это означает, что ей нужен интерактивный сеанс.

Тот факт, что он на самом деле не отображает никакого окна при запуске, не имеет значения: если что-то в коде нуждается в интерактивном сеансе (даже без вашего ведома) и не может его получить, он потерпит неудачу. Поскольку макрос VBA по своей природе выполняется внутри приложения Office (которое при нормальных обстоятельствах всегда имеет пользовательский интерфейс), в этом нет ничего удивительного; если исходный кодировщик не предпринял дополнительных шагов, чтобы макрос работал неинтерактивно, это ожидаемое поведение.

Мы не сможем вам больше помочь без реального кода приложения; Я предлагаю вам спросить в StackOverflow, как убедиться, что макрос VBA может работать без интерактивного сеанса.

Я нашел как исправить свою проблему. Я нашел этот старый ответ в Super User от squillman :

https://superuser.com/a/579901

  1. Откройте службы компонентов (Пуск -> Выполнить, введите dcomcnfg)
  2. Откройте "Службы компонентов" -> "Компьютеры" -> "Мой компьютер" и нажмите "Конфигурация DCOM".
  3. Щелкните правой кнопкой мыши приложение Microsoft Excel и выберите Свойства.
  4. На вкладке «Удостоверение» выберите «Этот пользователь», введите идентификатор и пароль интерактивной учетной записи пользователя (доменной или локальной) и нажмите «ОК».

Что еще мне нужно было сделать?

  1. Настройте запланированную задачу с той же учетной записью, которую я настроил на шаге 4. Я попытался использовать учетную запись службы и потерпел неудачу.
  2. Запускается независимо от того, вошел ли пользователь в систему или нет.

После этого я смог запустить его правильно.

Спасибо, @Massimo за подсказку.