Timer関数で1899/12/31 0:40:23とでてしまいます

解決


ミチ  2004-05-25 00:10:12  No: 113491  IP: [192.*.*.*]

初心者ですが質問させてください。
visual basic6.0
windows XP  環境で

指定時刻までのカウントダウンプログラムを作ろうと思い、

    Dim Count As Variant
    Dim Ntime  As Variant
    Dim MyStr As String
      Ntime = Time + TimeSerial(1, 0, 0)

      Count = DateDiff("s", Time(), Ntime)
      
      MyStr = Format(Count, "h:m:s")

      Label2.Caption = MyStr

このように書いているのですが、実行一時停止で値を見てみると
Timeは現在の時刻がでているのですが、
Ntimeの値が1899/12/31 0:40:23となってしまいます。
なぜこのようになってしまうのかわかりません。
どなたか教えていただけますか。

編集 削除
真夜中のVBer  2004-05-25 01:06:46  No: 113492  IP: [192.*.*.*]

恐らく足した結果が24時間を越えたので日付も表示されるようになったんじゃ
ないかと推測します。23時〜0時までにしかでない現象じゃないですかね。
違う時間にためして見てください。時間しか表示されない時もあるでしょう?
VarType関数で調べれば分かると思いますがNtimeは内部的に日付型の値を
持っていて、単に値が24時間未満なら日付が表示されないだけの話で、どちら
の場合でも内部的には同じ値を持っていると思います。

編集 削除
岡田 之仁  2004-05-25 01:19:29  No: 113493  IP: [192.*.*.*]

日付等関数の使い方の問題です。

以下に動作するコードを掲載します。
タイマー・テキストボックス・ボタンを各1個フォームに
配置して下さい。

テキストボックスには、カウントダウンしたい秒数を数字
で入力し、ボタンをクリックして下さい。

Option Explicit

Private startTime As Date

Private Sub Form_Load()

    Timer1.Enabled = False
    Timer1.Interval = 1000

End Sub

Private Sub Command1_Click()

    Dim n As Date

    If Text1.Text = "" Then
        Exit Sub
    End If
    
    startTime = Now + TimeSerial(0, 0, CInt(Text1.Text))

    Timer1.Enabled = True

End Sub

Private Sub Timer1_Timer()

    Dim t As Integer
    Dim n As Date
    
    n = startTime - Now
    t = Hour(n) * 60 * 60 + Minute(n) * 60 + Second(n)
    
    Text1.Text = CStr(t)

    If t = 0 Then
        Timer1.Enabled = False
        Me.Hide
        Unload Me
    End If

End Sub

以上。

編集 削除
真夜中のVBer  2004-05-25 01:34:25  No: 113494  IP: [192.*.*.*]

付け足していうならば
> MyStr = Format(Count, "h:m:s")
これもあなたが期待している通りの表示にはならないはずです。
なぜならCountの内部形式が長整数型になってしまうからです。

意図通りに書き直すなら
  Dim Ntime  As Date
  Dim Count  As Long
  Dim MyStr  As String
  
  Ntime = DateAdd("h", 1, Now)
  Count = DateDiff("s", Now, Ntime)
  MyStr = Format(Count \ 3600) & ":" & Format((Count Mod 3600) \ 60)_
          & ":" & Format((Count Mod 3600) Mod 60)

といった感じでしょうか。

編集 削除
ミチ  2004-05-27 00:46:01  No: 113495  IP: [192.*.*.*]

真夜中のVBer 様
岡田 之仁  様
ありがとうございました。おかげで解決しました。
まだまだ勉強が足りなさすぎですね。

編集 削除