2013-07-31 3 views
5

इस धागे पर आने के लिए धन्यवाद।एक्सेल वीबीए: एक समय में केवल एक ऑटोफिल्टर रेंज को कैसे बेकार करें? कोड प्रदान किया गया

मैं क्या है: पंक्तियों पर एक स्वत: फ़िल्टर एक साथ

-एक रिपोर्ट: जी

मैं क्या जरूरत है:

-Circumstantial कोड जो किसी विशेष स्तंभ unfilters अगर कोई है उस पर एक फ़िल्टर।

- नीचे दिए गए मेरे कोड को ए: जी की पूरी श्रृंखला में घुसपैठ कर रहा है।

- इस उदाहरण में, मैं केवल "एफ" को फ़िल्टर करना चाहता हूं, अगर उन्हें फ़िल्टर किया जाता है तो अकेले अन्य फ़िल्टर छोड़ दें।

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

किसी भी और सभी विचारों की बहुत सराहना की जाती है! आपको बहुत - बहुत धन्यवाद!

+0

आपका कोड मुझे ठीक लग रहा है, मैंने इसका परीक्षण भी किया और जब मैं इसे आजमाता हूं तो यह वैसे ही करता है जैसा आप पूछते हैं, एकल क्षेत्र से ऑटोफिल्टर हटा देता है। – user2140261

+0

जब मैं कोड चलाता हूं तो यह पूरी तरह ऑटोफिल्टर को हटा देता है। – dendarii

+0

हालांकि, यह उन अन्य फ़ील्ड को भी हटा देता है जिन्हें पहले ही फ़िल्टर किया जा चुका है। तो ऑटोफिल्टर को कॉलम बी और सी में रीसेट कर दिया जाएगा यदि वे फ़िल्टर किए गए हैं। मैंने वास्तव में अपने स्वयं के प्रश्न का उत्तर दिया, लेकिन मेरे पास जवाब देने के लिए पर्याप्त प्रतिनिधि नहीं है। कोड है: एडीआर = स्प्लिट (ActiveSheet.UsedRange.Address, "$") lastRow = Addr (UBound (Addr)) आर = lastRow 1 चरण -1 यदि लेन (सेल (आर, "ए") । वैल्यू) फिर lastRow = r के लिए बाहर निकलें अगला ActiveSheet.Range ("$ A $ 1: $ G" और LastRow)।ऑटोफिल्टर फ़ील्ड: = 6 –

उत्तर

6

इस प्रयास करें:

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 

अपने कोड में यह पंक्ति:

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

... वास्तव में पूरी शीट के लिए छानने बंद हो जाती है। इसके बजाय मेरे कोड की जाँच करता शीट के साथ फ़िल्टर किया जाता है, तो:

If .AutoFilterMode = True Then 

यह तो चेक के फिल्टर के साथ स्तंभ जी भी शामिल है:

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

मैं अपने कोड एक छोटे से अधिक लचीला बनाने के लिए परिवर्तन की एक जोड़ी बना । यह ws ऑब्जेक्ट के लिए इंटेलिसेंस को भी सक्षम बनाता है, जो सहायक है। (मैं हमेशा विशेष रूप से स्वत: पूर्ण करने के बिना, विभिन्न Filter से संबंधित गुण और विधियों संशय है।)

1

यह मैं

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

यह मेरे लिए काम नहीं करता है। जब यह चलता है तो कुछ भी नहीं बदलता है। मेरे पास एक और कॉलम पर एक फ़िल्टर है और जी –

+0

पर यदि आप जिस फ़िल्टर को हटाना चाहते हैं वह कॉलम जी पर है, तो फ़ील्ड का उपयोग करें: = 7 – dendarii

+0

ओह, ठीक है आप हैं, मेरे पास अभी भी 6 पर था। हालांकि, यह तब भी विफल रहता है जब फ़िल्टर शीट के दूसरे भाग पर है, उदाहरण के लिए, कॉलम I। फिर यह 'कुछ भी नहीं है' परीक्षण पास करता है, लेकिन 'फ़ील्ड: = 6' लाइन ' –

0

के लिए काम किया मैं सिर्फ मॉड्यूल में नीचे सरल कोड में प्रवेश किया और यह ठीक काम किया मेरे लिए। आप अपने डेटा से मेल खाने के लिए अपनी डेटा रेंज और फ़ील्ड को बदलना चाहेंगे। मैं स्तंभों में डेटा के साथ एक फ़िल्टर साफ़ कर रहा हूं एम। फील्ड 8 के माध्यम से कॉलम एच

ActiveSheet.Range("$A:$M").AutoFilter Field:=8 
संबंधित मुद्दे