excel-vba
डिबगिंग और समस्या निवारण
खोज…
वाक्य - विन्यास
- Debug.Print (स्ट्रिंग)
- रुको रुको
Debug.Print
तत्काल विंडो में त्रुटि कोड विवरणों की एक सूची प्रिंट करने के लिए, इसे Debug.Print
फ़ंक्शन में पास करें:
Private Sub ListErrCodes()
Debug.Print "List Error Code Descriptions"
For i = 0 To 65535
e = Error(i)
If e <> "Application-defined or object-defined error" Then Debug.Print i & ": " & e
Next i
End Sub
आप तत्काल विंडो दिखा सकते हैं:
- V iew का चयन | मैं मेनू बार से विंडो को mmediate करता हूं
- कीबोर्ड शॉर्टकट Ctrl-G का उपयोग करना
रुकें
स्टॉप कमांड जब बुलाया जाता है तो निष्पादन को रोक देगा। वहां से, प्रक्रिया को फिर से शुरू किया जा सकता है या चरण दर चरण निष्पादित किया जा सकता है।
Sub Test()
Dim TestVar as String
TestVar = "Hello World"
Stop 'Sub will be executed to this point and then wait for the user
MsgBox TestVar
End Sub
तत्काल खिड़की
यदि आप संपूर्ण उप को चलाने की आवश्यकता के बिना मैक्रो कोड की एक पंक्ति का परीक्षण करना चाहते हैं, तो आप कमांड को तत्काल विंडो में टाइप कर सकते हैं और लाइन को चलाने के लिए ENTER
को हिट कर सकते हैं।
किसी पंक्ति के आउटपुट का परीक्षण करने के लिए, आप इसे प्रश्न चिह्न से पूर्व कर सकते हैं ?
तत्काल विंडो पर प्रिंट करने के लिए। वैकल्पिक रूप से, आप print
कमांड का उपयोग आउटपुट print
करने के लिए भी कर सकते हैं।
Visual Basic Editor में, तत्काल विंडो खोलने के लिए CTRL + G
। अपनी वर्तमान चयनित शीट को "ExampleSheet" में बदलने के लिए, तत्काल विंडो में टाइप करें और ENTER
ActiveSheet.Name = "ExampleSheet"
वर्तमान में चयनित शीट के नाम को तत्काल विंडो में प्रिंट करने के लिए
? ActiveSheet.Name
ExampleSheet
यह विधि कोड में लागू करने से पहले अंतर्निहित या उपयोगकर्ता परिभाषित कार्यों की कार्यक्षमता का परीक्षण करने के लिए बहुत उपयोगी हो सकती है। नीचे दिए गए उदाहरण से पता चलता है कि किसी उम्मीद की पुष्टि करने के लिए फ़ंक्शन या श्रृंखला के आउटपुट के परीक्षण के लिए तत्काल विंडो का उपयोग कैसे किया जा सकता है।
'In this example, the Immediate Window was used to confirm that a series of Left and Right
'string methods would return the desired string
'expected output: "value"
print Left(Right("1111value1111",9),5) ' <---- written code here, ENTER pressed
value ' <---- output
तत्काल विंडो का उपयोग अनुप्रयोग, कार्यपुस्तिका या अन्य आवश्यक गुणों को सेट या रीसेट करने के लिए भी किया जा सकता है। यह उपयोगी हो सकता है यदि आपके पास Application.EnableEvents = False
एक सबरूटीन में Application.EnableEvents = False
है जो अप्रत्याशित रूप से एक त्रुटि फेंकता है, जिससे यह True
को रीसेट किए बिना बंद हो जाता है (जिससे निराशा और अप्रत्याशित कार्यक्षमता हो सकती है। उस स्थिति में, कमांड सीधे टाइप की जा सकती हैं। तत्काल विंडो में चलाएं और चलाएं:
? Application.EnableEvents ' <---- Testing the current state of "EnableEvents"
False ' <---- Output
Application.EnableEvents = True ' <---- Resetting the property value to True
? Application.EnableEvents ' <---- Testing the current state of "EnableEvents"
True ' <---- Output
अधिक उन्नत डिबगिंग तकनीकों के लिए, एक कोलोन :
एक लाइन विभाजक के रूप में इस्तेमाल किया जा सकता है। इसका उपयोग बहु-पंक्ति अभिव्यक्तियों के लिए किया जा सकता है जैसे नीचे दिए गए उदाहरण में लूपिंग।
x = Split("a,b,c",","): For i = LBound(x,1) to UBound(x,1): Debug.Print x(i): Next i '<----Input this and press enter
a '<----Output
b '<----Output
c '<----Output
प्रदर्शन में अड़चन खोजने के लिए टाइमर का उपयोग करें
गति के लिए अनुकूलन में पहला कदम कोड के सबसे धीमे वर्गों को ढूंढ रहा है। Timer
VBA फ़ंक्शन विंडोज़ आधारित पीसी पर एक सेकंड (3.90625 मिलीसेकंड) की 1/256 वीं की सटीकता के साथ आधी रात के बाद से समाप्त होने वाले सेकंड की संख्या देता है। VBA कार्य Now
और Time
केवल एक सेकंड के लिए सटीक है।
Dim start As Double ' Timer returns Single, but converting to Double to avoid
start = Timer ' scientific notation like 3.90625E-03 in the Immediate window
' ... part of the code
Debug.Print Timer - start; "seconds in part 1"
start = Timer
' ... another part of the code
Debug.Print Timer - start; "seconds in part 2"
अपने कोड में एक ब्रेकप्वाइंट जोड़ना
आप आसानी से अपने VBA कोड की पंक्ति के बाईं ओर ग्रे कॉलम पर क्लिक करके अपने कोड में एक ब्रेकपॉइंट जोड़ सकते हैं जहां आप रोकना चाहते हैं। कॉलम में एक लाल बिंदु दिखाई देता है और ब्रेकपॉइंट कोड भी लाल रंग में हाइलाइट किया गया है।
आप अपने कोड में कई ब्रेकप्वाइंट जोड़ सकते हैं और अपने मेनू बार में "प्ले" आइकन दबाकर निष्पादन फिर से शुरू कर सकते हैं। सभी कोड एक ब्रेकपॉइंट नहीं हो सकते क्योंकि परिवर्तनीय परिभाषा रेखाएं, एक प्रक्रिया की पहली या अंतिम पंक्ति और टिप्पणी लाइनों को एक ब्रेकप्वाइंट के रूप में नहीं चुना जा सकता है।
डीबगर स्थानीय विंडो
लोकल विंडो आपके द्वारा चलाए जा रहे फ़ंक्शन या सबरूटीन के दायरे में चर और वस्तुओं के वर्तमान मूल्य तक आसान पहुंच प्रदान करती है। यह मुद्दों को खोजने के लिए अपने कोड को डिबग करने और परिवर्तनों के माध्यम से आगे बढ़ने के लिए एक आवश्यक उपकरण है। यह आपको उन संपत्तियों का पता लगाने की भी अनुमति देता है जिन्हें आप नहीं जानते होंगे।
निम्नलिखित उदाहरण लें,
Option Explicit
Sub LocalsWindowExample()
Dim findMeInLocals As Integer
Dim findMEInLocals2 As Range
findMeInLocals = 1
Set findMEInLocals2 = ActiveWorkbook.Sheets(1).Range("A1")
End Sub
VBA संपादक में, दृश्य -> स्थानीय विंडो पर क्लिक करें
फिर सबरूटीन के अंदर क्लिक करने के बाद F8 का उपयोग करके कोड के माध्यम से कदम बढ़ाते हुए, हमने findMeinLocals असाइन करने से पहले रोक दिया है। नीचे आप देख सकते हैं मान 0 है --- और यदि आपने इसे कभी भी मूल्य नहीं दिया है तो इसका उपयोग किया जाएगा। रेंज ऑब्जेक्ट 'नथिंग' है।
यदि हम सबरूटीन समाप्त होने से पहले ही रुक जाते हैं, तो हम चर के अंतिम मूल्यों को देख सकते हैं।
हम 1 के मान के साथ findMeInLocals देख सकते हैं और एक प्रकार की रेंज / रेंज के साथ FindMeInLocals2। यदि हम + चिन्ह पर क्लिक करते हैं तो हम वस्तु का विस्तार कर सकते हैं और इसके गुण देख सकते हैं, जैसे कि गिनती या स्तंभ।