2

非アクティブな状態が一定時間続いた後、Excelブックマクロでアクションを実行したい(一部のワークシートを非表示/保護)。これを達成するための最良/最も簡単な方法は何ですか?

Application.OnTimeÍは、ユーザーがアクティブであるかどうかを定期的にチェックするために使用することを前提としています。しかし、ユーザーが「アクティブ」であるかどうか(つまり、ワークブックで何か-何か-を行っているかどうか)を確認するには、どのイベントを処理する必要がありますか?

明確化:変更だけでなく、すべてのアクティビティを検出したい。つまり、マウスクリック、選択、コピー、キーボードによるナビゲート、ワークシートの変更などが含まれます...

ユーザーアクティビティを表すUIイベントが発生した場合、次のように変数を設定すると想定しています。

LastActivityTime = Now

によって実行されるマクロは、Application.OnTimeこの変数をチェックして、ユーザーが最近アクティブになっているかどうかを確認します。SheetChangeこの変数を設定するには、(以外の)どのイベントを処理する必要がありますか?KeyUpイベントがあったらいいなと思っていたのですがMouseUp、この2つで十分だったと思います。

更新:、、およびを処理することでこれを実装しWorkbook_SheetActivateましWorkbook_SheetSelectionChangeWorkbook_WindowActivate。現実的には、これでおそらく十分です。

4

3 に答える 3

2

Workbook_SheetActivate、Workbook_SheetSelectionChange、Workbook_WindowActivate を処理することでこれを実装しました。現実的にはこれで十分でしょう。

于 2009-08-25T11:17:01.033 に答える
1

Application オブジェクトが持つすべての単一イベントを処理するか、 GetLastInputInfo関数を使用するかの 2 つの解決策しかわかりません。

于 2008-10-04T14:16:14.260 に答える
0

簡単な方法の 1 つは、ワークブックの内容を前回チェックしたときの内容と比較することです。これを Application.OnTime と組み合わせると、あなたの懸念が解決すると思います。

于 2008-10-04T14:00:40.503 に答える