Nhờ sửa giúp code VBA

Liên hệ QC

longlt08

Thành viên thường trực
Tham gia
23/3/08
Bài viết
321
Được thích
400
Xin chào các anh, chị GPE !
Tôi mới học VBA có một lỗi mà chưa biết cách sửa chữa như thế nào, nhờ mọi người giúp đỡ. Tôi đã viết đoạn code để lọc danh sách duy nhất(Autofilter). Khi lọc, nếu chọn cả tiêu đề thì DS công trình duy nhất là đầy đủ. Nếu không chọn tiêu đề thì sẽ có công trình đầu tiên bị trùng(2 lần). Mong được mọi người giúp đỡ. Thanks. Tôi xin gửi file kèm theo
 

File đính kèm

Xin chào các anh, chị GPE !
Tôi mới học VBA có một lỗi mà chưa biết cách sửa chữa như thế nào, nhờ mọi người giúp đỡ. Tôi đã viết đoạn code để lọc danh sách duy nhất(Autofilter). Khi lọc, nếu chọn cả tiêu đề thì DS công trình duy nhất là đầy đủ. Nếu không chọn tiêu đề thì sẽ có công trình đầu tiên bị trùng(2 lần). Mong được mọi người giúp đỡ. Thanks. Tôi xin gửi file kèm theo


Lưu ý bạn rằng khi dùng Advanced Filter thì bắt buộc phải có dòng tiêu đề nếu không muốn bị mắc lỗi như bạn là có hai dữ liệu trùng nhau. bài này bạn đã tham khảo bài trích lọc duy nhất của bạn vungoc và câu trả lời cũng nằm ngay tại topic đó. Bạn đọc và ngiên cứu lại nha.
Thân
 
Upvote 0
Chào bạn Minh Nguyệt !
Mình đang mò mẫm học VBA mà ! Tài liệu chủ yếu là giáo trình của Thày Hướng và tham khảo trên GPE. Thú thật, trình độ còn kém quá, vừa học vừa tập nên phải lâu mới " vỡ" ra được. Mình hỏi vướng mắc trên cũng do đã "nghiên cứu" mấy ngày chưa ra nên mới nhờ các "cao thủ" chỉ bảo, chứ còn hiểu ra ngay "câu trả lời cũng nằm ngay tại topic" thì còn nói làm gì. Mong bạn thông cảm nhé.

From Sa_DQ: Bạn thử thu 1 macro dùng phương thức AdvancedFilter & xem VBA nó viết như thế nào;
Đó cũng là cách tiếp cận với VBA đó nha!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Chào bạn Minh Nguyệt !
Mình đang mò mẫm học VBA mà ! Tài liệu chủ yếu là giáo trình của Thày Hướng và tham khảo trên GPE. Thú thật, trình độ còn kém quá, vừa học vừa tập nên phải lâu mới " vỡ" ra được. Mình hỏi vướng mắc trên cũng do đã "nghiên cứu" mấy ngày chưa ra nên mới nhờ các "cao thủ" chỉ bảo, chứ còn hiểu ra ngay "câu trả lời cũng nằm ngay tại topic" thì còn nói làm gì. Mong bạn thông cảm nhé.
Thực ra bạn có thể rút gọn code hơn mà không cần phải thông qua vùng phụ tại HH3 làm gì
PHP:
Sub TaoCTrinh()
  tonghopCT.Range("A7").CurrentRegion.ClearContents
  With Range(chitietCT.[B2], chitietCT.[D65536].End(xlUp)).Resize(, 1)
    .AdvancedFilter 1, , , True
    Intersect(.Cells, .Offset(1)).SpecialCells(12).Copy
    tonghopCT.Range("B7").PasteSpecial 3
    .Parent.ShowAllData
  End With
  tonghopCT.Range("A7").CurrentRegion.Resize(, 1).Value = Evaluate("ROW(R:R)")
