Приложение Excel VBA. Время. Я думаю, что это плохая идея использовать эти ... мысли в любом случае? - PullRequest
3 голосов
/ 26 февраля 2010

У меня есть несколько пользователей, которых я поддерживаю, которые просят, чтобы вещи происходили автоматически (ну, более автоматически, но это уже другой момент!).

Один хочет, чтобы события происходили каждые 120 секунд (см. Мой другой вопрос), а также другой хочет, чтобы одна вещь происходила, скажем, в 17:00 каждый рабочий день. Это должно быть на листе Excel, поэтому VBA как надстройки и т. Д. Будет «нет», так как он должен быть автономным.

У меня большая неприязнь к использованию Application.OnTime Я думаю, что это опасно и ненадежно, что думают все остальные?


EDIT: Перекрестная почта находится в Стиль VBA Macro On Timer для выполнения кода каждые заданное количество секунд, то есть 120 секунд

Ответы [ 2 ]

12 голосов
/ 28 февраля 2010

Application.OnTime абсолютно на 100% надежен и, безусловно, не опасен. Тем не менее, это только , предоставляемое через VBA, и вы по какой-то причине рассматриваете VBA как «нет, нет», так что эта опция может показаться вам недоступной.

Как правило, я бы не использовал OnTime для долгосрочного планирования, такого как планирование Excel для выполнения команды каждый день в 17:00. Проблема в том, что если пользователь закрывает Excel, тогда планирование OnTime теряется. В этом случае вам потребуется использовать планировщик задач или создать собственное приложение или службу Windows, чтобы открыть Excel и выполнить ваши команды.

Однако для планирования события, которое будет происходить каждые 120 секунд, использование Application.OnTime было бы идеальным для этого - вам просто нужно было бы повторно запланировать OnTime, чтобы оно повторялось через 120 секунд каждый раз, когда OnTime перезванивает, поскольку OnTime срабатывает только один раз в расписании, а не на повторной основе. Я бы абсолютно использовал VBA для этой задачи. Если вы не хотите, чтобы VBA начинал действие, это нормально: просто поместите VBA в рабочую книгу, которая затем открывается вашей программой или через планировщик задач. С этого момента код VBA может срабатывать каждые 120 секунд.

Имеет смысл?

0 голосов
/ 27 февраля 2019

Ты прав. «бесконечный» интервал вызова «onTime» сам по себе создает бесконечную рекурсию.

Это вызовет переполнение стека после нескольких тысяч / миллионов / миллиардов вызовов функций и утечку памяти.

...