פונקציית שינה של Excel VBA כדי להשהות את קוד המאקרו שלך

פונקציית שינה של Excel VBA

פונקציית שינה של VBA היא פונקציית חלונות הקיימת תחת קבצי DLL של חלונות המשמשת לעצירה או השהיה של פעולת הליך המאקרו למשך פרק זמן מסוים לאחר כמות מסוימת שנוכל לחדש את התוכנית.

ישנם מצבים בהם עלינו להשהות את תהליך הפעלת המאקרו שלנו כדי להשלים קבוצות משימות אחרות. קבוצות משימות אחרות יכולות להיות חלק מהקידוד שלנו או חלק מהליך מאקרו אחר, או שזה יכול להיות קלט למאקרו המצוין הנוכחי. כיצד ניתן להשהות את התוכנית כשהיא פועלת? אנו יכולים להשהות את קוד ההליך למשך זמן מה שצוין על ידי המשתמש ולאחר מכן כמות מסוימת של אנו יכולים לחדש את התוכנית. אנו יכולים לעשות זאת ב- VBA באמצעות פונקציית SLEEP.

מה עושה פונקציית שינה ב- VBA?

ישן כאשר השם עצמו אומר "לישון זמן מה", "לנוח לזמן מה", "השהה זמן", הפסקה לזמן מה "וכו '. פונקציית השינה מאפשרת למשתמשים להשהות את קוד המאקרו שלנו למשך אלפיות השנייה. באמצעות זה אנו יכולים לעכב את תהליך קוד המאקרו.

אם אתה חושב שיש לנו פונקציה מובנית שנקראת SLEEP אז אתה טועה מכיוון שב- VBA אין פונקציה כזו אלא יש לנו פונקציה שנקראת שינה כפונקציה של חלונות. על ידי הזנת סט קוד מיוחד אנו יכולים למעשה לקרוא לפונקציה זו ב- VBA. למעשה, זוהי פונקציה הקיימת בתוך קבצי DLL של Windows, לכן עלינו להכריז על המינוח של API לפני תחילת תת-הפעולה ב- vba.

להלן קוד ה- VBA.

קוד:

# אם VBA7 אז הצהיר פומבית את PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'עבור גירסאות 64 סיביות של Excel # אחרת ציבורי הכריז על Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' עבור 32 סיביות Excel # סיום אם 

העתק את האמור לעיל והדבק במודול שלך לפני שתתחיל לכתוב את קודי המאקרו. זה צריך להיות מודבק כך במודול שלך.

דוגמא

לפני שאראה לך את דרך כתיבת הקוד תן לי לספר לך על פונקציית השינה מעט יותר. זה מעכב את התהליך באלפיות השנייה. אז שנייה אחת שווה ל -1000 אלפיות השנייה, אם אתה רוצה להשהות במשך 10 שניות זה צריך להיות 10000 אלפיות השנייה.

ניתן להוריד תבנית VBA Sleep Excel זו כאן - תבנית VBA Sleep Excel

דוגמה מס '1

ברגע שקוד ה- API הודבק לפני תחילת הליך ה- Sub, צור שם מאקרו.

קוד:

# תת שינה_דוגמה 1 () סוף משנה 

הכריז על שני משתנים כמחרוזת.

קוד:

 עמעום זמן התחלה כמחרוזת עמום סוף זמן כמחרוזת 

עבור משתנה StartTime הקצה את הערך של פונקציית TIME. הערה: TIME בפונקציית ה- Excel מחזירה את הזמן הנוכחי.

קוד:

StartTime = זמן

כעת נציג הודעה זו בתיבת ההודעות VBA.

קוד:

StartTime = זמן MsgBox StartTime

כעת נעצור את הקוד למשך 10 שניות באמצעות פונקציית השינה. כפי שאמרתי זה מושהה את הקוד באלפיות השנייה כדי להשהות 10 שניות עלינו להשתמש ב 10000 אלפיות השנייה.

קוד:

 משנה שינה_דוגמה 1 () עמעום זמן התחלה כמחרוזת עמום סוף זמן כמחרוזת התחלה זמן = זמן MsgBox תחילת זמן שינה (10000) סוף משנה 

כעת השתמש במשתנה השני EndTime והקצה את השעה הנוכחית.

קוד:

 תת שינה_דוגמה 1 () עמעום זמן התחלה כמחרוזת עמום זמן זמן כמחרוזת התחלה זמן = זמן MsgBox זמן התחלה זמן (10000) זמן זמן = זמן MsgBox סוף זמן סוף משנה 

כעת שני משתנים StartTime ו- EndTime יחזיקו את זמן ההתחלה ואת זמן הסיום של המאקרו. הפעל מאקרו זה, בהתחלה נראה זמן התחלת מאקרו כלומר זמן נוכחי במערכת שלך.

לחץ על אישור, הוא ישן למשך 10 שניות. אתה יכול לראות את סמל החיץ.

לאחר 10 שניות הוא יתחיל לחדש את הקוד כך שהוא יראה את שעת הסיום כלומר לאחר המתנה של 10 שניות מה השעה הנוכחית כעת.

עכשיו אתה יכול לראות מאקרו התחיל בשעה 10:54:14 והסתיים בשעה 10:54:24 כלומר בדיוק ההפרש של 10 שניות קיים. בתוך 10 שניות אלה, VBA מושהה את פעולת הקוד.

דוגמה מס '2 - פונקציית שינה בלולאות

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 for 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 

Run this code and you have to wait for a minimum of 30 seconds to complete the process.

To track the exact time use the below code.

Code:

 Sub Sleep_Example2() Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox "Your Code Started at " & StartTime k = 1 Do While k <= 10 Cells(k, 1).Value = k k = k + 1 Sleep (3000) '1000 milliseonds is 1 second so 3000 is equal to 3 seconds Loop EndTime = Time MsgBox "Your Code Ended at " & EndTime End Sub 

This code will display you 2 message box, the first one will show the starting time and the second one will show the end time.

Note: While running this code, you cannot use excel, even the escape key will not work.