初心者ですが質問させてください。
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となってしまいます。
なぜこのようになってしまうのかわかりません。
どなたか教えていただけますか。
恐らく足した結果が24時間を越えたので日付も表示されるようになったんじゃ
ないかと推測します。23時〜0時までにしかでない現象じゃないですかね。
違う時間にためして見てください。時間しか表示されない時もあるでしょう?
VarType関数で調べれば分かると思いますがNtimeは内部的に日付型の値を
持っていて、単に値が24時間未満なら日付が表示されないだけの話で、どちら
の場合でも内部的には同じ値を持っていると思います。
日付等関数の使い方の問題です。
以下に動作するコードを掲載します。
タイマー・テキストボックス・ボタンを各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
以上。
付け足していうならば
> 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)
といった感じでしょうか。
真夜中のVBer 様
岡田 之仁 様
ありがとうございました。おかげで解決しました。
まだまだ勉強が足りなさすぎですね。