वीबीए प्रतीक्षा और नींद कार्य - विराम / विलंब वीबीए कोड

यह ट्यूटोरियल प्रदर्शित करेगा कि VBA में प्रतीक्षा और स्लीप फ़ंक्शन का उपयोग करके कोड को कैसे रोकें/देरी करें।

जब हम बड़े वीबीए प्रोग्राम बनाते हैं जो बहुत सारी गणना करते हैं, या शायद बाहरी प्रोग्राम को चलाने के लिए भी कॉल करते हैं, तो हमें अपने वीबीए कोड की आवश्यकता हो सकती है, जब बाहरी प्रक्रिया हो रही हो, तो हमें एक विशिष्ट अवधि के लिए चलना बंद करना होगा। इसे प्राप्त करने के लिए VBA के पास कुछ विधियाँ उपलब्ध हैं।

आवेदन का उपयोग। प्रतीक्षा विधि

यदि हमें अपने मैक्रो के चलने को कुछ समय के लिए रोकना है या अगले चरण को निष्पादित करने से पहले एक निर्दिष्ट समय तक नहीं पहुंचना है, तो हम इसका उपयोग कर सकते हैं आवेदन। रुको तरीका। यह उपयोगी हो सकता है, उदाहरण के लिए, यदि हमने किसी वेबसाइट पर लॉगिन प्रक्रिया को स्वचालित कर दिया है और हमारे मैक्रो के चलने से पहले पृष्ठ के लोड होने तक कुछ सेकंड प्रतीक्षा करने की आवश्यकता है।

1 सेकंड रुको

नीचे दी गई इस लाइन को अपने मैक्रो में शामिल करते हुए, इसके चलने को लगभग 1 सेकंड के लिए रोक दिया जाएगा:

1 आवेदन। प्रतीक्षा करें (अब + टाइमवैल्यू ("0:00:01"))

तब तक प्रतिक्षा करें जब तक

कुछ मामलों में आपको एक विशिष्ट समय तक प्रतीक्षा करने की आवश्यकता होगी। इस लाइन के नीचे आपका मैक्रो सुबह 9 बजे से पहले आगे नहीं बढ़ेगा:

1 आवेदन। "09:00:00" प्रतीक्षा करें

कृपया ध्यान दें कि आवेदन। रुको 1 सेकंड से कम की देरी को स्वीकार नहीं करता है।

वीबीए प्रोग्रामिंग | कोड जेनरेटर आपके लिए काम करता है!

नींद की विधि का प्रयोग

यदि आपको अपने मैक्रो को रोकने का अधिक सटीक तरीका चाहिए, तो आप स्लीप विधि का उपयोग कर सकते हैं।

स्लीप एक विंडोज एपीआई फंक्शन है, यानी यह वीबीए का हिस्सा नहीं है। इसे एक विशेष डिक्लेरेशन स्टेटमेंट का उपयोग करके एक्सेस किया जा सकता है।

यदि आप Microsoft Office के 64-बिट संस्करण का उपयोग कर रहे हैं, तो आप निम्न कथन को एक नए मॉड्यूल में या मॉड्यूल की शुरुआत में (सीधे सबरूटीन में नहीं) सम्मिलित कर सकते हैं, जिसमें आप स्लीप फ़ंक्शन का उपयोग करना चाहते हैं:

1 पब्लिक डिक्लेयर PtrSafe सब स्लीप लिब "कर्नेल32" (ByVal Milliseconds as LongPtr)

32-बिट संस्करण के साथ इस लाइन का उपयोग करें:

1 पब्लिक डिक्लेयर सब स्लीप लिब "कर्नेल32" (ByVal मिलीसेकंड के रूप में LongPtr)

स्लीप फ़ंक्शन घोषित करने के बाद, आपके पास इस तरह की सबरूटीन्स में इसकी पहुंच है:

1 नींद 10000

इस लाइन के साथ आपके मैक्रो को 10,000 मिलीसेकंड, यानी 10 सेकंड के लिए रोक दिया जाएगा।

घटनाओं के साथ लूप का उपयोग करना

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

इस समस्या को दूर करने के लिए, हम DoEvents नामक विधि के साथ एक लूप का उपयोग कर सकते हैं।

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

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

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

wave wave wave wave wave