End Sub
Với code này sẽ giúp bạn lấy dử liệu chính, không lấy tiêu đề và cũng không cần phải thông qua vùng phụ luôn ---> Ngắn gọn chứ?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Thực ra bạn có thể rút gọn code hơn mà không cần phải thông qua vùng phụ tại HH3 làm gì
PHP:
Sub TaoCTrinh()
  tonghopCT.Range("A7").CurrentRegion.ClearContents
  With Range(chitietCT.[B2], chitietCT.[D65536].End(xlUp)).Resize(, 1)
    .AdvancedFilter 1, , , True
    Intersect(.Cells, .Offset(1)).SpecialCells(12).Copy
    tonghopCT.Range("B7").PasteSpecial 3
    .Parent.ShowAllData
  End With
  tonghopCT.Range("A7").CurrentRegion.Resize(, 1).Value = Evaluate("ROW(R:R)")
End Sub
Với code này sẽ giúp bạn lấy dử liệu chính, không lấy tiêu đề và cũng không cần phải thông qua vùng phụ luôn ---> Ngắn gọn chứ?

Xin cảm ơn ndu96081631 !
Đúng là ngắn hơn thật ! Mình rất cảm ơn bạn. Do chưa qua " trường lớp" về môn này nên mình vừa làm vừa học, vừa đúc rút kinh nghiệm. Hy vọng được các bạn tiếp tục giúp đỡ.
Nếu có thể được bạn giúp thêm cho mình cách sửa đoạn VBA mình đã viết để có kết quả giống như của bạn được không ? Thanks !
 
Upvote 0
Xin cảm ơn ndu96081631 !
Đúng là ngắn hơn thật ! Mình rất cảm ơn bạn. Do chưa qua " trường lớp" về môn này nên mình vừa làm vừa học, vừa đúc rút kinh nghiệm. Hy vọng được các bạn tiếp tục giúp đỡ.
Nếu có thể được bạn giúp thêm cho mình cách sửa đoạn VBA mình đã viết để có kết quả giống như của bạn được không ? Thanks !
Thì bạn cứ thay đoan code của bạn thành code tôi vừa viết là xong chứ gì
 

File đính kèm

Upvote 0
Thì bạn cứ thay đoan code của bạn thành code tôi vừa viết là xong chứ gì
hôm nay 08:24 AM
Chào bạn ndu96081631 ! Bạn chưa hiểu ý của tôi: Đương nhiên là đoạn mã VBA của bạn ngắn gọn và kết quả rất tốt. Tôi đã thử rồi. Ý của tôi là muốn bạn chữa giúp lối do tôi dùng autofilter trong đoạn mã VBA tôi viết trước đó. Tôi muốn biết cách khắc phục như thế nào để rút kinh nghiệm. Còn cứ "xài luôn" kết quả của bạn thì được ngay nhưng "chưa vỡ" ra được vấn đề. Ý của tôi là như vậy. Bạn thông cảm nhé. Cảm ơn bạn !
 
Upvote 0
hôm nay 08:24 AM
Chào bạn ndu96081631 ! Bạn chưa hiểu ý của tôi: Đương nhiên là đoạn mã VBA của bạn ngắn gọn và kết quả rất tốt. Tôi đã thử rồi. Ý của tôi là muốn bạn chữa giúp lối do tôi dùng autofilter trong đoạn mã VBA tôi viết trước đó. Tôi muốn biết cách khắc phục như thế nào để rút kinh nghiệm. Còn cứ "xài luôn" kết quả của bạn thì được ngay nhưng "chưa vỡ" ra được vấn đề. Ý của tôi là như vậy. Bạn thông cảm nhé. Cảm ơn bạn !
Advanced Filter bản chất nó như thế rồi, đâu có gì mà sửa ---> Tức là khi dùng Advanced Filter bắt buộc bạn phải lấy tiêu đề, nếu không thì nó cũng "tự lấy" cell đầu tiên làm tiêu đề, khi ấy bạn nhận được dử liệu bị trùng là điều đương nhiên thôi
Chính vì lẽ đó nên tôi mới đề nghị bạn cách khác:
- Lọc Advanced Filter tại chổ (tức không copy sang nơi khác)
- Sau khi lọc xong thì vô tư copy gì đó tùy thích
 
Upvote 0
Web KT

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

Back
Top Bottom