Lỗi Worksheet change cho 2 cột khác nhau

Liên hệ QC

lp0072021

Thành viên chính thức
Tham gia
23/8/22
Bài viết
60
Được thích
3
Chào anh/ chị ,
Em nhờ anh chị sửa code giúp em khi thay đổi ở cột J hoặc K trong cùng 1 sheet thì sự kiện ở cột đó thực hiện . Hiện giờ chỉ có cột J thực hiện được, còn cột K không thực hiện được, cảm ơn các anh chị. (file đính kèm)
 

File đính kèm

  • Nhaplieu.xlsm
    60.7 KB · Đọc: 7
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")
 
Upvote 0
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")
Em sửa rồi thì lại bị lỗi chỗ này ạ
1662365438694.png
 
Upvote 0
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.
 
Lần chỉnh sửa cuối:
Upvote 0
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.
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.
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é.
 
Upvote 0
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.
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é.
Trích bài trước, bài cuối
Tôi thấy bài của mình bị lờ đi. Thôi, tôi dừng ở đây.
 
Upvote 0
Web KT
Back
Top Bottom