Как обнаружить неактивность пользователя в книге Excel - PullRequest
2 голосов
/ 04 октября 2008

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

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

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

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

LastActivityTime = Now

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

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

Ответы [ 3 ]

2 голосов
/ 25 августа 2009

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

1 голос
/ 04 октября 2008

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

0 голосов
/ 04 октября 2008

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

...