アプリを起動後アイドルタイムが一定時間を経過したとき強制終了させるには


アプリを起動後、アイドルタイムが一定時間を経過したとき強制終了させるには、MyLib.mdaに登録されているDetectIdleTime_FS()関数を使用すると便利です。この関数には、引数としてフォームとアイドルタイム(分単位)を指定します。

  1. Access 97を起動して新規データベースを作成します。
  2. データベースウインドウが表示されたら、モジュールのタブをクリックして新規作成ボタンをクリックします。
  3. メニューのツールから参照設定をクリックして、データベースライブラリー(MyLib.mda)を登録します。
  4. データベースウインドウからフォームのタブをクリックして、新規作成ボタンをクリックします。
  5. フォームが表示されたら、フォームのイベントプロパティを表示させてTimer Interval1000(1秒)を設定します。
    Forms_Intermediate_006_fig1
    図1-フォームのイベントプロパティの設定内容


    On Timerイベントには、以下のVBAコードを追加します。この例では、アイドルタイムが1分経過したとき、アプリを強制終了させています。本番で運用するときは、アイドルタイムとして15分から30分の範囲を指定するのが適当と思われます。また、Debug_ModeはFalseに設定してメッセージが表示されないようにします。

    リスト1-フォームのOn Timerのイベント処理
    #Const Debug_Mode = True
    
    Private Sub Form_Timer()
    
      Const conIdleMinutes = 1	' 1分
    
      If DetectIdleTime_FS(Me, conIdleMinutes) = True Then
        #If Debug_Mode Then
          MsgBox "No user activity detected in the last " _
                 & conIdleMinutes & " minute(s)!", _
                 vbInformation + vbOKOnly, _
                 "Idle Time Detected"
        #End If
        Application.Quit acQuitSaveAll
      End If
      
    End Sub
     

     

  6. フォームをfrmDetectIdleTimeの名称で保存します。
  7. ビューモードに切り替えたら、アプリをアイドル状態にします。1分経過すると、『No user activity detected in the last 1 minute(s)!』のメッセージが表示されますのでOKボタンをクリックしてアプリを終了させます。
  8. 通常このフォーム(frmDetectIdleTime)は、メインメニューのOn Openイベントから非表示モードで開きます。
    リスト2-メインメニューから非表示モードでfrmDetectIdleTimeを開く
    Private Sub Form_Open(Cancel As Integer)
      DoCmd.OpenForm "frmDetectIdleTime", acNormal, , , , acHidden
    End Sub
      

 


Tip:
例えば、毎日夜11時に夜間バッチを実行するためアプリを10時30分に強制終了させるには、フォームの On Timerイベントを以下のように書き換えます。緊急メンテなどで、任意の時間にアプリを強制終了させるには、終了時間をテーブルに格納しておくと便利です。この場合、強制終了10分前にユーザーに警告メッセージを表示するようにしておくとユーザーフレンドリーなアプリになります。


Private Sub Form_Timer()

  If Format(Now(), "hh:mm") > "22:30" Then
      Application.Quit acQuitSaveAll
  End If
  
End Sub