Excel VBA Sleep Function لإيقاف رمز الماكرو مؤقتًا

وظيفة النوم Excel VBA

وظيفة VBA Sleep هي إحدى وظائف Windows الموجودة ضمن ملفات Windows DLL والتي تُستخدم لإيقاف تشغيل إجراء الماكرو أو إيقافه مؤقتًا لفترة زمنية محددة بعد ذلك المقدار المعين الذي يمكننا استئناف البرنامج.

هناك حالات نحتاج فيها إلى إيقاف عملية تشغيل الماكرو مؤقتًا لإكمال مجموعات أخرى من المهام. يمكن أن تكون مجموعات المهام الأخرى جزءًا من الترميز الخاص بنا أو جزءًا من إجراء ماكرو آخر أو يمكن أن تكون مدخلات لماكرو Excel الحالي. كيف يمكنك إيقاف البرنامج أثناء تشغيله؟ يمكننا إيقاف رمز الإجراء مؤقتًا لبعض الوقت المحدد من قبل المستخدم وبعد ذلك يمكننا استئناف البرنامج. يمكننا القيام بذلك في VBA باستخدام وظيفة SLEEP.

ماذا تفعل وظيفة النوم VBA؟

SLEEP كما يقول الاسم نفسه "سكون لبعض الوقت" ، "استرح لبعض الوقت" ، "توقف مؤقتًا لبعض الوقت" ، إجازة لبعض الوقت "إلخ .. تتيح وظيفة السكون للمستخدمين إيقاف رمز الماكرو مؤقتًا إلى أجزاء من الثانية. باستخدام هذا يمكننا تأخير عملية رمز الماكرو.

إذا كنت تعتقد أن لدينا وظيفة مضمنة تسمى SLEEP فأنت مخطئ لأنه في VBA لا توجد مثل هذه الوظيفة بدلاً من ذلك لدينا وظيفة تسمى Sleep كوظيفة windows. بإدخال مجموعة خاصة من التعليمات البرمجية ، يمكننا بالفعل استدعاء هذه الوظيفة في VBA. في الواقع ، إنها وظيفة موجودة داخل ملفات Windows DLL ، لذلك نحتاج إلى الإعلان عن تسمية API قبل بدء الروتين الفرعي في vba.

يوجد أدناه رمز VBA.

رمز:

# If VBA7 ثم Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'لإصدارات 64 بت من Excel # Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' لإصدارات 32 بت من Excel # End إذا 

انسخ ما ورد أعلاه والصقه في الوحدة النمطية الخاصة بك قبل البدء في كتابة أكواد الماكرو. يجب لصقها بهذا الشكل في الوحدة الخاصة بك.

مثال

قبل أن أوضح لك طريقة كتابة الكود ، دعني أخبرك عن وظيفة النوم أكثر من ذلك بقليل. يؤخر العملية في أجزاء من الثانية. لذا فإن ثانية واحدة تساوي 1000 مللي ثانية ، إذا كنت تريد التوقف لمدة 10 ثوانٍ ، فيجب أن تكون 10000 مللي ثانية.

يمكنك تنزيل قالب VBA Sleep Excel هذا هنا - قالب VBA Sleep Excel

مثال 1

بمجرد لصق رمز API قبل بدء الإجراء الفرعي ، قم بإنشاء اسم ماكرو.

رمز:

# Sub Sleep_Example1 () End Sub 

قم بتعريف متغيرين كسلسلة.

رمز:

 خافت وقت البدء كسلسلة خافتة وقت الانتهاء كسلسلة 

بالنسبة لمتغير StartTime ، قم بتعيين قيمة دالة TIME. ملاحظة: TIME في دالة Excel ترجع الوقت الحالي.

رمز:

StartTime = الوقت

الآن سوف نعرض هذه الرسالة في مربع الرسائل فبا.

رمز:

StartTime = وقت MsgBox StartTime

الآن سنوقف الرمز مؤقتًا لمدة 10 ثوانٍ باستخدام وظيفة السكون. كما قلت ، توقف الشفرة مؤقتًا بالمللي ثانية ، لذا للتوقف مؤقتًا لمدة 10 ثوانٍ ، نحتاج إلى استخدام 10000 مللي ثانية.

رمز:

 Sub Sleep_Example1 () خافت StartTime كسلسلة باهتة مثل String StartTime = Time MsgBox StartTime Sleep (10000) End Sub 

الآن استخدم المتغير الثاني EndTime وحدد الوقت الحالي.

رمز:

 Sub Sleep_Example1 () خافت StartTime كسلسلة باهتة مثل String StartTime = Time MsgBox StartTime Sleep (10000) EndTime = Time MsgBox EndTime End Sub 

الآن سيحتوي متغيرا StartTime و EndTime على وقت بداية الماكرو ووقت الانتهاء. قم بتشغيل هذا الماكرو ، في البداية سنرى وقت بدء الماكرو ، أي الوقت الحالي في نظامك.

انقر فوق "موافق" ، وسوف ينام لمدة 10 ثوانٍ. تستطيع أن ترى رمز المخزن المؤقت.

بعد 10 ثوانٍ ، سيبدأ في استئناف الكود ، لذا سيُظهر وقت الانتهاء ، أي بعد الانتظار لمدة 10 ثوانٍ ما هو الوقت الحالي الآن.

يمكنك الآن رؤية الماكرو بدأ في 10:54:14 وانتهى في 10:54:24 ، أي أن فارق 10 ثوانٍ موجود بالضبط. في تلك الثواني العشر ، توقف VBA مؤقتًا عن تشغيل الكود.

مثال # 2 - وظيفة النوم في الحلقات

من الأفضل استخدام Sleep مع الحلقات في VBA. على سبيل المثال ، أريد إدخال الأرقام التسلسلية من 1 إلى 10 باستخدام Do while loop في VBA.

بعد إدخال الرقم الوحيد ، يجب أن ينتظر الرمز الخاص بي لمدة 3 ثوانٍ ، لذلك عند تشغيل الحلقة لمدة 10 مرات ، يجب أن يكون إجماليها 30 ثانية.

رمز:

 Sub Sleep_Example2 () Dim k as Integer k = 1 Do while k <= 10 Cells (k، 1) .Value = kk = k + 1 Sleep (3000) '1000 milliseconds هي 1 ثانية ، لذا 3000 يساوي 3 ثواني Loop End الفرعية 

قم بتشغيل هذا الرمز وعليك الانتظار لمدة 30 ثانية على الأقل لإكمال العملية.

لتتبع الوقت الدقيق استخدم الكود أدناه.

رمز:

 Sub Sleep_Example2 () Dim k as Integer Dim StartTime as String DimTime As String StartTime = Time MsgBox "بدأ الرمز الخاص بك في" & StartTime k = 1 Do while k <= 10 Cells (k، 1) .Value = kk = k + 1 Sleep (3000) '1000 مللي ثانية هي ثانية واحدة ، لذا 3000 يساوي 3 ثوان Loop EndTime = Time MsgBox "انتهى الرمز الخاص بك في" & EndTime End Sub 

سيعرض لك هذا الرمز 2 مربع رسالة ، سيعرض الأول وقت البدء وسيظهر الثاني وقت الانتهاء.

ملاحظة: أثناء تشغيل هذا الرمز ، لا يمكنك استخدام Excel ، حتى مفتاح الهروب لن يعمل.


$config[zx-auto] not found$config[zx-overlay] not found