VBA hủy lọc AutoFilter. Sao lại không gặp lỗi ?? (1 người xem)

  • Thread starter Thread starter MinhKhai
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

Thông thường có Autofilter đang bật, để làm 1 việc gì đó ( copy, đưa vào mảng ... ) mình thường thêm 1 câu điều kiện
Mã:
  If Autofiltermode then Autofiltermode =false
để bỏ chức năng autofilter, sau khi làm xong mọi chuyện thì mình sẽ bật autofilter cái vùng đó lại là xong !
 
Upvote 0
Thông thường có Autofilter đang bật, để làm 1 việc gì đó ( copy, đưa vào mảng ... ) mình thường thêm 1 câu điều kiện
Mã:
  If Autofiltermode then Autofiltermode =false
để bỏ chức năng autofilter, sau khi làm xong mọi chuyện thì mình sẽ bật autofilter cái vùng đó lại là xong !

Code này em chưa biết bao giờ.
Em hay Record Macro nên chưa biết nhiều code hay.
Với file của em và ý tưởng của bác, thì đặt code như thế nào để nó chạy ạ. Em thử rùi mà chưa thành công. Bác giúp em tiếp nhé
 
Upvote 0
1. Cái file trên Dropbox mình hết down được, nên không biết code bạn ra sao ( bạn nên up nó lên diễn đàn luôn đi )
2. Cái code này thường sẽ đặt đầu ( trước khi làm gì đó ). Sau khi làm xong hết các việc thì cuối code ta cho bật lại Autofilter cái vùng bạn cần là xong !
 
Upvote 0
1. Cái file trên Dropbox mình hết down được, nên không biết code bạn ra sao ( bạn nên up nó lên diễn đàn luôn đi )
2. Cái code này thường sẽ đặt đầu ( trước khi làm gì đó ). Sau khi làm xong hết các việc thì cuối code ta cho bật lại Autofilter cái vùng bạn cần là xong !

Xin lỗi đã không kiểm tra lại link. Em phải share thông qua DropBox hoặc OneDrive do việc up file lên server của diễn đàn rất khó khăn (như hình chụp bên dưới)

Anh xem giúp ở file đính kèm nhé

File gửi kèm: https://onedrive.live.com/?cid=0056deb7359223a1&id=56DEB7359223A1!1448&action=Share

Untitled.jpg
 
Upvote 0
1. Bạn thêm đoạn code của mình nhưng bạn phải cho "nó" biết là cần tắt chế độ Autofilter ở đâu chứ. Do đó phải sữa thành :
Mã:
 If Sheet3.AutoFilterMode Then Sheet3.AutoFilterMode = False

Đồng thời bạn thêm 1 code gần phía dưới là
Mã:
Sheet3.Range("a12:h" & Sheet3.Range("c1000").End(xlUp).Row).AutoFilter

là xong rồi
2.Mình đính kèm file bạn xem ok chưa nhé !
 

File đính kèm

Upvote 0
1. Bạn thêm đoạn code của mình nhưng bạn phải cho "nó" biết là cần tắt chế độ Autofilter ở đâu chứ. Do đó phải sữa thành :
Mã:
 If Sheet3.AutoFilterMode Then Sheet3.AutoFilterMode = False

Đồng thời bạn thêm 1 code gần phía dưới là
Mã:
Sheet3.Range("a12:h" & Sheet3.Range("c1000").End(xlUp).Row).AutoFilter

là xong rồi
2.Mình đính kèm file bạn xem ok chưa nhé !


Đã rất OK rùi bác ạ.

Nhìn code của em trông thật ngô nghê phải không. Không biết có thể viết gọn lại được không bác nhỉ ?
 
Upvote 0
Gửi tất cả mọi người

Cũng là file trên, em có cóp nhặt code trên diễn đàn để qua 1 nút nhấn là nó tự gửi email đi. Tuy nhiên, không hiểu sao lại bị lỗi ở code tạo file đính kèm.

Mong mọi người giúp đỡ.

Ngoài ra em khi dùng code gửi email bằng Outlook, nó luôn hiện hộp thoại bên dưới, làm sao để nó không hiện hộp thoại này nữa ạ ?? Với hộp thoại như dưới mà nhấn nút No, chương trình báo lỗi. Vậy code như nào để khi nhấn nút No chương trình dừng chạy không báo lỗi.

File gửi kèm: https://onedrive.live.com/?cid=0056deb7359223a1&id=56DEB7359223A1!1448&action=Share

Untitled.jpg
 
Upvote 0
1. Bạn thêm đoạn code của mình nhưng bạn phải cho "nó" biết là cần tắt chế độ Autofilter ở đâu chứ. Do đó phải sữa thành :
Mã:
 If Sheet3.AutoFilterMode Then Sheet3.AutoFilterMode = False

Từ nghĩa của câu lệnh IF trên, ta thấy có thể thay nó bằng

Mã:
 Sheet3.AutoFilterMode = False
 
Upvote 0
Tôi thường viết sub này và cho nó chạy trước khi trích lọc hay làm gì đó
Mã:
Sub HIEN(sh As Worksheet)
On Error Resume Next
     sh.Activate
        ActiveSheet.ShowAllData
        Exit Sub
End Sub

muốn sheet1 bỏ filter(hiện tại có hoặc không có filter)

Mã:
    Call HIEN(Sheet1)
 
Upvote 0
Tôi thường viết sub này và cho nó chạy trước khi trích lọc hay làm gì đó
Mã:
Sub HIEN(sh As Worksheet)
On Error Resume Next
     sh.Activate
        ActiveSheet.ShowAllData
        Exit Sub
