कभी-कभी एक्सेल बस "एक्सेल ने काम करना बंद कर दिया है" की तर्ज पर एक संदेश देता है। आपको हुई किसी भी असुविधा के लिए हम क्षमा चाहते हैं।"
जब आपको ऐसा संदेश मिलता है, तो आप Ctrl + alt = "+ + दबा सकते हैं और कार्यपुस्तिका को फिर से खोल सकते हैं (उम्मीद है कि आपने जो भी काम किया है उसे सहेज लिया है!), कोड के माध्यम से आपत्तिजनक कथन को खोजने के लिए कदम उठाना चाहते हैं। जब आप कोड के माध्यम से एकल-चरण करते हैं, तो सभी ठीक काम कर सकते हैं, लेकिन जब आप इसे पूरी गति से चलाते हैं, तो एक बार फिर यह दुर्घटनाग्रस्त हो सकता है। आप अपमानजनक बयान कैसे पा सकते हैं?
आप कोड की प्रत्येक पंक्ति के बीच एक सरल रेखा कोड लिख सकते हैं जो अपराधी हो सकता है। तो VBA कोड मूल रूप से कुछ इस तरह दिख सकता है:
Sub UICreation() Dim x As String On Error Resume Next x = Sheets("Scenario").Name If Err.Number 0 Then MsgBox "Current workbook needs to have a Scenario sheet!", vbCritical Exit Sub End If ActiveWorkbook.Unprotect WorkbookPassword Err.Clear ActiveWorkbook.Unprotect SheetPassword If Err.Number 0 Then MsgBox "Workbook cannot be unprotected by the macro.", vbCritical Exit Sub End If Application.OnTime Now, "More" ThisWorkbook.Sheets("FastPricer").Copy Before:=ActiveWorkbook.Sheets(1) End Sub
यह प्रक्रिया, वास्तव में, दुर्घटना नहीं करती है, लेकिन यह दर्शाती है कि आप क्या कर सकते हैं यदि आप पाते हैं कि कोड पूरी गति से चलने पर दुर्घटनाग्रस्त हो जाता है, लेकिन जब आप इसके माध्यम से कदम नहीं उठाते हैं।
आप उपरोक्त कोड को बग स्टेटमेंट बग 1, बग 2, आदि के साथ बदल सकते हैं।
Sub UICreation() Dim x As String On Error Resume Next Bug 1 x = Sheets("Scenario").Name Bug 2 If Err.Number 0 Then MsgBox "Current workbook needs to have a Scenario sheet!", vbCritical Exit Sub End If Bug 3 ActiveWorkbook.Unprotect WorkbookPassword Err.Clear Bug 4 ActiveWorkbook.Unprotect SheetPassword If Err.Number 0 Then MsgBox "Workbook cannot be unprotected by the macro.", vbCritical Exit Sub End If Bug 5 Application.OnTime Now, "More" Bug 6 ThisWorkbook.Sheets("FastPricer").Copy Before:=ActiveWorkbook.Sheets(1) End Sub
यहाँ बग प्रक्रिया है:
Sub Bug(num As Integer) SaveSetting "EOTB2", "EOTB2", "EOTB2", num End Sub
यह प्रक्रिया रजिस्ट्री में एक मान बचाता है। SaveSetting का सिंटैक्स है:

पहले तीन मापदंडों के लिए, यह कहें कि आप EOTB2 का उपयोग करें (एक्सेल आउटसाइड द बॉक्स 2 के लिए) - एक यादृच्छिक चयन। आप इसके बजाय SaveSetting "X", "X", "X", num का उपयोग कर सकते हैं। यदि आप इसका भरपूर उपयोग करते हैं, तो आप तीन स्तरों AppName, Section, और Key का लाभ उठा सकते हैं। इस तरह, यदि आपके पास AppName में कई खंड हैं, तो आप सरल DeleteSetting "EOTB2" (या जो भी आप AppName के लिए सेट करते हैं) का उपयोग करके अपनी सभी सेटिंग्स के लिए रजिस्ट्री को साफ़ कर सकते हैं, और सभी अनुभाग और कुंजियाँ भी हटा दी जाएंगी।
अब आप पूरी गति से प्रक्रिया चलाते हैं, और यह क्रैश हो जाता है। तो आप एक्सेल को पुनरारंभ करें, VBE पर जाएं, तत्काल विंडो खोलें (Ctrl + G दबाकर), और इसे टाइप करें:
? GetSetting(“EOTB2”,”EOTB2”,”EOTB2”)
यदि यह प्रक्रिया 4 उदाहरण के लिए लौटती है, तो यह बग 4 के कुछ समय बाद दुर्घटनाग्रस्त हो गई। यह संभव नहीं है कि यदि आईएफ / एंड अगर अपराधी था; अधिक संभावना है कि यह ActiveWorkbook.Unprotect SheetPassword था। (याद रखें कि यह केवल एक उदाहरण है, न कि वास्तव में क्या हुआ है।)
यदि आपका बग 1, बग 2, आदि का प्रारंभिक रन दिखाता है कि बग x के बाद कोड के एक बड़े भाग में प्रक्रिया क्रैश हो गई है, तो आप इसे और संकीर्ण करने के लिए अधिक बग कॉल सम्मिलित कर सकते हैं। आप अपराधी को खोजने के लिए एक लंबी प्रक्रिया में एक द्विआधारी खोज करते हैं।

यह अतिथि लेख Excel MVP Bob Umlas का है। यह किताब से है, अधिक एक्सेल बॉक्स के बाहर। पुस्तक के अन्य विषयों को देखने के लिए, यहाँ क्लिक करें।