2008-10-04 60 views
2

我想在一段时间内处于非活动状态(隐藏/保护某些工作表)后,在Excel工作簿宏中执行操作。什么是最好/最简单的方法来实现这一目标?如何在Excel工作簿中检测用户不活动

假设我将使用Application.OnTime来定期检查用户是否已被激活。但是,我应该处理哪些事件以查看用户是否“活跃”(即,与工作簿有什么关系)?

说明:我想检测全部活动,而不仅仅是改变。即包括鼠标点击,选择,复制,用键盘导航,改变工作表,...

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

LastActivityTime = Now 

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

更新:我已通过处理Workbook_SheetActivateWorkbook_SheetSelectionChangeWorkbook_WindowActivate来实施此操作。实际上,这可能就足够了。

回答

2

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

0

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

+0

谢谢,但我想检测不会更改工作簿的活动。我已经为我的问题添加了一些说明。 – Joe 2008-10-04 14:08:42

1

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

+0

GetLastInputInfo听起来很有希望,但似乎与用户会话而不是应用程序有关。我只对与我的Excel工作簿相关的用户活动感兴趣 - 或者Excel过程会这样做。 – Joe 2008-10-04 14:20:18

相关问题