وظيفة الانتظار VBA | كيفية استخدام Excel VBA Wait Method؟

وظيفة انتظار Excel VBA

VBA Wait هي وظيفة مضمنة تُستخدم لإيقاف تنفيذ التعليمات البرمجية مؤقتًا لفترة زمنية محددة ، وهي تشبه إلى حد بعيد ما نقوم به في أمر السكون ولإيقاف الكود الذي نستخدمه بطريقة application.wait.

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

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

صيغة الدالة WAIT هي كما يلي.

نحتاج إلى ذكر مقدار الوقت الذي يجب أن تتوقف فيه الشفرة مؤقتًا. كما ترى في النهاية تقول Boolean ، هذا يعني أنها ترجع النتيجة كقيم منطقية ، أي TRUE أو FALSE.

حتى يحين الوقت المحدد ، تقول الرسالة FALSE وقد وصل الوقت المحدد ، فإنها ترجع TRUE.

هذا بخلاف وظيفة SLEEP لأن WAIT هي وظيفة مضمنة حيث SLEEP هي وظيفة Windows. قبل أن نصل إلى وظيفة SLEEP ، نحتاج إلى ذكر الكود أدناه أعلى الوحدة النمطية. لكن الانتظار لا يتطلب هذا.

رمز:

# إذا كان VBA7 ثم أعلن العام PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'لأنظمة 64 بت # Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' لأنظمة 32 بت ينتهي إذا 

أمثلة لاستخدام وظيفة الانتظار في Excel VBA

يمكنك تنزيل قالب VBA انتظر Excel هنا - VBA انتظر قالب Excel

مثال 1

افترض أنك تعمل في Excel في منتصف اليوم في الساعة 14:30:00 وتريد إيقاف الرمز الخاص بك مؤقتًا حتى يصبح الوقت 14:40:00. يمكنك استخدام الكود أدناه.

رمز:

 Sub Wait_Example1 () Application.Wait "14:40:00" End Sub 

سيوقف الرمز Excel الخاص بك من العمل حتى يصل الوقت إلى 14:40:00 في نظام التشغيل الخاص بك. يعد توفير مثل هذا الوقت أمرًا خطيرًا لأننا لا نعمل دائمًا من الساعة 14:30:00 ، فهو يتغير طوال الوقت.

لنفترض أنه عندما تقوم بتشغيل الكود الذي تريد الانتظار لمدة دقيقتين ، كيف تشير إلى هذا في الكود الخاص بك؟

لذلك ، يمكننا استخدام وظيفة VBA NOW مع وظيفة TIME VALUE لإدخال الوقت المحدد من الوقت الحالي.

فقط لتذكيرك تقوم وظيفة NOW () بإرجاع التاريخ والوقت الحاليين وفقًا لنظام الكمبيوتر الخاص بك. تمثل الدالة TIMEVALUE الوقت من 00:00:00 إلى 23:59:59 ، أي 11:59:59 مساءً بتنسيق 24 ساعة. يقوم بتحويل قيمة السلسلة إلى قيمة زمنية.

على سبيل المثال NOW () + TIMEVALUE (00:02:30) تعني الوقت الحالي + 2 دقيقة و 30 ثانية.

إذا كان الوقت الحالي هو 14:25:30 فإنه يصبح 14:28:00.

لإيقاف تنفيذ الكود الخاص بك أو إيقافه مؤقتًا من التنفيذ من الوقت الحالي إلى الدقائق العشر التالية ، يمكنك استخدام الكود أدناه.

رمز:

 Sub Wait_Example2 () Application.Wait (Now () + TimeValue ("00:10:00")) End Sub 

من المهم استخدام الدالة NOW () للإيقاف المؤقت الدقيق ، وإلا فهناك فرص لإيقاف مصنف Excel مؤقتًا حتى منتصف الليل. ومع ذلك ، يمكننا الخروج من طريقة الإيقاف المؤقت في أي وقت بالضغط على مفتاح Esc أو Break Key.

المثال رقم 2

انتظر لمدة 10 ثوانٍ في كل مرة يتم تشغيل الحلقة

يتم استخدام طريقة الانتظار بشكل جيد مع الحلقات. هناك حالات قد تحتاج فيها إلى الانتظار لمدة 10 ثوانٍ في كل مرة يتم فيها تشغيل الحلقة. على سبيل المثال ، انظر إلى البيانات أدناه.

لحساب الربح = (المبيعات - التكلفة) ، تريد إنشاء حلقة وبعد كل حلقة ، تريد الانتظار لمدة 10 ثوانٍ للتحقق مما إذا كانت النتيجة دقيقة أم لا. الكود أدناه سيفعل ذلك.

رمز:

 Sub Wait_Example3 () Dim k As Integer For k = 2 To 9 Cells (k، 4) .Value = Cells (k، 2) - Cells (k، 3) Application.Wait (Now () + TimeValue ("00:00 : 10 ")) التالي k End Sub 

سيحسب هذا الرمز عمود الربح سطرًا بسطر. بعد اكتمال السطر الأول ، سينتظر لمدة 10 ثوانٍ قبل أن يحسب السطر التالي.

VBA Sleep vs VBA انتظر

VBA SLEEP VBA WAIT
إنها ليست وظيفة مدمجة في VBA ، وتحتاج إلى رمز خاص للوصول إلى هذه الوظيفة. إنها وظيفة مدمجة في VBA ، ولا تتطلب أي رمز خاص للوصول إلى هذه الوظيفة.
يتطلب النوم أجزاء من الثانية كإطار زمني. يتطلب الانتظار إطارًا زمنيًا منتظمًا.
يمكننا تأخير الكود بالمللي ثانية لا يمكننا التأخير إلا في ثوانٍ كاملة.

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