End Sub

muốn sheet1 bỏ filter(hiện tại có hoặc không có filter)

Mã:
    Call HIEN(Sheet1)

Cảm ơn vì lần đầu thấy biến sh có kiểu Worksheet. Đã thử và nhận thấy sh phải là tên gốc của sheet. Tôi dùng chữ "gốc" là theo ý cá nhân để chỉ cái tên mà chỉ nhìn thấy nó khi mở code và không dính gì với tên sheet (kiểu như activesheet.name, hay sheets(3).name). Nếu có cách gọi khác xin chỉ rõ.

Tuy nhiên, nếu trên 1 sheet có 2 bảng thì các lệnh trên không còn chính xác
Mã:
Sub HIEN(sh As Worksheet)
On Error Resume Next
     sh.Activate
        ActiveSheet.ShowAllData
        Exit Sub
End Sub


Sub ThuNghiem1()
Call HIEN(Sheet1)
[G3].AutoFilter 3, "B*"
End Sub


Sub ThuNghiem2()
Call HIEN(Sheet1)
[A3].AutoFilter 3, "B*"
End Sub

Trong đó 1 bảng dính đến ô A3, còn bảng kia đến ô G3. Khi bảng A3 đang bật lọc (có nút lọc trên hàng tiêu đề thì sub ThuNghiem1 không cho kết quả đúng.

Lỗi này có lẽ được khắc phục một cách đơn giản là

Sheet1.AutoFilterMode = False

tức là "tắt lọc".

(Có thể còn sửa vì thử mã CODE /CODE)
Không sửa, nhưng đính kèm file
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn vì lần đầu thấy biến sh có kiểu Worksheet. Đã thử và nhận thấy sh phải là tên gốc của sheet. Tôi dùng chữ "gốc" là theo ý cá nhân để chỉ cái tên mà chỉ nhìn thấy nó khi mở code và không dính gì với tên sheet (kiểu như activesheet.name, hay sheets(3).name). Nếu có cách gọi khác xin chỉ rõ.

Tuy nhiên, nếu trên 1 sheet có 2 bảng thì các lệnh trên không còn chính xác
Mã:
Sub HIEN(sh As Worksheet)
On Error Resume Next
     sh.Activate
        ActiveSheet.ShowAllData
        Exit Sub
End Sub


Sub ThuNghiem1()
Call HIEN(Sheet1)
[G3].AutoFilter 3, "B*"
End Sub


Sub ThuNghiem2()
Call HIEN(Sheet1)
[A3].AutoFilter 3, "B*"
End Sub

Trong đó 1 bảng dính đến ô A3, còn bảng kia đến ô G3. Khi bảng A3 đang bật lọc (có nút lọc trên hàng tiêu đề thì sub ThuNghiem1 không cho kết quả đúng.

Lỗi này có lẽ được khắc phục một cách đơn giản là

Sheet1.AutoFilterMode = False

tức là "tắt lọc".

(Có thể còn sửa vì thử mã CODE /CODE)
Không sửa, nhưng đính kèm file

Cái mà bạn gọi là sheet gốc đó thường gọi là Sheet Code. Đó là tên sheet tại cửa sổ VBE bên tay trái khác với Sheet Name tên sheet.

Về vấn đề tại sao không thực hiện đươc trên 2 bảng như bạn đề cập, bạn có thể hiểu như sau:
Trong Excel không cho phép filter độc lập 2 bảng trên cùng 1 sheet, cái này dùng bằng tay cũng không thể nên tương ứng dùng Code cũng không thể.

Việc đặt biến as "Object" rất tiện lợi khi bạn sử dụng Code vì khi đó biến sẽ mang đầy đủ tính chất của đối tượng bạn chỉ cần dùng dấu chấm sau tên biến VBA sẽ liệt kê các phương thức và thuộc tính của đối tượng đó cho bạn. Vậy nên khi mới tìm hiểu VBA ban đầu thì chưa cần khai báo biến - (khó tiếp cận, chưa hiểu, chưa rõ, không thấy tác dụng...ý kiến chủ quan người dùng) nhưng khi tìm hiểu kỹ hơn thì bạn nên khai báo rành mạch để tận dụng lợi thế này mà cụ thể trường hợp này là các đối tượng trong Excel.
 
Upvote 0
Việc đặt biến as "Object" rất tiện lợi khi bạn sử dụng Code vì khi đó biến sẽ mang đầy đủ tính chất của đối tượng bạn chỉ cần dùng dấu chấm sau tên biến VBA sẽ liệt kê các phương thức và thuộc tính của đối tượng đó cho bạn.
.

Như code
sub xxxx(sh as Worksheet)
thì chắc Worksheet là 1 Object.

Xin hỏi cần tham khảo ở đâu danh sách (tương đối hoàn chỉnh đó) các object cùng phương thức và thuộc tính? Nếu có sẵn ví dụ càng tốt.

Cảm ơn
 
Upvote 0
.

Như code
sub xxxx(sh as Worksheet)
thì chắc Worksheet là 1 Object.

Xin hỏi cần tham khảo ở đâu danh sách (tương đối hoàn chỉnh đó) các object cùng phương thức và thuộc tính? Nếu có sẵn ví dụ càng tốt.

Cảm ơn

Về Object bạn co thể tìm hiểu tại topic này cũng như sử dụng từ khóa "Object in Excel", "các đối tượng trong Excel" để tìm kiếm

http://www.giaiphapexcel.com/forum/...book-mô-tả-chi-tiết-các-đối-tượng-trong-Excel
 
Upvote 0
Web KT

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

Back
Top Bottom