If Intersect(Target, Range("J11:J" & lr1 & ",K11:K" & lr1)) Is Nothing Or IsEmpty(Target) Or Target.Count > 1 Then Exit Sub
If Intersect(Target, Range("J11:K" & lr1)) Is Nothing Or IsEmpty(Target) Or Target.Count > 1 Then Exit Sub
Em sửa rồi thì lại bị lỗi chỗ này ạSửa thành
Mã:If Intersect(Target, Range("J11:J" & lr1 & ",K11:K" & lr1)) Is Nothing Or IsEmpty(Target) Or Target.Count > 1 Then Exit Sub
Nhưng do 2 cột J và K cạnh nhau nên có thể dùng
Mã:If Intersect(Target, Range("J11:K" & lr1)) Is Nothing Or IsEmpty(Target) Or Target.Count > 1 Then Exit Sub
vd. nếu lr = 21 thì
Range("J11:J" & lr1 & ",K11:K" & lr1) -> Range("J11:J21,K11:K21") -> Range("J11:K21")
Range("J11:K" & lr1) -> Range("J11:K21")
If Not u1 Is Nothing Then
For Each cell1 In u1
If Not IsEmpty(cell1.Value) And cell1.Value <> Target.Value Then
If MsgBox("Có nhap cac dong trong cung ID khong ?", vbYesNo) = vbNo Then
Exit Sub
Else: Exit For
End If
End If
Next
u1.Value = Target.Value
End If
If u1 Is Nothing Then Exit Sub
Em sửa lại như vậy thì được cột J hoạt động, còn cột K vẫn không hoạt động ạ.if u1 is nothing then exit sub
Chỗ này em sửa rồi nhưng mà còn cột K vẫn không hoạt động ạ.if u2 is nothing then exit sub
1. "Tìm trong cột AQ giá trị của một ô thuộc cột AQ" => Chỗ này em muốn khi nhập liệu ở cột J hoặc cột K xét nếu cột AQ có cùng số ID thì những dòng còn lại ở J,K gán cho giá trị vừa nhập.1. Do ta xét Target là cột J hoặc K nên xóa tử dòng 'tu dong nhap cot K tới cuối. Code sẽ xét gộp J và K.
2. Để mất lỗi thì quá dễ. Chỉ cần cho vào cụm IF ... END IF
Mã:If Not u1 Is Nothing Then For Each cell1 In u1 If Not IsEmpty(cell1.Value) And cell1.Value <> Target.Value Then If MsgBox("Có nhap cac dong trong cung ID khong ?", vbYesNo) = vbNo Then Exit Sub Else: Exit For End If End If Next u1.Value = Target.Value End If
Hoặc trước dòng vàng thêm dòng
Mã:If u1 Is Nothing Then Exit Sub
Tuy nhiên code của bạn có rất nhiều vấn đề.
Bạn có:
Set f1 = Range("AQ11:AQ" & lr1).Find(Target.Offset(0, 33).Value, Range("AQ11"))
nhưng tôi đoán mò phải là
Set f1 = Range("AQ11:AQ" & lr1).Find(Target.Value, Range("AQ11"))
Tức tìm trong cột AQ cái vừa nhập ở cột J hoặc K. Chứ ai lại đi tìm trong cột AQ giá trị của một ô thuộc cột AQ?
Ngoài ra code trên là không chuẩn. Nếu trước đó trong code khác hoặc ngoài sheet bạn dùng Home -> FIND với tìm chính xác / không chính xác thì bây giờ code này cũng sẽ tìm chính xác hoặc không chính xác (tìm thấy "B2" trong "B22222"), tức HÊN / XUI. Hãy tập viết TƯỜNG MINH. Muốn tìm chính xác thì viết tìm chính xác, nếu tìm không chính xác thì cũng viết tường minh. Và bỏ kiểu Dim lr1&, f1, k1& đi. Đừng học thói quen xấu của người khác. Tường minh, tường minh, muôn đời tường minh.
Tất nhiên không phải là f1.Offset(0, -33) mà là Target
Tất nhiên nếu trong Worksheet_Change muốn sửa gì đó trên sheet thì phải tắt phục vụ sự kiện đi để cái chỉnh sửa kia không khởi động một lần nữa Worksheet_Change.
Tốt nhất là hãy mô tả kỹ code phải làm những gì, mô tả từng chi tiết. Lúc đó có thể có người viết hộ lại code.
---------------------
Còn nhiều chỗ sai, không chính xác. Sửa mỗi chỗ đó thì có mà đến mùng thớt.
Tôi thấy bài của mình bị lờ đi. Thôi, tôi dừng ở đây.
Trích bài trước, bài cuối1. "Tìm trong cột AQ giá trị của một ô thuộc cột AQ" => Chỗ này em muốn khi nhập liệu ở cột J hoặc cột K xét nếu cột AQ có cùng số ID thì những dòng còn lại ở J,K gán cho giá trị vừa nhập.
2. "Dim lr1&, f1, k1& " => thực ra cái này em cũng mò theo thôi, anh xem có hướng nào xứ lý tốt gì giúp em với.
Mục đích code này : Khi nhập liệu ở cột J (hoặc cột K) xét nếu có cùng số ID ở cột AQ thì tự động nhập cho các dòng còn lại của cột J (cột K cũng tương tự). Cảm ơn anh nhé.
Tôi thấy bài của mình bị lờ đi. Thôi, tôi dừng ở đây.