Как обнаружить неактивность пользователя в книге Excel

Я хочу выполнить действие в макросе книги Excel после определенного периода бездействия (скрыть / защитить некоторые листы). Каков наилучший / самый простой способ достичь этого?

Я предполагаю, что я буду использовать Application.OnTime периодически проверять, был ли пользователь активным. Но какие события я должен обработать, чтобы увидеть, был ли пользователь "активным" (то есть, что-то сделал - что-нибудь - с книгой)?

Пояснение: я хочу обнаружить всю активность, а не только изменения. То есть, включая щелчки мышью, выбор, копирование, навигацию с помощью клавиатуры, изменение таблиц,...

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

LastActivityTime = Now

и макрос управляется Application.OnTime проверит эту переменную, чтобы увидеть, был ли пользователь активным в последнее время. Какие события (кроме SheetChange) мне нужно обработать, чтобы установить эту переменную? Я надеялся, что будет KeyUp а также MouseUp событий, этих двух, вероятно, было бы достаточно.

Обновление: я реализовал это путем обработки Workbook_SheetActivate, Workbook_SheetSelectionChange а также Workbook_WindowActivate, Реально этого вполне достаточно.

3 ответа

Решение

Я реализовал это, обработав Workbook_SheetActivate, Workbook_SheetSelectionChange и Workbook_WindowActivate. Реально этого вполне достаточно.

Я вижу только два решения - либо обрабатывать каждое отдельное событие, которое имеет объект Application, либо использовать функцию GetLastInputInfo.

Один простой способ - сравнить содержание рабочей книги с содержимым последней проверки. Я верю, что объединение этого с Application.OnTime решит вашу проблему.

Другие вопросы по тегам