如何检测 Excel 工作簿中的用户非活动状态

How to detect user inactivity in an Excel workbook

提问人:Joe 提问时间:10/4/2008 最后编辑:shruti1810Joe 更新时间:5/27/2015 访问量:2984

问:

我想在一段时间不活动后在 Excel 工作簿宏中执行操作(隐藏/保护某些工作表)。实现此目的的最佳/最简单的方法是什么?

我假设我将用于定期检查用户是否处于活动状态。但是,我应该处理哪些事件来查看用户是否处于“活动状态”(即对工作簿执行了某些操作(任何事情)?Application.OnTime

澄清:我想检测所有活动,而不仅仅是更改。即包括鼠标单击、选择、复制、使用键盘导航、更改工作表......

我假设当发生表示用户活动的 UI 事件时,我将设置一个变量:

LastActivityTime = Now

运行的宏将检查此变量以查看用户最近是否处于活动状态。我需要处理哪些事件(除 )才能设置此变量?我本来希望会有和事件,这两个可能已经足够了。Application.OnTimeSheetChangeKeyUpMouseUp

更新:我通过处理 和 来实现这一点。实际上,这可能就足够了。Workbook_SheetActivateWorkbook_SheetSelectionChangeWorkbook_WindowActivate

VBA Excel 计时器 用户不活动

评论


答:

0赞 Martin08 10/4/2008 #1

一种简单的方法是将工作簿的内容与上次检查时的内容进行比较。我相信将其与 Application.OnTime 相结合将解决您的问题。

评论

0赞 Joe 10/4/2008
谢谢,但我想检测不会更改工作簿的活动。我对我的问题进行了一些澄清。
2赞 GSerg 10/4/2008 #2

我只能看到两种解决方案——要么处理 Application 对象具有的 evary 单个事件,要么使用 GetLastInputInfo 函数。

评论

0赞 Joe 10/4/2008
GetLastInputInfo 听起来很有前途,但似乎与用户会话而不是应用程序相关。我只对与我的 Excel 工作簿相关的用户活动感兴趣 - 或者 Excel 流程就可以了。
2赞 Joe 8/25/2009 #3

我通过处理Workbook_SheetActivate、Workbook_SheetSelectionChange和Workbook_WindowActivate来实现这一点。实际上,这可能就足够了。