VBA Excel 2007 पंक्तियों को छिपाने के लिए कोड को गति देने में मदद करता है [बंद]


2

मैं एक VBA कोड लिखने की कोशिश कर रहा हूं जो स्वचालित रूप से पंक्तियों को छुपाता है यदि पंक्ति में एक मूल्य "" के बराबर है। मेरे मान की सीमा A37: A400 है। क्योंकि मेरी सीमा इतनी बड़ी है कि मेरा पिछला VbA धीमा है और एक समय में एक पंक्ति दिखता है। एक तेज कोड बनाने के लिए कोई भी विचार जो इस बड़ी सूची में जाएगा और एक त्वरित फैशन में पंक्तियों को छिपाएगा। अभी पंक्तियों को छिपाने में लगभग एक मिनट लगता है जो बहुत लंबा है।

Sub HideRows()
    Dim cell As Range
    For Each cell In Range("A37:A400")
        If Not IsEmpty(cell) Then
            If cell.Value = "" Then
                cell.EntireRow.Hidden = True
            End If
        End If
    Next
End Sub

सब HideRows () मंद सेल के रूप में रेंज में प्रत्येक सेल के लिए रेंज ("A37: A400") अगर नहीं है (सेल) तो अगर सेल। वाल्यू = "" तो फिर सेल ।EntireRow.Hidden = सच अंत यदि अगला अंत उप
John

हां, मैं किसी भी रिक्त मान को छिपाना चाहता हूं। लेकिन उपरोक्त कोड लंबे समय तक ले जाता है। यदि संभव हो तो मुझे फ़िल्टर के रूप में तेजी से कुछ चाहिए
John

मेरे पास और IF सेल में स्टेटमेंट है और यदि स्टेटमेंट सही नहीं है तो यह "" के बराबर है।
John

यदि आपका कोड दिखाता है तो मैं यह नहीं देख सकता कि यह कैसे काम कर सकता है If Not IsEmpty(cell) फिर कैसे करता है if Cell.Value कभी निष्पादित हो?
Dave

2
चर्चा के बाद, इसे हल नहीं किया जा सकता है क्योंकि बहुत सारे चर हैं जो बीस्पोक हैं और ओपी के लिए भी अद्वितीय हैं
Dave

जवाबों:


2

जोड़ने का प्रयास करें Application.ScreenUpdating = False अपने छिपाने के कोड से पहले, और जोड़ें Application.ScreenUpdating = True अपने छिपाने के कोड के बाद। आम तौर पर यह चाल लगभग 10x तक सबसे VBA मैक्रोज़ को गति देती है क्योंकि एप्लिकेशन को कोड रन के रूप में अपने आप को फिर से व्यवस्थित नहीं रखना पड़ता है।

यह आपके मामले में मदद करनी चाहिए क्योंकि आप व्यक्तिगत रूप से प्रत्येक सेल की जाँच कर रहे हैं और पंक्ति को व्यक्तिगत रूप से छिपा रहे हैं।


2
मैंने डेव रूक के जवाब में रेस्टाफेरियन की टिप्पणी पर ध्यान दिया, इसलिए मैंने जो लिखा है, उसे दोहराने के लिए माफी चाहता हूं हालाँकि, मुझे अभी भी लगता है ScreenUpdating = False चाल आमतौर पर अधिकांश मैक्रो को गति देने के लिए सामान्य रूप से मदद करती है
nagyben

1

मैं नहीं देखता कि आपका कोड कैसे काम करता है।

आपकी निम्न 2 पंक्तियाँ हैं

If Not IsEmpty(cell) Then
        If cell.Value = "" Then

यदि पहली पंक्ति खाली नहीं है, तो 2 वीं पंक्ति हमेशा झूठी होगी। पहली पंक्ति कह रही है "यदि कोशिका खाली नहीं है" और अगली पंक्ति कहती है "यदि रेखा खाली है" ... खैर, यह पहले से ही खाली नहीं होने के लिए मूल्यांकन किया गया है। इसलिए, आपको कभी भी पंक्ति को छिपाने में सक्षम नहीं होना चाहिए, इसलिए मैं खो गया हूं कि आपका कोड कैसे काम करता है - मुझे संदेह है कि कोड के बाहर कुछ और चल रहा है लेकिन ...

हालाँकि, यह मेरी मशीन पर ठीक काम करता है

Sub Button1_Click()
Dim cell As Range
    For Each cell In Range("A1:A1600")
        If cell.Value = "" Then
            cell.EntireRow.Hidden = True
        End If            
    Next
End Sub

मेरे पास 1600 पंक्तियाँ हैं, इसे निष्पादित करने में 5 सेकंड या तो लगते हैं


i COIED YOU CODE, फिर भी हर चीज को चलाने में लगभग एक मिनट लगता है। किसी चीज के लिए कोई विचार तेजी से
John

क्या ऐसा हो सकता है क्योंकि मेरे पास मूल्य के आधार पर बहुत सारे अन्य सूत्र हैं?
John

जॉन, मैं सोच इसलिए। मुझे लगता है कि हमें यह पता लगाने के लिए कि वास्तव में कुछ चीजों का परीक्षण करने की आवश्यकता है। हमें यह जानने की आवश्यकता है कि क्या दोष एक्सेल, वर्कशीट या कंप्यूटर के साथ है! सबसे पहले, क्या आप कृपया एक नया वर्कशीट खोल सकते हैं, और पंक्ति A1 में - A400 कृपया कुछ क्षेत्रों को आबाद करें, और दूसरों को खाली छोड़ दें। फिर अपना कोड रन करें। यह इंगित करेगा कि क्या गलती उस वर्कशीट से है जिस पर आप काम कर रहे थे।
Dave

मैंने इसे एक रिक्त स्प्रेडशीट में आज़माया, इसमें लगभग 5 सेकंड लगे लेकिन मेरी चादर में अभी भी एक मिनट लगता है
John

2
फिर पृष्ठ पर अन्य सूत्रों के कारण दोष है। और ऐसा कोई तरीका नहीं है जिससे मैं अनुमान लगा सकूं कि वह क्या है या हो सकता है, मुझे क्षमा करें। यदि समय एक समस्या है, तो आपको एक अलग दृष्टिकोण पर विचार करने की आवश्यकता है।
Dave
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.