ongke0711 > 27-09-18, 02:08 PM
(27-09-18, 09:32 AM)NguyenDungAnh Đã viết: Tưởng dễ ăn mà cũng khá lắt léo mất toi 1,5 ngày mà chưa biết có chuẩn không nữa
mọi người tải lại xem giúp còn sai ở đâu không nhé
https://drive.google.com/open?id=1S88cWD...j2389r9RmL
NguyenDungAnh > 27-09-18, 03:41 PM
bằng lăng > 27-09-18, 04:17 PM
(27-09-18, 09:32 AM)NguyenDungAnh Đã viết: Tưởng dễ ăn mà cũng khá lắt léo mất toi 1,5 ngày mà chưa biết có chuẩn không nữa
mọi người tải lại xem giúp còn sai ở đâu không nhé
https://drive.google.com/open?id=1S88cWD...j2389r9RmL
ongke0711 > 27-09-18, 04:23 PM
NguyenDungAnh > 27-09-18, 05:13 PM
ongke0711 > 28-09-18, 04:53 PM
Function ChiaPhongThi()
On Error GoTo ErrHandler
Dim rsMaMon As DAO.Recordset
Dim rsDisplay As DAO.Recordset
Dim rsKhuVuc As DAO.Recordset
Dim frm As Form
Dim soTSLop, soRec As Integer
Dim TongSoPhongThi, SoPhongThi, soTSPhanBo, stt, i As Integer
Set frm = Forms("frm_Chiaphongthi")
soTSLop = CInt(frm.txtsots)
Set rsKhuVuc = CurrentDb.OpenRecordset("SELECT tblDisplay.khuvuc " & _
"FROM tblDisplay " & _
"GROUP BY tblDisplay.khuvuc", dbOpenSnapshot)
Set rsMaMon = CurrentDb.OpenRecordset("tblmamon", dbOpenSnapshot)
If rsKhuVuc.EOF Or rsKhuVuc.BOF Then Exit Function 'Không có du lieu'
If rsMaMon.EOF Or rsMaMon.BOF Then Exit Function 'Không có du lieu'
TongSoPhongThi = 0
SoPhongThi = 0
rsKhuVuc.MoveFirst
Do Until rsKhuVuc.EOF
rsMaMon.MoveFirst
Do Until rsMaMon.EOF
Set rsDisplay = CurrentDb.OpenRecordset("SELECT * FROM tblDisplay WHERE khuvuc='" & rsKhuVuc!khuvuc & "' AND mamon ='" & rsMaMon!Mamon & "'")
With rsDisplay
.MoveLast
.MoveFirst
soRec = .RecordCount
If soRec \ soTSLop = 0 Then 'TH1: So thí sinh ít hon so thí sinh phân bo/phòng -> 1 phòng'
SoPhongThi = SoPhongThi + 1
Do Until .EOF
.Edit
!Phong = SoPhongThi
.Update
.MoveNext
Loop
GoTo NextMaMon
End If
If soRec Mod soTSLop = 0 Then 'TH2: So thi sinh chia deu het cho cac phong thi'
TongSoPhongThi = soRec \ soTSLop
For i = 1 To TongSoPhongThi
stt = 1
SoPhongThi = SoPhongThi + i
Do Until .EOF Or stt > soTSLop
.Edit
!Phong = SoPhongThi
.Update
stt = stt + 1
.MoveNext
Loop
Next i
GoTo NextMaMon
End If
If soRec Mod soTSLop > 0 Then 'TH3: So thi sinh khong chia het cho cac phong thi'
TongSoPhongThi = soRec \ soTSLop - 1 'Tru bot 1 phong de chia 2 phong cuoi'
soTSPhanBo = ((soRec Mod soTSLop) + soTSLop) \ 2 'Phan bo 1/2 truoc, phan con lai chay den EOF'
If TongSoPhongThi > 0 Then
For i = 1 To TongSoPhongThi
stt = 1
Do Until .EOF Or stt > soTSLop
.Edit
!Phong = SoPhongThi + i
.Update
stt = stt + 1
.MoveNext
Loop
Next i
SoPhongThi = SoPhongThi + i
stt = 1
Do Until stt > soTSPhanBo Or .EOF
.Edit
!Phong = SoPhongThi
.Update
stt = stt + 1
.MoveNext
Loop
SoPhongThi = SoPhongThi + 1
Do Until .EOF
.Edit
!Phong = SoPhongThi
.Update
.MoveNext
Loop
Else
stt = 1
SoPhongThi = SoPhongThi + 1
Do Until stt > soTSPhanBo Or .EOF
.Edit
!Phong = SoPhongThi
.Update
stt = stt + 1
.MoveNext
Loop
SoPhongThi = SoPhongThi + 1
Do Until .EOF
.Edit
!Phong = SoPhongThi
.Update
.MoveNext
Loop
End If
End If
End With
NextMaMon:
rsMaMon.MoveNext
Loop
rsKhuVuc.MoveNext
Loop
ErrHandler_Exit:
Exit Function
ErrHandler:
MsgBox "Ma Loi: " & Err.Number & vbCrLf & "Dien Giai: " & Err.Description
Resume ErrHandler_Exit
End Function
bằng lăng > 01-10-18, 07:57 AM
ongke0711 > 01-10-18, 11:26 AM
(01-10-18, 07:57 AM)bằng lăng Đã viết: Em chạy code
Báo lỗi Run-time error '3021'
No current record
Lỗi này là sao vậy ongke0711
bằng lăng > 01-10-18, 12:22 PM
(01-10-18, 11:26 AM)ongke0711 Đã viết: Lúc trước tôi chưa bẫy lỗi hết nên bị vậy.
Lỗi này là do vòng lặp nó chạy đến record cuối mà chưa nhảy ra khỏi vòng lặp bên báo lỗi.
Đã chỉnh lại trong code ở trên, bạn copy lại đi nhé.