Computer >> कंप्यूटर ट्यूटोरियल >  >> सॉफ्टवेयर >> Office

Excel को प्रतिक्रियाशील रखें: VBA चलते समय लाइव प्रगति संदेश दिखाएं

Excel को प्रतिक्रियाशील रखें: VBA चलते समय लाइव प्रगति संदेश दिखाएं

जब कोड लंबा होता है और VBA मैक्रो कई सेकंड तक चलता है, तो Excel फ्रोजन या अनुत्तरदायी दिखाई दे सकता है। भले ही कोड ठीक से काम कर रहा हो, उपयोगकर्ता मान सकते हैं कि वर्कबुक फ्रोजन हो गया है क्योंकि स्क्रीन पर कुछ होता हुआ नहीं दिख रहा। इस समस्या से बचने का एक सरल तरीका है मैक्रो चलते समय Excel के स्टेटस बार में एक लाइव संदेश प्रदर्शित करना।

इस ट्यूटोरियल में, हम दिखाएंगे कि VBA चलते समय प्रगति संदेश कैसे प्रदर्शित करें। आपको UserForm या ग्राफिकल प्रोग्रेस बार की आवश्यकता नहीं है। कई मामलों में, Application.StatusBar पर्याप्त है।

Application.StatusBar का उपयोग क्यों करें?

Excel में एप्लिकेशन विंडो के नीचे एक बिल्ट-इन स्टेटस बार होता है। VBA उस क्षेत्र में सामान्य टेक्स्ट को अस्थायी रूप से एक कस्टम संदेश से बदल सकता है।

इसका मतलब है कि आपका मैक्रो निम्न जैसे अपडेट प्रदर्शित कर सकता है:

  • पंक्ति 10 का 100 में प्रसंस्करण
  • डेटा आयात हो रहा है…
  • सूत्र लिखे जा रहे हैं…
  • 65% पूर्ण

यह तब उपयोगी होता है जब आप चाहते हैं कि उपयोगकर्ता जानें कि मैक्रो अभी भी चल रहा है लेकिन पूर्ण दृश्य प्रोग्रेस बार बनाने का अतिरिक्त काम नहीं करना चाहते। आप पंक्ति गणना या प्रतिशत दिखाकर संदेश को अधिक जानकारीपूर्ण बना सकते हैं, लेकिन यह एक टेक्स्ट-आधारित समाधान रहता है।

बुनियादी सिंटैक्स:

Excel स्टेटस बार में संदेश दिखाने के लिए, उपयोग करें:

Application.StatusBar = "Processing..." 

जब आपका मैक्रो समाप्त हो जाए, तो स्टेटस बार को रीसेट करें:

Application.StatusBar = False 

Application.StatusBar = False सेट करने से स्टेटस बार का नियंत्रण Excel को वापस मिल जाता है, जिससे यह अपने डिफ़ॉल्ट संदेश फिर से प्रदर्शित कर सकता है। इस चरण को कभी न छोड़ें।

बुनियादी उदाहरण: सरल प्रगति संदेश

यह एक साधारण प्रगति संदेश के साथ सबसे बुनियादी संस्करण है। स्टेटस बार में, यह "रिपोर्ट चल रही है... कृपया प्रतीक्षा करें" दिखाएगा।

Sub SimpleStatusBar() Application.StatusBar = "Running report... please wait" ' Simulate work Dim i As Long For i = 1 To 50000 ' Your processing here Next i Application.StatusBar = False ' Restore the status bar MsgBox "Done!" End Sub 

यह काम करता है, लेकिन यह केवल एक निश्चित संदेश दिखाता है। यह उपयोगकर्ता को बताता है कि मैक्रो चल रहा है, लेकिन यह कोई वास्तविक प्रगति नहीं दिखाता।

लूप के दौरान लाइव प्रगति दिखाएं

अधिकांश वास्तविक मैक्रोज़ में, आप पंक्तियों, सेल्स, फ़ाइलों, या रिकॉर्ड को एक-एक करके प्रोसेस करते हैं। इससे लूप की प्रगति के रूप में स्टेटस बार को अपडेट करना आसान हो जाता है।

Sub ShowLoopProgress() Dim i As Long Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow ' Simple action Cells(i, "K").Value = "Processed" ' Update progress message Application.StatusBar = "Processing row " & (i - 1) & " of " & lastRow DoEvents Next i Application.StatusBar = False MsgBox "Task completed!" End Sub
  • DoEvents Excel को स्क्रीन रीफ्रेश करने और मैक्रो चलते समय प्रतिक्रिया देने की अनुमति देता है
  • इसके बिना, स्टेटस बार मैक्रो समाप्त होने तक दृश्य रूप से अपडेट नहीं हो सकता, विशेष रूप से लंबे लूप में
  • इसे अत्यधिक बड़े लूप में अति प्रयोग न करें जब तक आवश्यक न हो, क्योंकि यह निष्पादन को थोड़ा धीमा कर सकता है

