|
こんばんわ、Abyssさん。
そ、そんな...
...拙いコードでたいへん恐縮です^ ^;
最近mougだけではなくこちらでも頻繁にAbyssさんのハイレベルな回答が読めて
たいへん嬉しく感じています。
>今回使われるUserformの目的は
>MsgBox的な役割で、Userformから戻り値を
>使う方法が適していると思ったのです。
という本質的なアドバイスや、レベルが高いコードを惜しげもなく披露してくださっているので
凄く勉強になります。ありがとうございます。
ONさんへ
私もまだSetTimer/KillTimerなどを使いこなせるレベルではありませんので
レベルを落として段階を踏むとしたら...
と考えてみました。
ほとんどAbyssさんのコードの模倣にしか過ぎませんが、
ONさんの理解の一助になれば幸いです。
'-------------------------------------------------
'ThisWorkbookモジュール
Option Explicit
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
changeTime = Now
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If IsTimerOn Then
Application.OnTime setTime, "TimeCheck", , False
End If
End Sub
'-------------------------------------------------
'UserForm1
Option Explicit
Private Sub CommandButton1_Click()
tm_Continue = 1&
End Sub
Private Sub CommandButton2_Click()
tm_Continue = -1&
End Sub
Private Sub UserForm_Activate()
Call eventChk
End Sub
'-------------------------------------------------
'標準モジュール
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public IsTimerOn As Boolean
Public tm_Continue As Long
Public changeTime As Date
Public setTime As Date
Private oLabel As MSForms.Label
Private Const interval = "0:00:05"
Sub timerStart()
'↓追加
If IsTimerOn Then Application.OnTime setTime, "TimeCheck", , False
changeTime = Now
setTime = Now + TimeValue(interval)
Application.OnTime setTime, "TimeCheck"
'↓追加
IsTimerOn = True
End Sub
Sub TimeCheck()
Dim chkTime As Date
chkTime = changeTime + TimeValue(interval)
If setTime < chkTime Then
setTime = chkTime
Application.OnTime setTime, "TimeCheck"
IsTimerOn = True
Else
IsTimerOn = False
Call test
End If
End Sub
Sub test()
'保険として
On Error Resume Next
Set oLabel = UserForm1.Label1
On Error GoTo 0
If oLabel Is Nothing Then Exit Sub
tm_Continue = 0&
UserForm1.Show vbModal
Unload UserForm1
If tm_Continue > 0& Then
'MsgBox "Continue"
Call timerStart
Else
MsgBox "Close"
End If
End Sub
Sub eventChk()
Dim gap As Single
Dim ii As Single
ii = Timer + 30! '30秒タイマ
Do
gap = ii - Timer
oLabel.Caption = Format$(gap, "00 . 00")
DoEvents
If tm_Continue <> 0& Then Exit Do
Call Sleep(1&)
Loop Until gap <= 0!
UserForm1.Hide
End Sub
|
|