एक्सेल VBA स्लीप फंक्शन अपने मैक्रो कोड को रोकने के लिए

एक्सेल VBA नींद समारोह

वीबीए स्लीप फंक्शन विंडोज़ डीएलएल फाइलों के तहत मौजूद एक विंडोज़ फंक्शन है, जिसका उपयोग मैक्रो प्रक्रिया को रोकने के लिए किया जाता है और एक निश्चित समय तक चलने के बाद मैक्रो प्रक्रिया को रोक देता है।

ऐसी परिस्थितियाँ हैं जहाँ हमें कार्यों के अन्य सेटों को पूरा करने के लिए हमारी मैक्रो रनिंग प्रक्रिया को रोकना पड़ता है। कार्यों के अन्य सेट हमारे कोडिंग का हिस्सा हो सकते हैं या अन्य मैक्रो प्रक्रिया का हिस्सा हो सकते हैं, या यह वर्तमान एक्सेल मैक्रो के लिए इनपुट हो सकता है। जब आप चल रहे हैं तो आप कार्यक्रम को कैसे रोक सकते हैं? हम उपयोगकर्ता द्वारा निर्दिष्ट कुछ समय के लिए प्रक्रिया के कोड को रोक सकते हैं, और उसके बाद हम निश्चित मात्रा में कार्यक्रम को फिर से शुरू कर सकते हैं। हम वीबीए में SLEEP फ़ंक्शन का उपयोग करके ऐसा कर सकते हैं।

VBA स्लीप फंक्शन क्या करता है?

सोते हैं, जैसा कि नाम से ही कहा जाता है, "कुछ समय के लिए सो जाओ," "कुछ समय के लिए आराम करें," "एक समय के लिए रुकें," कुछ समय के लिए बंद करें, "आदि … नींद समारोह उपयोगकर्ताओं को मिलीसेकंड के लिए हमारे मैक्रो कोड को रोकने की अनुमति देता है । इसका उपयोग करके, हम मैक्रो कोड की प्रक्रिया में देरी कर सकते हैं।

यदि आपको लगता है कि हमारे पास SLEEP नामक एक अंतर्निहित फ़ंक्शन है, तो आप गलत हैं, क्योंकि VBA में, ऐसा कोई फ़ंक्शन नहीं है। बल्कि, हमारे पास एक फ़ंक्शन है जिसे स्लीप विन्डोज़ फंक्शन कहा जाता है। कोड के एक विशेष सेट में प्रवेश करके, हम वास्तव में इस फ़ंक्शन को VBA में कॉल कर सकते हैं। वास्तव में, यह विंडोज डीएलएल फाइलों के अंदर मौजूद एक फ़ंक्शन है, इसलिए हमें वीबीए में सबरूटीन की शुरुआत से पहले एपीआई के नामकरण की घोषणा करने की आवश्यकता है।

नीचे VBA कोड है।

कोड:

#If VBA7 तब पब्लिक डिक्लेयर PtrSafe सब स्लीप लिब "कर्नेल 32" (ByVal dwMilliseconds as LongPtr) 'एक्सेल के 64-बिट वर्जन के लिए # लेस्स पब्लिक डिक्लेयर स्लीप लिब "कर्नेल 32" (ByVal dwMilliseconds लॉन्ग) 32-बिट वर्जन के लिए। Excel # और यदि

मैक्रो कोड लिखना शुरू करने से पहले अपने मॉड्यूल में उपरोक्त कॉपी और पेस्ट करें। इसे अपने मॉड्यूल में इस तरह चिपकाया जाना चाहिए।

उदाहरण

इससे पहले कि मैं आपको कोड लिखने का तरीका दिखाऊं, मैं आपको नींद के कार्य के बारे में बता दूं। यह मिलीसेकंड में प्रक्रिया को विलंबित करता है। तो 1 सेकंड 1000 मिलीसेकंड के बराबर है, यदि आप 10 सेकंड के लिए रुकना चाहते हैं, तो यह 10000 मिलीसेकंड होना चाहिए।

उदाहरण 1

एक बार जब उप प्रक्रिया शुरू होने से पहले एपीआई कोड चिपकाया जाता है, तो एक मैक्रो नाम बनाएँ।

कोड:

#Sub Sleep_Example1 () एंड सब

