maytinhvp01
Thành viên thường trực




- Tham gia
- 27/7/13
- Bài viết
- 390
- Được thích
- 179
Mình nghĩ i chỉ có thể nhận giá trị 29 thực tế lại nhận 30. Cho hỏi vậy là sao ạ?????Mã:Sub test() Dim i As Long, j As Long For i = 1 To 29 j = j + 1 Next MsgBox i MsgBox j End Sub
Như vậy là bạn chưa nắm được cơ chế hoạt động của vòng lặp For. Giả sử ta có vòng lặp:Mình nghĩ i chỉ có thể nhận giá trị 29 thực tế lại nhận 30. Cho hỏi vậy là sao ạ?????Mã:Sub test() Dim i As Long, j As Long For i = 1 To 29 j = j + 1 Next MsgBox i MsgBox j End Sub
For i = Đầu To Cuối
Lệnh
Next
Như vậy, sau vòng lặp trên thì i phải bằng Cuối + 1 chứ không phải là Cuối, vì khi i = Cuối + 1 thì điều kiện (*) mới bắt đầu sai (tất nhiên là loại trừ trường hợp Đầu > Cuối). Và cũng vì vậy mà trong ví dụ của bạn thì i = 30 là điều dễ hiểu.Bước 1: i nhận giá trị Đầu
Bước 2: Kiểm tra điều kiện i <= Cuối (*)
- Nếu (*) Đúng thì sang bước 3
- Nếu (*) Sai thì thoát khỏi vòng lặp
Bước 3: Thực hiện Lệnh, tăng i lên 1 đơn vị và quay lại Bước 2.
Mã:Sub test() Mình nghĩ i chỉ có thể nhận giá trị 29 thực tế lại nhận 30. Cho hỏi vậy là sao ạ?????[/QUOTE][QUOTE][/QUOTE] con tôi đang học cấp một, nên tôi hay phải giải bài tập cho nó, tôi thấy bài này rất giống với bài toán sau(gọi là bài toán trồng cây): một đoạn đường AB dài 25m cứ cách 5m người ta trồng một cây, hỏi người ta trồng được bao nhiêu cây trên đoạn đường đó? bạn thử giải xem có bao nhiêu cây
Thì tại vòng lập For.. nó vậy đấy
Khi i chạy đến 30, nó phát hiện 1 > 29 thì nó mới ngừng
Vậy thôi
(vụ này lúc mới học code tôi cũng từng thắc mắc)
for i = 5 to 20 step 5
Mình nghĩ i chỉ có thể nhận giá trị 29 thực tế lại nhận 30. Cho hỏi vậy là sao ạ?????Mã:Sub test() Dim i As Long, j As Long For i = 1 To 29 j = j + 1 Next MsgBox i MsgBox j End Sub
Cảm ơn bạn nhiều. Từ những cái nhỏ để biết thêm cái mới!!
Mình nghĩ i chỉ có thể nhận giá trị 29 thực tế lại nhận 30. Cho hỏi vậy là sao ạ?????Mã:Sub test() Dim i As Long, j As Long For i = 1 To 29 j = j + 1 Next MsgBox i MsgBox j End Sub
Bạn hỏi, mình cũng ngớ ra...
Và mình đã thử lại...
Giờ thì đã hiểu,
tuy đã có câu trả lời, nhưng mình cũng trả lời lại...hehe
For i = 1 to 29
...
Next i
khi i=30 >29, điều kiện không còn thỏa mãn, nó sẽ dừng vòng lặp.
Cho nên, lúc này i sẽ có giá trị là 30 !
Private Sub CommandButton1_Click()
Dim i As Long
For i = 1 To 5
If Me("TextBox" & i) = "" Then
Exit For
End If
Next
[COLOR=#FF0000][B] If i < 6 Then[/B][/COLOR]
MsgBox "Ban phai nhap du lieu vao TextBox" & i
Me("TextBox" & i).SetFocus
Else
MsgBox "OK, ban da nhap tat ca!"
End If
End Sub