<पी> जब कोड लंबा होता है और वीबीए मैक्रो कई सेकंड तक चलता है, तो एक्सेल रुका हुआ या अनुत्तरदायी दिखाई दे सकता है। भले ही कोड ठीक से काम कर रहा हो, उपयोगकर्ता मान सकते हैं कि कार्यपुस्तिका फ़्रीज़ हो गई है क्योंकि स्क्रीन पर कुछ भी नहीं हो रहा है। इस समस्या से बचने का एक सरल तरीका मैक्रो चलने के दौरान एक्सेल के स्टेटस बार में एक लाइव संदेश प्रदर्शित करना है। <पी> इस ट्यूटोरियल में, हम दिखाएंगे कि वीबीए चलने के दौरान प्रगति संदेश कैसे प्रदर्शित किया जाए। आपको यूजरफॉर्म या ग्राफिकल प्रोग्रेस बार की आवश्यकता नहीं है। कई मामलों में, एप्लिकेशन.स्टेटसबार पर्याप्त है।
Application.StatusBar का उपयोग क्यों करें?
<पी> एक्सेल में एप्लिकेशन विंडो के नीचे एक अंतर्निहित स्टेटस बार होता है। VBA अस्थायी रूप से उस क्षेत्र में सामान्य पाठ को एक कस्टम संदेश से बदल सकता है। <पी> इसका मतलब है कि आपका मैक्रो इस तरह के अपडेट प्रदर्शित कर सकता है:- 100 में से पंक्ति 10 को संसाधित करना
- डेटा आयात किया जा रहा है...
- सूत्र लिखना...
- 65% पूर्ण
Application.StatusBar = "Processing..."<पी> जब आपका मैक्रो समाप्त हो जाए, तो स्टेटस बार को इसके साथ रीसेट करें:
Application.StatusBar = False<पी> एप्लिकेशन.स्टैटसबार =गलत सेट करने से एक्सेल में स्टेटस बार का नियंत्रण बहाल हो जाता है, जिससे वह अपने डिफ़ॉल्ट संदेशों को फिर से प्रदर्शित कर सकता है। इस चरण को कभी न छोड़ें.
मूल उदाहरण:सरल प्रगति संदेश
<पी> यह सरल प्रगति संदेश वाला सबसे बुनियादी संस्करण है। स्टेटस बार में, यह "रनिंग रिपोर्ट...कृपया प्रतीक्षा करें" दिखाएगा।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 एक्सेल को स्क्रीन को रीफ्रेश करने और मैक्रो चलने के दौरान प्रतिक्रिया देने की अनुमति देता है
- इसके बिना, मैक्रो समाप्त होने तक स्टेटस बार स्पष्ट रूप से अपडेट नहीं हो सकता है, खासकर लंबे लूप में
- जब तक आवश्यकता न हो, इसे अत्यधिक बड़े लूप में उपयोग न करें, क्योंकि यह निष्पादन को थोड़ा धीमा कर सकता है
एक प्रतिशत संदेश जोड़ें
<पी> आप प्रतिशत शामिल करने के लिए प्रगति संदेश को अनुकूलित कर सकते हैं। आपको बस प्रतिशत की गणना करने और इसे स्टेटस बार टेक्स्ट में शामिल करने की आवश्यकता है।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
<पी> यह कोड उपयोगकर्ता के लिए एक स्पष्ट स्थिति अपडेट बनाता है, जो दिखाता है “100 में से पंक्ति 14 (14%) का प्रसंस्करण” . <पी>
एक सरल फॉर्मूला कार्य के साथ उदाहरण
<पी> आइए एक व्यावहारिक उदाहरण देखें जो वर्कशीट क्रिया करता है। यह संस्करण एक कॉलम में एक सरल बिक्री राशि सूत्र लिखता है।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
<पी> यह एक सरल उदाहरण है, लेकिन यह कई उपयोगकर्ताओं द्वारा किए जाने वाले वर्कशीट कार्य के प्रकार को बारीकी से दर्शाता है। एक टेक्स्ट-आधारित "नकली प्रगति बार"
<पी> एप्लिकेशन.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<पी> जब भी आप वीबीए चलाएंगे, स्टेटस बार कुछ इस तरह प्रदर्शित होगा: <पी> प्रगति:[|||||||||………….] 67% पी> <पी> यह अभी भी केवल पाठ है, लेकिन यह प्रगति की एक मजबूत दृश्य भावना प्रदान करता है। <पी>
सर्वोत्तम अभ्यास:स्टेटस बार को हमेशा रीसेट करें
<पी> सबसे आम गलतियों में से एक मैक्रो के अंत में स्टेटस बार को पुनर्स्थापित करना भूल जाना है। यदि आप Application.StatusBar =False का उपयोग नहीं करते हैं , मैक्रो समाप्त होने के बाद भी एक्सेल आपका कस्टम टेक्स्ट दिखाना जारी रख सकता है। एक सुरक्षित संस्करण सरल त्रुटि प्रबंधन का उपयोग करता है ताकि कुछ गलत होने पर भी स्टेटस बार रीसेट हो जाए।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
<पी> यह पैटर्न वास्तविक दुनिया में उपयोग के लिए अधिक उपयुक्त है। बेहतर स्थिति संदेशों के लिए युक्तियाँ
<पी> एक अच्छा स्टेटस बार संदेश संक्षिप्त और विशिष्ट होना चाहिए। अपने संदेश संक्षिप्त और उपयोगी रखें. अच्छे उदाहरणों में शामिल हैं:- बिक्री डेटा आयात करना...
- डुप्लिकेट की जाँच हो रही है...
- कार्यपत्रक का स्वरूपण...
- 200 में से 45 रिकॉर्ड संसाधित हो रहा है...
- रिपोर्ट को अंतिम रूप दिया जा रहा है...
उपयोग के लिए तैयार पुन:प्रयोज्य पैटर्न
<पी> आप लगभग किसी भी मैक्रो में इस पैटर्न का पुन:उपयोग कर सकते हैं। बस इस कोड को कॉपी करें और जहां आवश्यक हो वहां अपना तर्क डालें।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