for i = 13 to 72なのにiが73と出てしまいます。

解決


ミチ  2004-06-02 10:29:12  No: 113646  IP: [192.*.*.*]

いつもこちらで勉強させてもらっています。
VB6.0で
タイマーコントロール上に

Option Explicit
Private CP As Integer
-------------------------------
Private Sub Timer1_Timer()

    Dim R5 As Variant
    Dim R1の5 As String
    Dim i As Integer
    
    For i = 13 To 72
      R5 = Form2.Text1(i).text
      R1の5 = Format(R5, "hh:nn:ss")
    Next
      
    If Time() = R1の5 Then
      If (24 <= i >= 13) Then
        CP = 5
       Else
        If 36 <= i >= 25 Then
          CP = 4
         Else
          If 48 <= i >= 37 Then
            CP = 3
             Else
            If 60 <= i >= 49 Then
              CP = 2
               Else
                 If 72 <= i >= 61 Then
                  CP = 1
                 End If
            End If
          End If
        End If
      End If
    End If
    
    If Time() = R1の5 Then
      Command9_Click
    End If
    
End Sub
このように書いて別フォーム上のテキストボックス(配列にして13〜72とつけています)上の時刻(それぞれに"10:8:0"などの時刻が入っています)がきたらCPをそれぞれの条件にあわせて定義してCommand9_Clickへ移動する…といったことをしたいわけなのですが、なぜか実行一時停止してiの値を見てみると73と出てしまいます。もちろん時間が来てもCommand9_Clickへ移動してくれません。どなたか教えていただけますか。

編集    削除
特攻隊長まるるう  2004-06-02 18:13:49  No: 113647  IP: [192.*.*.*]

…このコードだと
For 文の中に Exit For が無いのでどんな条件の時でも i が 72 になるまで
For 文が実行されることになります。For 文が最後まで実行されて、For 文を
抜ける判定の時、i は 73 となってます(条件判定の前に + 1 されるから)。

編集    削除
からす  2004-06-02 18:16:50  No: 113648  IP: [192.*.*.*]

>If (24 <= i >= 13) Then
>    中略
>End If

とりあえず、上記部分を下記のようにしてみて下さい。
 
Select Case i
    Case 13 To 24: CP = 5
    Case 25 To 36: CP = 4
    Case 37 To 48: CP = 3
    Case 49 To 60: CP = 2
    Case 61 To 72: CP = 1
    Case Else: CP = 0
End Select

あと、Nextの位置をよく考えてみましょう!
その位置で良いのかな?

編集    削除
ミチ  2004-06-02 23:28:59  No: 113649  IP: [192.*.*.*]

特攻隊長まるるう様、からす様、ありがとうございました!
Nextの位置は最後のEnd Subの上にもっていったらうまくいきました。
これからもよろしくお願いします。

編集    削除