नीचे, स्टेटस बार “Processing row 90 of 101” दिखाता है।

Excel को प्रतिक्रियाशील रखें: VBA चलते समय लाइव प्रगति संदेश दिखाएं

प्रतिशत संदेश जोड़ें

आप प्रगति संदेश में प्रतिशत शामिल करके इसे कस्टमाइज़ कर सकते हैं। आपको बस प्रतिशत की गणना करने और इसे स्टेटस बार टेक्स्ट में शामिल करने की आवश्यकता है।

Sub ShowPercentageProgress() Dim i As Long Dim lastRow As Long Dim percentDone As Double lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow ' Simple action Cells(i, "K").Value = "Processed" ' Update progress message percentDone = (i - 1) / (lastRow - 1) Application.StatusBar = "Processing row " & (i - 1) & " of " & (lastRow - 1) & _ " (" & Format(percentDone, "0%") & ")" DoEvents Next i Application.StatusBar = False MsgBox "Task completed!" End Sub 

यह कोड उपयोगकर्ता के लिए एक स्पष्ट स्टेटस अपडेट बनाता है, जो “Processing row 14 of 100 (14%)” दिखाता है।

Excel को प्रतिक्रियाशील रखें: VBA चलते समय लाइव प्रगति संदेश दिखाएं

सरल सूत्र कार्य के साथ उदाहरण

आइए एक व्यावहारिक उदाहरण देखें जो एक वर्कशीट क्रिया करता है। यह संस्करण एक कॉलम में एक साधारण बिक्री राशि सूत्र लिखता है।

Sub ShowProgressWithFormula() Dim i As Long Dim lastRow As Long Dim percentDone As Double lastRow = Cells(Rows.Count, "H").End(xlUp).Row For i = 2 To lastRow ' Simple action Cells(i, "K").Formula = "=H" & i & "*I" & i ' Update progress message percentDone = (i - 1) / (lastRow - 1) Application.StatusBar = "Writing formulas... " & _ "Row " & (i - 1) & " of " & (lastRow - 1) & _ " (" & Format(percentDone, "0%") & ")" DoEvents Next i Application.StatusBar = False MsgBox "Formulas added in column K!" End Sub 

यह एक सरल उदाहरण है, लेकिन यह उस प्रकार के वर्कशीट कार्य को बारीकी से दर्शाता है जो कई उपयोगकर्ता करते हैं।

एक टेक्स्ट-आधारित "नकली प्रोग्रेस बार"

Application.StatusBar एक वास्तविक ग्राफिकल प्रोग्रेस बार नहीं बना सकता। हालांकि, आप वर्णों का उपयोग करके एक बार बनाकर इसका अनुकरण कर सकते हैं।

Sub StatusBarWithTextProgressBar() Dim i As Long Dim lastRow As Long Dim percentDone As Double Dim barLength As Integer Dim filledBars As Integer Dim progressBar As String lastRow = Cells(Rows.Count, "A").End(xlUp).Row barLength = 20 For i = 2 To lastRow Cells(i, "K").Value = "Processed" percentDone = (i - 1) / (lastRow - 1) filledBars = Int(percentDone * barLength) progressBar = String(filledBars, "|") & String(barLength - filledBars, ".") Application.StatusBar = "Progress: [" & progressBar & "] " & _ Format(percentDone, "0%") DoEvents Next i Application.StatusBar = False MsgBox "Completed!" End Sub 

जब भी आप VBA चलाते हैं, स्टेटस बार कुछ इस तरह प्रदर्शित करेगा:

Progress: [||||||||||……….] 67%

यह अभी भी केवल टेक्स्ट है, लेकिन यह प्रगति की एक मजबूत दृश्य भावना प्रदान करता है।

Excel को प्रतिक्रियाशील रखें: VBA चलते समय लाइव प्रगति संदेश दिखाएं

सर्वोत्तम अभ्यास: हमेशा स्टेटस बार रीसेट करें

सबसे आम गलतियों में से एक मैक्रो के अंत में स्टेटस बार को पुनर्स्थापित करना भूल जाना है। यदि आप Application.StatusBar = False का उपयोग नहीं करते हैं, तो मैक्रो समाप्त होने के बाद भी Excel आपका कस्टम टेक्स्ट दिखाना जारी रख सकता है। एक सुरक्षित संस्करण सरल त्रुटि प्रबंधन का उपयोग करता है ताकि स्टेटस बार रीसेट हो जाए भले ही कुछ गलत हो जाए।

Sub SafeStatusMessage() Dim i As Long Dim lastRow As Long Dim percentDone As Double On Error GoTo CleanUp lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow Cells(i, "K").Value = "Processed" percentDone = (i - 1) / (lastRow - 1) Application.StatusBar = "Processing row " & (i - 1) & " of " & (lastRow - 1) & _ " (" & Format(percentDone, "0%") & ")" DoEvents Next i MsgBox "Task completed!" CleanUp: Application.StatusBar = False If Err.Number <> 0 Then MsgBox "Error: " & Err.Description End If End Sub 

