Viết code như thế nào khi muốn đổi nội dung list data valition thì cột tham chiếu cũng tự động thay đổi

Liên hệ QC
Trời ơi, cô gái ơi, thông tin quan trọng thế mà bây giờ em mới tiết lộ?
Nữ thì có khác gì chơi cờ vua được thêm con xe. Bao chàng trai mơ được là hoàng tử, là cứu tinh của người đẹp.

Bạn phải biết những thông tin nào quan trọng để khi ráp vào tập tin cụ thể thì biết phải sửa những gì.

1. Danh sách dùng cho DV nằm ở đâu - ở sheet nào?
Do bạn sẽ chỉnh sửa danh sách dùng cho DV và bạn muốn code phản ứng ngay tắp lự với thay đổi đó để chỉnh sửa những chỗ đã chọn ở sheet khác, nên bạn phải biết đó là sheet nào để đặt code vào đúng sheet đó. Trước đó ở tập tin ví dụ thì danh sách nằm ở Sheet1 nên người ta đặt code ở Sheet1. Bây giờ danh sách nằm ở sheet "DSSP" nên code phải đặt ở sheet "DSSP".

2. Danh sách nằm ở cột nào?
Ở tập tin ví dụ thì danh sách nằm ở cột A, vì thế trong code có If Target.Column = 1 ... Bây giờ danh sách nằm ở cột D nên phải sửa thành
... Target.Column = 4 (cột D). Tôi thêm cả điều kiện về dòng - Target.Row >= 3. Tức mọi thay đổi ở dòng 1 và 2 không phục vụ.
Tóm lại thay đổi dòng cũ thành
Mã:
If Target.Count = 1 And Target.Row >= 3 And Target.Column = 4 Then

3. Code sẽ tìm các mục để chỉnh sửa ở sheet nào, cột nào? Tức DV ở sheet nào, cột nào?
Trước đó DV ở sheet2, cột C. Bây giờ DV nằm ở sheet "Danh Sach", cột H nên phải thay bằng
Worksheets("Danh Sach").Range("H5:H1000").Replace What:=oldValue, Replacement:=newValue, _
LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True

Tôi dùng Range("H5:H1000") thay cho Columns("H").

Mỗi khi ráp vào tập tin cụ thể bạn phải chú ý 3 điểm tôi ghi ở trên thì code mới được để đúng chỗ và chạy chuẩn.
-----------
Toàn bộ code đã sửa từ code của bạn Phuocam ở dưới.

Trong tập tin đính kèm đã có code được sửa. Tôi cũng xóa toàn bộ (biến thành chú thích) code trong sheet "Danh Sach".

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim newValue As Variant, oldValue As Variant
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    If Target.Count = 1 And Target.Row >= 3 And Target.Column = 4 Then
        newValue = Target.Value
        Application.Undo
        oldValue = Target.Value
        Target.Value = newValue
        Worksheets("Danh Sach").Range("H5:H1000").Replace What:=oldValue, Replacement:=newValue, _
           LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True
    End If
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
 

File đính kèm

  • NAM168-FILE NHẬP TP.xlsm
    53.4 KB · Đọc: 18
Trời ơi, cô gái ơi, thông tin quan trọng thế mà bây giờ em mới tiết lộ?
Nữ thì có khác gì chơi cờ vua được thêm con xe. Bao chàng trai mơ được là hoàng tử, là cứu tinh của người đẹp.

Bạn phải biết những thông tin nào quan trọng để khi ráp vào tập tin cụ thể thì biết phải sửa những gì.

1. Danh sách dùng cho DV nằm ở đâu - ở sheet nào?
Do bạn sẽ chỉnh sửa danh sách dùng cho DV và bạn muốn code phản ứng ngay tắp lự với thay đổi đó để chỉnh sửa những chỗ đã chọn ở sheet khác, nên bạn phải biết đó là sheet nào để đặt code vào đúng sheet đó. Trước đó ở tập tin ví dụ thì danh sách nằm ở Sheet1 nên người ta đặt code ở Sheet1. Bây giờ danh sách nằm ở sheet "DSSP" nên code phải đặt ở sheet "DSSP".

2. Danh sách nằm ở cột nào?
Ở tập tin ví dụ thì danh sách nằm ở cột A, vì thế trong code có If Target.Column = 1 ... Bây giờ danh sách nằm ở cột D nên phải sửa thành
... Target.Column = 4 (cột D). Tôi thêm cả điều kiện về dòng - Target.Row >= 3. Tức mọi thay đổi ở dòng 1 và 2 không phục vụ.
Tóm lại thay đổi dòng cũ thành
Mã:
If Target.Count = 1 And Target.Row >= 3 And Target.Column = 4 Then

3. Code sẽ tìm các mục để chỉnh sửa ở sheet nào, cột nào? Tức DV ở sheet nào, cột nào?
Trước đó DV ở sheet2, cột C. Bây giờ DV nằm ở sheet "Danh Sach", cột H nên phải thay bằng


Tôi dùng Range("H5:H1000") thay cho Columns("H").

Mỗi khi ráp vào tập tin cụ thể bạn phải chú ý 3 điểm tôi ghi ở trên thì code mới được để đúng chỗ và chạy chuẩn.
-----------
Toàn bộ code đã sửa từ code của bạn Phuocam ở dưới.

Trong tập tin đính kèm đã có code được sửa. Tôi cũng xóa toàn bộ (biến thành chú thích) code trong sheet "Danh Sach".

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim newValue As Variant, oldValue As Variant
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    If Target.Count = 1 And Target.Row >= 3 And Target.Column = 4 Then
        newValue = Target.Value
        Application.Undo
        oldValue = Target.Value
        Target.Value = newValue
        Worksheets("Danh Sach").Range("H5:H1000").Replace What:=oldValue, Replacement:=newValue, _
           LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True
    End If
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
Cảm ơn Anh rất nhiều ạ
Anh giải thích rất chi tiết
Em sẽ sửa lại ạ :)))
 
Hiện tại mình cũng có làm gợi ý như thế nhưng là dùng Hàm chứ mình không dùng code. Nếu bạn cần mình có thể share
 
Hiện tại mình cũng có làm gợi ý như thế nhưng là dùng Hàm chứ mình không dùng code. Nếu bạn cần mình có thể share
Em vẫn chưa ạ, e không biết sai ở đâu từ hướng dẫn của các anh ở trên, em gửi file anh có thể làm trên file gốc giúp e được không ạ, e muốn bên sheet “Danh Sach” khi e gắn data validation với thông tin gốc bên sheet “DSSP” khi em thay đổi thông tin bảng gốc thì cột tham chiếu cũng sẽ tự động thay đổi với những thông tin đã tham chiếu trước đó, ở đây e có 2 cột gắn data là “ tên sản phẩm” và “số thùng” bên sheet “Danh Sach”
Mong nhận được phản hồi từ anh ạ
Em cảm ơn
 

File đính kèm

  • FILE DANH SÁCH MẪU LƯU TP 2.xlsm
    45.4 KB · Đọc: 3
Nữ thì có khác gì chơi cờ vua được thêm con xe. Bao chàng trai mơ được là hoàng tử, là cứu tinh của người đẹp.
Cái này là ngày xưa thui bác ơi, chứ bản thân là nữ cháu chả thấy sự khác bọt nào cả.
 
Web KT
Back
Top Bottom