ふとんのなかから

びまん性大細胞型B細胞リンパ腫にかかったあとだらだらしている人のブログ

VBでカウントダウンタイマーを作る

することがなくて退屈で死にそうなので定時までの時間を計って気を紛らわせるためのタイマーを作ってみた。VB触ったの初めてだったけど簡単でいいねVBは。JAVAでこれやったら大変だよ多分…。

ダウンロード→CountDown.zip(3.18KB)
動作にはVB6.0用ランタイムが必要かもしれない(いらないかもしれない)。なおもし動かして何か不具合が出ても責任持ちません。


解説:こういうものの肝は時間を計測する部分で、皆考えることは同じらしくググると色々なやり方が出てくる。TimeSerial関数を使うのが一番スマートっぽいけど、あれやこれややってるうちにBIOSの時間を初期化したらしくシステムダウンが発生。やっぱりシステムの時間をそのままいじるのは怖いわえ、というわけで以下の方法になった。

  • Timer関数で現在時刻の秒数化したものが取得できる。
  • したがって目標時刻を秒数化したものと引き算をすれば、それがカウントダウンの値になる。
  • ただし取得できているのは秒数化した時間なので、これをDateAdd関数を使って60進数の時間表記に変換する。
  • DateAdd関数で取得できる値は年月日も含んでいるのでそこから時間・分・秒のみ取り出す。

ソース晒し:

Dim HourTime As Long
Dim TimeTime As Long
Dim CountTime As Long

Private Sub Command1_Click()
    On Error GoTo Err_Trap:     'エラー監視開始
        HourTime = Text1.Text   'テキストボックス1の内容を変数HourTimeに格納。
        TimeTime = Text2.Text   'テキストボックス2の内容を変数TimeTimeに格納。
        Timer1.Enabled = True   'タイマーを動作開始。
    Exit Sub
    
Err_Trap:                       'エラー受け取り処理開始
        MsgBox ("24時間表記で時刻を入力して下さい。")
        Text1.Text = ""
        Text2.Text = ""
        Label3.Caption = ""
        Text1.SetFocus          '時間入力欄にフォーカスを置く。
End Sub

Private Sub Command2_Click()
    Timer1.Enabled = False   'タイマー動作停止。
    Text1.SetFocus
End Sub

Private Sub Timer1_Timer()
    CountTime = ((HourTime * 3600) + (TimeTime * 60)) - Timer   '秒化した目標時間から秒化した現在時刻を引く。
    Label3.Caption = Hour(DateAdd("s", CountTime, 0)) & "時間" & Minute(DateAdd("s", CountTime, 0)) & "分" & Second(DateAdd("s", CountTime, 0)) & "秒"
    '秒単位の変数CountTimeをHH:MM:SS形式に戻し、その中から時間と分と秒のみ取り出しLabel3に表示する。
    
    If Label3.Caption = "0時間0分0秒" Then
        MsgBox ("時間ですよ!!")            '残り時間が0時間0分0秒になったらメッセージボックスで知らせて、
        Timer1.Enabled = False              'タイマー動作を停止。これ以上カウントが進まないようにする。
        Text1.SetFocus
    End If
End Sub