यह पैटर्न वास्तविक दुनिया के उपयोग के लिए अधिक उपयुक्त है।

बेहतर स्टेटस संदेशों के लिए टिप्स

एक अच्छा स्टेटस बार संदेश छोटा और विशिष्ट होना चाहिए। अपने संदेशों को संक्षिप्त और उपयोगी रखें। अच्छे उदाहरणों में शामिल हैं:

  • बिक्री डेटा आयात हो रहा है…
  • डुप्लिकेट जांचे जा रहे हैं…
  • वर्कशीट फ़ॉर्मेट की जा रही है…
  • रिकॉर्ड 45 का 200 प्रसंस्कृत हो रहा है…
  • रिपोर्ट अंतिम रूप दी जा रही है…

वास्तव में किए जा रहे कार्य से संदेश का मिलान करने का प्रयास करें। यह मैक्रो को अधिक पेशेवर और भरोसेमंद महसूस कराता है।

तैयार पुन: प्रयोज्य पैटर्न

आप इस पैटर्न को लगभग किसी भी मैक्रो में पुन: उपयोग कर सकते हैं। बस इस कोड को कॉपी करें और जहां आवश्यक हो अपना तर्क डालें।

Sub MyMacro() On Error GoTo CleanUp Dim i As Long Dim total As Long total = 100 For i = 1 To total Application.StatusBar = "Processing item " & i & " of " & total DoEvents ' Your code here Next i CleanUp: Application.StatusBar = False End Sub 

निष्कर्ष

इस ट्यूटोरियल का पालन करके, आप VBA चलते समय आसानी से एक प्रगति संदेश प्रदर्शित कर सकते हैं। यदि आप उपयोगकर्ताओं को दिखाना चाहते हैं कि एक VBA मैक्रो अभी भी काम कर रहा है, तो Application.StatusBar उपलब्ध सबसे सरल टूल में से एक है। यह एक पूर्ण प्रोग्रेस बार नहीं है, लेकिन यह अक्सर पर्याप्त से अधिक होता है। यह दृष्टिकोण लागू करने में आसान, विश्वसनीय, न्यूनतम कोड की आवश्यकता होती है, और लंबे समय तक चलने वाली VBA प्रक्रियाओं के दौरान उपयोगकर्ता अनुभव को काफी सुधारता है। इसे अपने मैक्रोज़ में अपने मुख्य लूप के अंदर स्टेटस अपडेट रखकर टेस्ट करें—इसमें केवल कोड की कुछ पंक्तियाँ लगती हैं।

मुफ़्त उन्नत Excel अभ्यास समाधान के साथ प्राप्त करें!

  1. Microsoft Outlook को RSS फीड रीडर के रूप में कैसे उपयोग करें Microsoft Outlook को RSS फीड रीडर के रूप में कैसे उपयोग करें

    कई लोग जो सोचते हैं उसके बावजूद, RSS फीड रीडर अभी मरा नहीं है। आज सोशल मीडिया प्लेटफॉर्म का सामना करने वाली गोपनीयता चिंताओं के साथ, बहुत से उपयोगकर्ता Facebook और Twitter पर भरोसा करने के बजाय RSS फीड्स पर वापस आ सकते हैं। Outlook को RSS फीड रीडर के रूप में सेट अप और उपयोग करें अब, उपयोगकर्ताओं के

  1. यूट्यूब से वीडियो कैसे हटाएं: डिलीट और हाइड करने के तरीके यूट्यूब से वीडियो कैसे हटाएं: डिलीट और हाइड करने के तरीके

    कंप्यूटर (वेब ब्राउज़र) से वीडियो डिलीट करें ब्राउज़र में यूट्यूब खोलें और Sign in करके गूगल अकाउंट से लॉग इन करें। ऊपरी दाएं कोने में गूगल अकाउंट लोगो (प्रोफाइल फोटो) पर क्लिक करें। ड्रॉपडाउन से YouTube Studio चुनें। बाएं मेनू में Videos (प्ले आइकन) चुनें। अपने चैनल के वीडियो की लिस्ट दिखेगी। जिस

  1. Vuze: उच्च-गुणवत्ता टॉरेंटिंग के लिए Azureus का आधुनिक उत्तराधिकारी Vuze: उच्च-गुणवत्ता टॉरेंटिंग के लिए Azureus का आधुनिक उत्तराधिकारी

    जब इंटरनेट से किसी प्रकार के P2P प्रोटोकॉल का उपयोग करके कंटेंट डाउनलोड करने की बात आती है, तो मैं eMule (aMule) टाइप का व्यक्ति अधिक हूं। ऐसा इसलिए है क्योंकि मुझे पुराने, सांसारिक, भूले हुए, अस्पष्ट सामान को खोजने में मज़ा आता है जो आपको कहीं और नहीं मिल सकते - 20 के दशक की मूक हंगेरियन फिल्में सो