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

解決


ミチ  2004-06-02 10:29:12  No: 113646

いつもこちらで勉強させてもらっています。
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

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


からす  2004-06-02 18:16:50  No: 113648

>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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加