Vòng lặp Do While Loop

Liên hệ QC

summerhq2006

Thành viên hoạt động
Tham gia
4/3/08
Bài viết
112
Được thích
88
Xin hỏi các bác trong đoạn mã dưới đây thì lỗi ở đâu mà mỗi lần em run con macro FIFO này là treo máy!

Mã:
Sub FIFO()
Dim tondau, nhap, xuat, toncuoi As Long
Dim td, n, x, tc, k As Integer
tondau = Val(Cells(5, 20))
nhap = Val(Cells(5, 93))
xuat = Val(Cells(5, 105))
toncuoi = Val(Cells(5, 21))
td = 20
n = 93
x = 105
tc = 21
k = 112
Do While toncuoi > 0 And td > 16
If xuat >= tondau Then
Cells(5, k) = toncuoi
Else
Cells(5, k) = nhap
toncuoi = toncuoi - nhap
tondau = Val(Cells(5, td - 1))
nhap = Val(Cells(5, n - 1))
xuat = Val(Cells(5, x - 1))
k = k + 1
td = td - 1
n = n - 1
x = x - 1
End If
Loop
End Sub

Em gửi file đính kèm, nhờ các bác xem dùm!
 

File đính kèm

Lần chỉnh sửa cuối:
Vui quá đi(!)

Tất cả dữ liệu của bạn đều ở hàng thứ 5 à?
Vậy sao không chuyển thành cột có dễ tới lui coi sóc không?
Bạn nên cho phần Code của bạn vô
Mã:
. . . [/code.] hay [PHP.]. . .  [/PHP] để dễ nhìn hơn, cho bản thân & cho người khác.
(Ở khung soạn thảo có để sẵn 2 định dạng này mà; chỉ cần bạn bôi đen đoạn mã & bấm vô 1 trong 2 nút là OK thôi;
 Vì chưa được chiêm ngưỡng dữ liệu nên chưa thể nói gì được, ngoài việc khuyên bạn xem lại các biến để thoát vòng lặp Do . . . . Loop
 
Lần chỉnh sửa cuối:
Upvote 0
Vấn đề nằm ở đoạn code được đánh dấu sau đây:
Mã:
[COLOR="Red"]Do While toncuoi > 0 And td > 16
         If xuat >= tondau Then
             Cells(5, k) = toncuoi[/COLOR]
         Else
             Cells(5, k) = nhap
             toncuoi = toncuoi - nhap
             tondau = Val(Cells(5, td - 1))
             nhap = Val(Cells(5, n - 1))
             xuat = Val(Cells(5, x - 1))
             k = k + 1
             td = td - 1
             n = n - 1
             x = x - 1
 [COLOR="red"]         End If
Loop[/COLOR]
End Sub
Khi điều kiện xuat >= tondau thỏa, vòng lặp chạy, tất cả các biến không thay đổi giá trị tạo thành một vòng lặp vô hạn dẫn đến tình trạng máy treo.
 
Upvote 0
Xin hỏi các bác trong đoạn mã dưới đây thì lỗi ở đâu mà mỗi lần em run con macro FIFO này là treo máy!

Sub FIFO()
Dim tondau, nhap, xuat, toncuoi As Long
Dim td, n, x, tc, k As Integer
tondau = Val(Cells(5, 20))
nhap = Val(Cells(5, 93))
xuat = Val(Cells(5, 105))
toncuoi = Val(Cells(5, 21))
td = 20
n = 93
x = 105
tc = 21
k = 112
Do While toncuoi > 0 And td > 16
If xuat >= tondau Then
Cells(5, k) = toncuoi
Else
Cells(5, k) = nhap
toncuoi = toncuoi - nhap
tondau = Val(Cells(5, td - 1))
nhap = Val(Cells(5, n - 1))
xuat = Val(Cells(5, x - 1))
k = k + 1
td = td - 1
n = n - 1
x = x - 1
End If
Loop
End Sub

Em gửi file đính kèm, nhờ các bác xem dùm!
Bạn xem lại đi vòng lạp vô hạn rồi. Vì bạn đã để biến lặp trong if ... els <biến lặp> endif
ngay từ đầu bạn đã cho td=20 thì nó chi làm một việc gán giá trị trong đoan if ... els
phải có biến lặp trong if <biến lặp> els
hoặc đưa biến ra khỏi if ... els ... endif
 
Upvote 0
Đúng ra phải làm như sau:
Mã:
[COLOR=black]Do While toncuoi > 0 And td > 16[/COLOR]
[COLOR=black]       If xuat >= tondau Then[/COLOR]
[COLOR=black]           Cells(5, k) = toncuoi[/COLOR]
[COLOR=black]       Else[/COLOR]
[COLOR=black]           Cells(5, k) = nhap[/COLOR]
[COLOR=black]       End If           [/COLOR]
[COLOR=black]           toncuoi = toncuoi - nhap[/COLOR]
[COLOR=black]           tondau = Val(Cells(5, td - 1))[/COLOR]
[COLOR=black]           nhap = Val(Cells(5, n - 1))[/COLOR]
[COLOR=black]           xuat = Val(Cells(5, x - 1))[/COLOR]
[COLOR=black]           k = k + 1[/COLOR]
[COLOR=black]           td = td - 1[/COLOR]
[COLOR=black]           n = n - 1[/COLOR]
[COLOR=black]           x = x - 1[/COLOR]
[COLOR=black] Loop[/COLOR]
[COLOR=black]End Sub[/COLOR]
Vòng lặp Do while loop bị lặp vô hạn do cậu If then bỏ qua trường hợp xuat < tondau -> td = td - 1, .. không thực hiện được -> không còn biến để thoát khỏi Do while loop!
Cảm ơn các bác!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom