वीबीए DoEvents

विषय - सूची

वीबीए DoEvents फ़ंक्शन अस्थायी रूप से चल रहे मैक्रो को रोकता है, जिससे एक्सेल को कुंजी प्रेस, माउस क्लिक और अन्य ऑपरेटिंग सिस्टम संदेशों को संसाधित करने का मौका मिलता है।

लंबे समय तक चलने वाले मैक्रोज़ में, एक्सेल हैंग हो सकता है और अनुत्तरदायी हो सकता है, और मैक्रो को बाधित करना असंभव हो सकता है। यदि आपके कोड में DoEvents शामिल है, तो उपयोगकर्ताओं को आश्वस्त किया जा सकता है कि मैक्रो अभी भी चल रहा है, और यदि आवश्यक हो तो भी निष्पादन को बाधित कर सकता है।

VBA DoEvents उदाहरण

निम्नलिखित कोड पर विचार करें:

1234567891011 सार्वजनिक उप परीक्षण ()डिम आई ऐज़ लॉन्गमैं = 1 से 20000 . के लिएरेंज ("A1")। मान = iअगला मैंअंत उप

जब आप इस कोड को आज़माते हैं, तो आप देखेंगे कि एक्सेल विंडो के साथ इंटरैक्ट नहीं किया जा सकता है। हालाँकि, क्योंकि यह प्रोसेसर पर बहुत अधिक मांग नहीं कर रहा है, मैक्रो को अभी भी ESC या CTRL+BREAK दबाकर बाधित किया जा सकता है।

यदि इस लूप के अंदर बहुत सारे जटिल और मांगलिक कार्य किए जा रहे थे, तो एक्सेल को एक कुंजी प्रेस ईवेंट को पंजीकृत करने में अधिक समय लगेगा - कई मिनट तक या संभवतः बिल्कुल भी नहीं, खासकर यदि कंप्यूटर एक ही समय में अन्य प्रोग्राम चला रहा हो।

अब रेंज असाइनमेंट के नीचे DoEvents के साथ एक लाइन जोड़ें:

123 रेंज ("A1")। मान = iDoEvents

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

घटनाओं के खतरे

हालाँकि, दूसरा नज़र डालें। एक्सेल को केवल ध्यान केंद्रित करने की अनुमति देने से अधिक, आप वास्तव में अंदर की कोशिकाओं पर क्लिक कर सकते हैं और मैक्रो के चलने के दौरान टैब भी स्विच कर सकते हैं (इसे आज़माएं - आपको कुछ अजीब व्यवहार दिखाई देगा)। यह DoEvents के खतरों में से एक को दर्शाता है - यदि आपके मैक्रो को सावधानी से कोडित नहीं किया गया है तो यह अनपेक्षित परिणाम हो सकता है।

एक और खतरा यह है कि DoEvents अन्य मैक्रोज़ के अंदर चलने के लिए एक विंडो के रूप में काम कर सकता है। इसे आज़माएं: कार्यपत्रक पर ActiveX CommandButton रखें, उस पर डबल-क्लिक करें, और CommandButton1_Click() ईवेंट के अंदर निम्न कोड जोड़ें:

1234567 मंद सी रेंज के रूप मेंरेंज में प्रत्येक सी के लिए ("बी 3: ई 8")सी.वैल्यू = सी.वैल्यू + 1अगला ग

एक्सेल में डिज़ाइन मोड को टॉगल करें, फिर आपके द्वारा पहले जोड़े गए टेस्ट () मैक्रो को चलाएं। जब टेस्ट मैक्रो चल रहा हो, तो आप वर्कशीट पर कमांडबटन पर क्लिक कर सकते हैं, और जैसे ही DoEvents टेस्ट () मैक्रो को ब्रेक देता है, उससे संबंधित मैक्रो चल जाएगा।

यहां खतरा यह है कि यदि कमांडबटन मैक्रो ने टेस्ट() मैक्रो पर काम कर रहे डेटा को बदल दिया है, या टेस्ट() मैक्रो को फिर से ट्रिगर किया है। यदि आप सावधान नहीं हैं तो आप कुछ बेहद गड़बड़ परिणामों के साथ समाप्त हो सकते हैं।

अंत में, आपको इस बात की जानकारी होनी चाहिए कि कॉल करने पर DoEvents आपके मैक्रो को प्रदर्शन पर प्रभाव डालेगा। एक लूप के अंदर, यह प्रभाव जल्दी से जुड़ जाएगा जब तक कि आप यह सीमित नहीं करते कि कितनी बार DoEvents को कॉल किया जाता है। हमारे टेस्ट() उदाहरण का जिक्र करते हुए, इसे आजमाएं:

1 अगर मैं मॉड १००० = ० तो DoEvents

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

DoEvents का उपयोग कब करें

इन खतरों के बावजूद, DoEvents एक आसान कार्य है जो परीक्षण और डिबगिंग में सहायता करता है। लंबे समय तक चलने वाले लूप में DoEvents जोड़ने पर विचार करें।

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

अधिकांश भाग के लिए, DoEvents ऐसा कुछ नहीं है जिसे आप अपने कोड में बहुत कुछ शामिल करना चाहते हैं, और अक्सर छोड़ा जा सकता है। यदि जवाबदेही एक ऐसी चीज है जिसकी आपके मैक्रो को जरूरत है, तो इसे गिनें नहीं!

आप साइट के विकास में मदद मिलेगी, अपने दोस्तों के साथ साझा करने पेज

wave wave wave wave wave