Триггерный код после бездействия

Я хочу, чтобы мой WB запускал некоторый код после времени бездействия (установленный мной, естественно). Я мог только найти код, чтобы закрыть WB после времени бездействия, но я хочу, чтобы код делал что-то еще, отличное от закрытия WB. Я нашел этот код для закрытия WB:

Этот модуль рабочей книги:

Private Sub Workbook_BeforeClose(Cancel As Boolean) stop_Countdown ThisWorkbook.Save End Sub Private Sub Workbook_Open() start_Countdown End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) stop_Countdown start_Countdown End Sub Private Sub Workbook_SheetCalculate(ByVal Sh As Object) stop_Countdown start_Countdown End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _ ByVal Target As Excel.Range) stop_Countdown start_Countdown End Sub 

Регулярный модуль:

 Option Explicit Public Close_Time As Date Sub start_Countdown() Close_Time = Now() + TimeValue("00:00:10") Application.OnTime Close_Time, "close_WB" End Sub Sub stop_Countdown() Application.OnTime Close_Time, "close_WB", , False End Sub Sub close_wb() ThisWorkbook.Close True End Sub 

В какой части кода я должен представить события, которые я хочу, чтобы WB сделал, после бездействия, вместо закрытия WB?

Вам нужно внести изменения в модуль Regular .

Вместо передачи строки close_wb() в вызове функции Application.OnTime вам необходимо указать имя процедуры, содержащей все, что вы хотите выполнить.

Вот код, который поможет вам начать:

 Option Explicit Public Inactivity_Time As Date Sub start_Countdown() Inactivity_Time = Now() + TimeValue("00:00:10") Application.OnTime Inactivity_Time, "my_procedure" ' <- Notice that I changed the name of the procedure here End Sub Sub stop_Countdown() On Error Resume Next Application.OnTime Inactivity_Time, "my_procedure", , False ' <- And here too. On Error GoTo 0 End Sub Sub my_procedure() ' The code to perform you event goes here End Sub 

Подробнее о методе Application.OnTime . Здесь.

EDIT: после некоторого теста оказалось, что вы не можете вызвать stop_Countdown() в процедуре Workbook_BeforeClose : она выдает ошибку. Согласно этому сообщению , в вашем модуле Workbook вы должны заменить процедуру Workbook_BeforeClose следующим:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) Close_WB End Sub 

И добавьте следующую процедуру:

 Public Sub Close_WB() stop_CountDown ThisWorkbook.Close SaveChanges:=True End Sub 
Interesting Posts

Как взять переменную из sub в модуле и использовать ее в другом элементе в UserForm с помощью Excel VBA

Excel VBA Выберите 2 не когерентно ячейки и удалите строки

Использование пользовательских цветов XSSF в условном форматировании?

почему я должен использовать одинарные кавычки для application.run в excel?

Скрыть колонку в excel по дате YYYY MM до конца этого года плюс еще три

Внутренняя ошибка сервера при получении значений диапазона в Excel Online

VBA выбирает фигуры на основе их положений

Использование Copy (Destination: =) для копирования в другой файл Excel

Поиск СУММ, кроме некоторых столбцов

Добавить полную остановку между именами пользователя и фамилии пользователя

Пользовательский номер строки Excel

Поиск ближайших координат с помощью VBA

Сохранять только значения объекта таблицы таблицы листа

«Ошибка 1004» при конкатенации строки

Изменить диапазон диаграмм на основе условия

Давайте будем гением компьютера.