Hỏi. Kiểm tra điều kiện trùng trong Excel bằng VBA

Liên hệ QC

Trên trời rơi xuống

Thành viên mới
Tham gia
5/3/09
Bài viết
3
Được thích
0
Mình có bài tập này cần hỏi các bạn.
Yêu cầu như sau:
Lập lịch thi học kỳ cho 1 trường Đại học. Kiểm tra điều kiện nếu trong 1 ngày thi, giờ thi mà có tên 2 cán bộ coi thi trùng tên thì báo lỗi

(yêu cầu sử dụng VBA)

lichthi.JPG


Như trên hình, ngày 11/02/2009 vào lúc 8h có 2 môn thi khác nhau, nhưng người phân lịch thi đã điền tên của 1 cán bộ coi thi vào cả 2 môn thi. Chương trình phải đưa thông báo lỗi yêu cầu người dùng nhập lại.

Bài toán đặt ra là:
Trong 1 ngày thi, một giờ thi có nhiều môn thi khác nhau, tại các phòng khác nhau.
Khi một giáo viên đã được phân công coi thi rồi, nếu phát hiện thấy trong Ngày-Giờ đó, nếu giáo viên đó cũng được phân công coi thi ở 1 phòng khác/môn khác thì báo lỗi.
Yêu cầu ban đầu là kiểm tra tên cán bộ coi thi nhập vào có bị trùng hay ko

Mong bạn giải thích cặn kẽ giúp mình!
 
Lần chỉnh sửa cuối:
Bạn thử xem file tôi gửi kèm đã được chưa nhé.
 

File đính kèm

Upvote 0
Mình đã xem file gửi kèm của bạn. Cám ơn bạn đã quan tâm, nhưng có lẽ bạn chưa hiểu rõ yêu cầu.

coithi02.JPG


Yêu cầu ở đây là kiểm tra điều kiện Thời gian coi thi.
Nếu khác ngày, hoặc cùng ngày, khác giờ thi thì bỏ qua, ko cần kiểm tra điều kiện trùng tên.
Nếu trong 1 buổi thi (cùng Ngày-Giờ thi) kiểm tra thấy trùng tên thì báo lỗi, yêu cầu nhập lại.

Trên hình vẽ, chỗ đánh dấu màu vàng là ko được, còn màu xanh và màu hồng là đúng.
 
Upvote 0
Hề hề, tôi test lại thấy nó OK.
Hãy nhập giờ trước, rồi mới nhập đến tên CB coi thi. Cán bộ coi thi sẽ được liệt kê trên từng cột theo giờ phân công.
Bạn tham khảo đoạn mã của tôi để lọc thêm điều kiện ngày nữa là được, tuy chưa hay lắm vì tôi mới nghĩ ra cách làm khác nhưng đang bận quá.
À quên, nhập tên CB xong nhớ nhấn Enter nhé.
 
Upvote 0
Nhờ kiểm tra lỗi

Nhờ các bạn kiểm tra hộ mình lỗi trong code dưới đây
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Rng As Range
 Dim sRng As Range
 Dim sDate As Range
 Dim sTime As Range
 Dim i As Integer
 Dim f As Boolean
  
 Set Rng = Columns("D:E")
 
 If Not Intersect(Target, Rng) Is Nothing Then
    Set sDate = Cells(Target.Row, 2)
    Set sTime = Cells(Target.Row, 3)
    i = Target.Row
    f = False
    Do While Cells(i, 2).Value = sDate.Value And f = False
        If Cells(i, 3).Value = sTime.Value Then
            Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
            If Not sRng Is Nothing Then
                Target.Value = ""
                f = True
            End If
            i = i - 1
        End If
    Loop
 End If
End Sub
Khi mình gõ tên cán bộ thì chương trình tự động xóa ô mình nhập, dù nó có trùng với tên cán bộ đã nhập hay không? Lỗi này do mình bắt đầu tìm kiếm từ hàng vừa nhập
(i = Target.Row) mà mình không xét điều kiện Địa chỉ ô tìm thấy bị trùng phải khác địa chỉ ô vừa nhập.
Nhưng nếu mình thêm điều kiện khác địa chỉ:
Thay
PHP:
If Not sRng Is Nothing Then
thành
PHP:
If Not sRng Is Nothing And sRng.Address <> Target.Address Then
thì chương trình báo lỗi tại dòng này;
Hoặc mình bắt đầu tìm kiếm ở hàng trên hàng vừa nhập:
Thay
PHP:
i = Target.Row
thành
PHP:
 i = Target.Row - 1
thì chương trình treo +-+-+-+

Mong các bạn trả lời giúp mình vấn đề này.
Cám ơn!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cho em hỏi có cách nào gán macro cho cell nào đó để mình nhấn enter thì nó tự động chạy con macro đó không các bác.
 
Upvote 0
Web KT

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

Back
Top Bottom