एक स्ट्रिंग के रूप में दो चर घोषित करें।

कोड:

स्ट्रिंग के रूप में मंद स्टार्टिंग

के लिए StartTime चर, समय फंक्शन का मान असाइन करें। नोट: एक्सेल फ़ंक्शन में टाइम वर्तमान समय देता है।

कोड:

स्टार्टटाइम = समय

अब हम इस संदेश को संदेश बॉक्स VBA में प्रदर्शित करेंगे।

कोड:

StartTime = समय MsgBox StartTime

अब हम स्लीप फ़ंक्शन का उपयोग करके 10 सेकंड के लिए कोड को रोक देंगे। जैसा कि मैंने बताया, यह मिलीसेकंड में कोड को रोक देता है, इसलिए 10 सेकंड के लिए रुकने के लिए। हमें 10000 मिलीसेकंड का उपयोग करने की आवश्यकता है।

कोड:

सब स्लीप_ एक्सप्ले 1 () स्टार्ट स्टार्टिंग के रूप में डिमिंग स्टार्टटाइम के रूप में डिम स्टार्टटाइम = स्ट्रींग स्टार्ट टाइम के रूप में डिम टाइमटाइम

अब दूसरा चर, एंडटाइम का उपयोग करें, और वर्तमान समय असाइन करें।

कोड:

सब स्लीप_ एक्सप्ले 1 () स्टार्ट स्टार्टिंग के रूप में डिम स्टार्टटाइम के रूप में डिम स्टार्टटाइम = स्ट्रींग स्टार्ट टाइम के रूप में डिम टाइमटाइम।

अब दो चर StartTime और EndTime, मैक्रो शुरुआत समय और समाप्ति समय आयोजित करेगा। इस मैक्रो को चलाएं; सबसे पहले, हम आपके सिस्टम में मैक्रो शुरुआती समय, यानी, वर्तमान समय देखेंगे।

ओके पर क्लिक करें। यह 10 सेकंड के लिए सो जाएगा। आप बफर प्रतीक देख सकते हैं।

After 10 seconds, it will start to resume the code so it will show the end time, i.e., after waiting for 10 seconds, what’s the current time now.

Now you can see macro started at 10:54:14 and ended at 10:54:24, i.e., Exactly the 10-second difference is there. In those 10 seconds, VBA pause the code running.

Example #2 - Sleep Function in Loops

Sleep is best used with loops in VBA. For example, I want to insert serial numbers from 1 to 10 using Do while loop in VBA.

After inserting the one number, my code should wait for 3 seconds, so when the loop runs 10 times, it should be 30 seconds in total.

Code:

Sub Sleep_Example2() Dim k As Integer k = 1 Do While k <= 10 Cells(k, 1).Value = k k = k + 1 Sleep (3000) '1000 milliseconds is 1 second so 3000 is equal to 3 seconds Loop End Sub

इस कोड को चलाएं, और प्रक्रिया को पूरा करने के लिए आपको कम से कम 30 सेकंड तक इंतजार करना होगा।

सटीक समय को ट्रैक करने के लिए, नीचे दिए गए कोड का उपयोग करें।

कोड:

सब स्लीप_ एक्सप्लाय 2 () डिम k अस इन्टर्गर डिम स्टार्टटाइम ऐज़ स्ट्रींग डिम टाइमटाइम एज़ स्ट्रिंग स्टार्टटाइम = टाइम MsgBox "आपका कोड" और स्टार्टटाइम k = १ शुरू हुआ जबकि k <= १० सेल (k, १) .Value = kk = k +। 1 स्लीप (3000) '1000 मिलीसेड 1 सेकंड है इसलिए 3000 3 सेकंड के बराबर है लूप एंडटाइम = टाइम MsgBox "आपका कोड" एंड एंडटाइम टाइम सब पर समाप्त हुआ

यह कोड आपको 2 संदेश बॉक्स प्रदर्शित करेगा, पहला आरंभिक समय दिखाएगा, और दूसरा अंत समय दिखाएगा।

नोट: इस कोड को चलाते समय, आप एक्सेल का उपयोग नहीं कर सकते हैं। यहां तक ​​कि भागने की कुंजी भी काम नहीं करेगी।

दिलचस्प लेख...