Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


40747 / 76732 ←次へ | 前へ→

【41076】Re:Excel終了時の動きについて
発言  ichinose  - 06/7/28(金) 16:57 -

引用なし
パスワード
   ▼foo さん:
こんな方法で試してみてください。
新規ブックで試してみてください。


標準モジュール(Module1)に
'===============================================================
Public flag As Boolean
'================================================================
Sub test()
  newHour = Hour(Now())
  newMinute = Minute(Now())
  newSecond = Second(Now()) + 1
  waitTime = TimeSerial(newHour, newMinute, newSecond)
  Application.Wait waitTime  '(当然実際はここでもっと違う処理を行う)
End Sub
'======================================================================
Sub main()
  flag = True
  Call mc_schedule(True, -1, [TimeValue("00:00:00.60")], "test")
'                 ↑これ以下の短い間隔では駄目でした
'      駄目というのは、制御がExcelに戻らないのでxボタンが押せない
End Sub
'======================================================================
Sub subproc()
  '解除
  Call mc_schedule(False)
End Sub


別の標準モジュール(Module2)に
'=====================================================================
'スケジュール管理サブルーチン
Option Explicit
Private exetm As Variant '次の実行時刻
Private repcnt As Long '繰り返し回数
Private c_cnt As Long '現在の回数
Private reptm As Variant '実行間隔時間
Private prcnm As String '実行プロシジャー名
'========================================================================
Sub mc_schedule(ByVal on_off As Boolean, Optional ByVal rep_cnt As Long = 0, _
        Optional ByVal rep_time As Variant = 0, Optional ByVal proc_name As String = "")
'マクロ実行のスケジュールの設定を行う
'input : on_off --- true スケジュール設定 false---スケジュール解除
'    rep_cnt  実行を繰り返す回数 -1の場合は、制限なし
'    rep_time  実行間隔時間
'    proc_name 実行するプロシジャー名
  On Error Resume Next
  If on_off = True Then
    If rep_cnt > 0 Or rep_cnt = -1 Then
     reptm = rep_time
     repcnt = rep_cnt
     c_cnt = 0
     prcnm = proc_name
     End If
    exetm = Now() + reptm
    End If
  Application.OnTime EarliestTime:=exetm, Procedure:="mc_exec", Schedule:=on_off
  On Error GoTo 0
End Sub
'=================================================================
Sub mc_exec()
'スケジュール設定されたプロシジャーを実行する
  Dim wk As Variant
  wk = Application.Run(prcnm)
  If repcnt <> -1 Then c_cnt = c_cnt + 1
  If c_cnt < repcnt Or repcnt = -1 Then
    Call mc_schedule(True)
    End If
End Sub


Thisworkbookのモジュールに
'================================================================
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If flag Then
    MsgBox "End..."
    subproc
    End If
End Sub


として、Module1のmainを実行してみてください。
ちゃんとメッセージが表示されます。

監視間隔が遅いのは仕方がないですが、
検討してみてください。
1 hits

【40994】Excel終了時の動きについて foo 06/7/27(木) 14:50 質問
【40996】Re:Excel終了時の動きについて neptune 06/7/27(木) 15:17 発言
【40998】Re:Excel終了時の動きについて foo 06/7/27(木) 15:30 お礼
【40997】Re:Excel終了時の動きについて Kein 06/7/27(木) 15:20 発言
【40999】Re:Excel終了時の動きについて foo 06/7/27(木) 15:38 発言
【41004】Re:Excel終了時の動きについて Kein 06/7/27(木) 15:56 発言
【41021】Re:Excel終了時の動きについて ichinose 06/7/27(木) 20:44 発言
【41022】Re:Excel終了時の動きについて ichinose 06/7/27(木) 21:02 発言
【41023】Re:Excel終了時の動きについて neptune 06/7/27(木) 21:13 発言
【41033】Re:Excel終了時の動きについて foo 06/7/28(金) 9:25 お礼
【41032】Re:Excel終了時の動きについて foo 06/7/28(金) 9:12 お礼
【41040】Re:Excel終了時の動きについて ichinose 06/7/28(金) 11:08 発言
【41051】Re:Excel終了時の動きについて foo 06/7/28(金) 13:13 発言
【41060】Re:Excel終了時の動きについて ichinose 06/7/28(金) 13:54 発言
【41062】Re:Excel終了時の動きについて foo 06/7/28(金) 14:12 お礼
【41076】Re:Excel終了時の動きについて ichinose 06/7/28(金) 16:57 発言
【41077】Re:Excel終了時の動きについて 追伸 ichinose 06/7/28(金) 17:05 発言
【41079】姑息技 Jaka 06/7/28(金) 17:14 発言
【41086】Re:姑息技 foo 06/7/28(金) 18:56 お礼
【41085】Re:Excel終了時の動きについて foo 06/7/28(金) 18:25 お礼

40747 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free