|
こんにちは。
SheetSelectionChangeごとにTが書き換わると同時に、
その回数分OnTimeで予約してる事は把握されてますか?
>勝手にまた開いてきます。
もそこに原因があります。
Bookが閉じた後も解除されていないOnTimeが残っている事になります。
対処方法としては、予約前に直前予約の解除をしなければいけないと思いますよ。
簡易的に考えて、x分後に閉じる処理、ではなくx分間隔で操作状況を調べる、
というので良ければ、昔書いた事があるサンプルです。
'ThisWorkbookモジュール
Option Explicit
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function GetCursorPos Lib "user32.dll" ( _
ByRef lpPoint As POINTAPI) As Long
Private MoP As POINTAPI
Private pasTime As Date
Private chkTime As Date
Private xx As Long
Private yy As Long
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Range)
pasTime = Now
End Sub
Private Sub ontime_set()
Dim tv As Date
' ontime_reset
tv = TimeValue("00:00:10")
GetCursorPos MoP
If (MoP.x = xx) And (MoP.y = yy) And (pasTime < (chkTime - tv)) Then
'MsgBox "end?"
ThisWorkbook.Close True
Else
xx = MoP.x
yy = MoP.y
chkTime = Now + tv
Application.OnTime chkTime, "ThisWorkbook.ontime_set"
End If
End Sub
Private Sub ontime_reset()
If chkTime > Now Then _
Application.OnTime chkTime, "ThisWorkbook.ontime_set", False
End Sub
起動と終了については、Workbook_Open/Workbook_BeforeClose などと
連携するなりなんなりと。
ただ、実務運用するかしないかは、
ファイルの使用用途を充分吟味した方が良いと思います。
あらゆるケースでも『上書き保存』して閉じるというのは、
私だったら避けたいとこですね。
|
|