حياة

باستخدام مؤقت في وحدات ماكرو Office VBA

باستخدام مؤقت في وحدات ماكرو Office VBA

لأولئك منا الذين لديهم أذهاننا عميقا في VB.NET ، يمكن أن تكون رحلة العودة إلى VB6 رحلة مربكة. استخدام مؤقت في VB6 يشبه ذلك. في الوقت نفسه ، فإن إضافة عمليات محددة زمنًا إلى الكود الخاص بك ليست واضحة للمستخدمين الجدد في وحدات VBA Macros.

مؤقتات للمبتدئين

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

بدء الموقت

يمكنك بدء مؤقت عن طريق ترميز عبارة OnTime. يتم تنفيذ هذا البيان في Word و Excel ، لكن له بناء جملة مختلفًا بناءً على العبارة التي تستخدمها. بناء جملة Word هو:

التعبير. في وقت (متى ، الاسم ، التسامح)

يبدو بناء جملة Excel كما يلي:

التعبير. في وقت التشغيل (وقت الأقدم ، الإجراء ، الأحدث ، الجدول)

كلاهما لهما المعلمة الأولى والثانية المشتركة. المعلمة الثانية هي اسم ماكرو آخر يعمل عند الوصول إلى الوقت في المعلمة الأولى. في الواقع ، يشبه ترميز هذا البيان إنشاء روتين فرعي للحدث في مصطلحات VB6 أو VB.NET. الحدث هو الوصول إلى الوقت في المعلمة الأولى. الروتين الفرعي الحدث هو المعلمة الثانية.

هذا يختلف عن طريقة ترميزه في VB6 أو VB.NET. لشيء واحد ، يمكن أن يكون الماكرو المسمى في المعلمة الثانية في أي رمز يمكن الوصول إليه. في مستند Word ، توصي Microsoft بوضعه في قالب المستند العادي. إذا وضعته في وحدة نمطية أخرى ، توصي Microsoft باستخدام المسار الكامل: Project.Module.Macro.

التعبير هو عادةً كائن التطبيق. تنص وثائق Word و Excel على أن المعلمة الثالثة يمكن أن تلغي تنفيذ ماكرو الحدث في حالة قيام مربع حوار أو عملية أخرى بمنع تشغيله خلال فترة زمنية محددة. في Excel ، يمكنك جدولة وقت جديد في حالة حدوث ذلك.

رمز وقت الحدث ماكرو

هذا الكود في Word موجه للمسؤول الذي يريد عرض إخطار بأن مدة الاختبار قد انتهت وطباعة نتيجة الاختبار.

الاختبار الفرعي العام OnTime ()
Debug.Print "سوف ينطلق المنبه في غضون 10 ثوانٍ!"
Debug.Print ("Before OnTime:" & Now)
alertTime = الآن + TimeValue ("00:00:10")
Application.OnTime alertTime ، "EventMacro"
Debug.Print ("After OnTime:" & Now)
نهاية الفرعية
Sub EventMacro ()
Debug.Print ("تنفيذ ماكرو الأحداث:" و الآن)
نهاية الفرعية

ينتج عن هذا المحتوى التالي في النافذة المباشرة:

سوف ينطلق المنبه في 10 ثوانٍ!
قبل OnTime: 12/25/2000 7:41:23 PM
بعد OnTime: 12/25/2000 7:41:23 م
تنفيذ ماكرو الحدث: 2/27/2010 7:41:33 PM

خيار لتطبيقات Office الأخرى

تطبيقات Office الأخرى لا تطبق OnTime. لهؤلاء ، لديك العديد من الخيارات. أولاً ، يمكنك استخدام وظيفة Timer ، والتي تقوم ببساطة بإرجاع عدد الثواني منذ منتصف الليل على جهاز الكمبيوتر الخاص بك ، وتقوم بالرياضيات الخاصة بك ، أو يمكنك استخدام مكالمات Windows API. يتميز استخدام مكالمات Windows API بميزة كونه أكثر دقة من Timer. فيما يلي روتين تقترحه Microsoft يقوم بالخدعة:

وظيفة إعلان خاص getFrequency Lib "kernel32" _
الاسم المستعار "QueryPerformanceFrequency" (cyFrequency As Currency) As Long
الدالة Declare الخاصة getTickCount Lib "kernel32" _
الاسم المستعار "QueryPerformanceCounter" (cyTickCount باسم العملة) طالما
Sub TestTimeAPICalls ()
خافت dTime كما مزدوجة
dTime = MicroTimer
خافت StartTime باسم واحد
StartTime = الموقت
لأني = 1 إلى 10000000
خافت ي كما مزدوجة
ي = ص (ط)
التالى
Debug.Print ("الوقت المستغرق MicroTimer كان:" & MicroTimer - dTime)
نهاية الفرعية
وظيفة MicroTimer () كما مزدوجة
'
يعود ثانية.
'
قاتمة cyTicks1 كعملة
ثابت cyFrequency كعملة
'
MicroTimer = 0
الحصول على التردد.
إذا cyFrequency = 0 ثم getFrequency cyFrequency
احصل على القراد.
getTickCount cyTicks1
ثانية
إذا cyFrequency ثم MicroTimer = cyTicks1 / cyFrequency
وظيفة النهاية