2013-07-31 24 views
5

Cảm ơn bạn đã đến với chủ đề này.Excel VBA: Làm thế nào để tháo chỉ một phạm vi tự động tại một thời điểm? Mã số được cung cấp

Những gì tôi có:

báo cáo -A với AutoFilter trên các hàng A: G

Những gì tôi cần:

đang -Circumstantial rằng unfilters một cột cụ thể nếu có một bộ lọc trên đó.

-Xoá mã của tôi bên dưới sẽ giải mã toàn bộ phạm vi A: G.

-Trong trường hợp này, tôi chỉ muốn "F" chưa được lọc, để lại bất kỳ bộ lọc nào khác nếu chúng được lọc.

With Sheets("DATA") 
    If .Range("F1").AutoFilter = True Then 
     ActiveSheet.Range("$A$1:$G$59826").AutoFilter Field:=6 
    Else 
    End If 
End With 

Mọi ý tưởng đều được đánh giá cao! Cảm ơn bạn rất nhiều!

+0

Mã của bạn có vẻ ổn với tôi, tôi cũng đã thử nghiệm và khi tôi thử nó chính xác như bạn yêu cầu, loại bỏ bộ lọc tự động khỏi trường đơn. – user2140261

+0

Khi tôi chạy mã, nó sẽ xóa toàn bộ bộ lọc tự động. – dendarii

+0

Tuy nhiên, nó cũng loại bỏ các trường khác đã được lọc. Vì vậy, bộ lọc tự động sẽ được đặt lại trong Cột B và C nếu chúng được lọc. Tôi thực sự đã trả lời câu hỏi của riêng mình, nhưng tôi không có đủ đại diện để trả lời câu hỏi đó. Heres mã: Addr = Split (ActiveSheet.UsedRange.Address, "$") lastRow = Addr (UBound (Addr)) Đối với r = lastRow Để 1 Bước -1 Nếu Len (ô (r, "A") .Value) Sau đó, lastRow = r Thoát Đối với Kết thúc Nếu Tiếp theo ActiveSheet.Range ("$ A $ 1: $ G" & lastRow).Trường Tự lọc: = 6 –

Trả lời

6

Hãy thử điều này:

Sub UnFilter() 
Dim ws As Excel.Worksheet 

Set ws = Worksheets("DATA") 
With ws 
    If .AutoFilterMode = True Then 
     If Not Intersect(.AutoFilter.Range, .Range("G1")) Is Nothing Then 
      .Range("$A$1:$G$59826").AutoFilter Field:=.Range("G:G").Column 
     End If 
    End If 
End With 
End Sub 

Dòng này trong mã của bạn:

If .Range("F1").AutoFilter = True 

... thực sự tắt tính năng lọc cho toàn bộ tấm. Thay vì kiểm tra mã của tôi nếu bảng được lọc với:

If .AutoFilterMode = True Then 

Nó sau đó kiểm tra nếu bộ lọc bao gồm cột G với:

If Not Intersect(.AutoFilter.Range, .Range("G1")) Is Nothing Then 

tôi đã thực hiện một vài thay đổi để làm cho mã của bạn linh hoạt hơn một chút . Nó cũng cho phép Intellisense đối tượng ws, điều này rất hữu ích. (Tôi luôn luôn tìm ra khác nhau Filter tính -related và phương pháp khó hiểu, đặc biệt là không tự động hoàn thành.)

1

này làm việc cho tôi

Sub UnfilterColumn() 

    With Worksheets("DATA") 
     If Not Worksheets("DATA").AutoFilter Is Nothing Then 
       ThisWorkbook.Sheets("DATA").Range("A1").AutoFilter Field:=6 
     End If 
    End With 

End Sub 
+0

Nó không làm việc cho tôi. Không có gì thay đổi khi nó chạy. Tôi có một bộ lọc trên cột khác và trên G. –

+0

Nếu bộ lọc bạn muốn xóa nằm trên cột G, sau đó sử dụng Trường: = 7 – dendarii

+0

Rất tiếc, đúng vậy, tôi đã có bộ lọc trên 6 bộ lọc. Tuy nhiên, nó vẫn thất bại nếu bộ lọc nằm trên một phần khác của trang tính, ví dụ, cột I. Sau đó, nó vượt qua bài kiểm tra 'Không phải là gì', nhưng có' Lỗi 1004' trên trường 'Dòng: = 6'' –

0

tôi chỉ nhập mã đơn giản dưới đây trong module và nó làm việc tốt cho tôi. Bạn sẽ muốn thay đổi phạm vi dữ liệu và trường của bạn để phù hợp với dữ liệu của bạn. Tôi đang xóa một bộ lọc có dữ liệu trong các cột từ A đến M. Dòng 8 là cột H.

ActiveSheet.Range("$A:$M").AutoFilter Field:=8