Λειτουργία νάρκης Excel VBA για παύση του κώδικα μακροεντολής σας

Λειτουργία ύπνου Excel VBA

Η λειτουργία νάρκης VBA είναι μια συνάρτηση παραθύρων που υπάρχει κάτω από τα αρχεία DLL των παραθύρων, η οποία χρησιμοποιείται για να σταματήσει ή να σταματήσει η διαδικασία μακροεντολής από την εκτέλεση για ένα καθορισμένο χρονικό διάστημα μετά από αυτό το συγκεκριμένο ποσό από το οποίο μπορούμε να συνεχίσουμε το πρόγραμμα.

Υπάρχουν καταστάσεις όπου πρέπει να θέσουμε σε παύση τη διαδικασία μακροεντολής για να ολοκληρώσουμε άλλα σύνολα εργασιών. Άλλα σύνολα εργασιών θα μπορούσαν να είναι μέρος της κωδικοποίησης μας ή μέρος άλλης διαδικασίας μακροεντολών ή θα μπορούσαν να εισαχθούν για την τρέχουσα μακροεντολή excel. Πώς μπορείτε να θέσετε σε παύση το πρόγραμμα όταν εκτελείται; Μπορούμε να θέσουμε σε παύση τον κώδικα διαδικασίας για κάποιο χρονικό διάστημα που καθορίζεται από τον χρήστη και μετά από αυτό ορισμένο ποσό μπορούμε να συνεχίσουμε το πρόγραμμα. Μπορούμε να το κάνουμε αυτό στο VBA χρησιμοποιώντας τη λειτουργία SLEEP.

Τι κάνει η λειτουργία ύπνου VBA;

SLEEP, όπως το ίδιο το όνομα λέει "ύπνος για λίγο", "ξεκούραση για λίγο", "παύση για χρόνο", διακοπή για κάποιο χρονικό διάστημα "κ.λπ. Χρησιμοποιώντας αυτό μπορούμε να καθυστερήσουμε τη διαδικασία του μακρο κώδικα.

Εάν νομίζετε ότι έχουμε μια ενσωματωμένη συνάρτηση που ονομάζεται SLEEP, τότε κάνετε λάθος επειδή στο VBA δεν υπάρχει τέτοια λειτουργία, αλλά έχουμε μια λειτουργία που ονομάζεται Sleep ως λειτουργία Windows. Με την εισαγωγή ενός ειδικού συνόλου κώδικα μπορούμε πραγματικά να ονομάσουμε αυτήν τη λειτουργία στο VBA. Στην πραγματικότητα, είναι μια συνάρτηση που υπάρχει στα αρχεία DLL των Windows, επομένως πρέπει να δηλώσουμε την ονοματολογία του API πριν από την έναρξη της υπορουτίνας στο vba.

Παρακάτω είναι ο κωδικός VBA.

Κώδικας:

# Εάν VBA7 Τότε Δηλώστε Δημόσια PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds as LongPtr) 'Για εκδόσεις 64-bit του Excel # Else Δημόσια δήλωση Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) "Για εκδόσεις 32-Bit του Excel # Τέλος εάν 

Αντιγράψτε τα παραπάνω και επικολλήστε τη λειτουργική σας μονάδα πριν αρχίσετε να γράφετε τους κωδικούς μακροεντολών. Θα πρέπει να επικολληθεί έτσι στην ενότητα σας.

Παράδειγμα

Πριν σας δείξω τον τρόπο σύνταξης του κώδικα, επιτρέψτε μου να σας πω λίγο για τη λειτουργία ύπνου. Καθυστερεί τη διαδικασία σε χιλιοστά του δευτερολέπτου. Έτσι, 1 δευτερόλεπτο ισούται με 1000 χιλιοστά του δευτερολέπτου, εάν θέλετε να κάνετε παύση για 10 δευτερόλεπτα θα πρέπει να είναι 10000 χιλιοστά του δευτερολέπτου.

Μπορείτε να κάνετε λήψη αυτού του προτύπου VBA Sleep Excel εδώ - Πρότυπο VBA Sleep Excel

Παράδειγμα # 1

Μόλις επικολληθεί ο κωδικός API πριν από την έναρξη της διαδικασίας Sub, δημιουργήστε ένα όνομα μακροεντολής.

Κώδικας:

# Sub Sleep_Example1 () End Sub 

Δηλώστε δύο μεταβλητές ως συμβολοσειρά.

Κώδικας:

 Dim StartTime As String Dim EndTime As String 

Για τη μεταβλητή StartTime εκχωρήστε την τιμή της συνάρτησης TIME. Σημείωση: Η λειτουργία TIME in excel επιστρέφει την τρέχουσα ώρα.

Κώδικας:

StartTime = Ώρα

Τώρα θα εμφανίσουμε αυτό το μήνυμα στο πλαίσιο μηνυμάτων VBA.

Κώδικας:

StartTime = Time MsgBox StartTime

Τώρα θα θέσουμε σε παύση τον κωδικό για 10 δευτερόλεπτα χρησιμοποιώντας τη λειτουργία αναστολής λειτουργίας. Όπως είπα, διακόπτει τον κώδικα σε χιλιοστά του δευτερολέπτου, οπότε για παύση για 10 δευτερόλεπτα πρέπει να χρησιμοποιήσουμε 10000 χιλιοστά του δευτερολέπτου.

Κώδικας:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) End Sub 

Τώρα χρησιμοποιήστε τη δεύτερη μεταβλητή EndTime και αντιστοιχίστε την τρέχουσα ώρα.

Κώδικας:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) EndTime = Time MsgBox EndTime End Sub 

Τώρα δύο μεταβλητές StartTime και EndTime θα κρατήσουν την ώρα έναρξης και την ώρα λήξης της μακροεντολής. Εκτελέστε αυτήν τη μακροεντολή, στην αρχή θα δούμε την ώρα έναρξης της μακροεντολής, δηλαδή την τρέχουσα ώρα στο σύστημά σας.

Κάντε κλικ στο OK, θα κοιμηθεί για 10 δευτερόλεπτα. Μπορείτε να δείτε το σύμβολο buffer.

Μετά από 10 δευτερόλεπτα θα αρχίσει να συνεχίζει τον κωδικό, έτσι, θα δείξει την ώρα λήξης, δηλαδή μετά από αναμονή για 10 δευτερόλεπτα ποια είναι η τρέχουσα ώρα τώρα.

Τώρα μπορείτε να δείτε τη μακροεντολή που ξεκίνησε στις 10:54:14 και έληξε στις 10:54:24 δηλαδή ακριβώς υπάρχει η διαφορά 10 δευτερολέπτων. Σε αυτά τα 10 δευτερόλεπτα, η VBA σταματά τον κώδικα που εκτελείται.

Παράδειγμα # 2 - Λειτουργία ύπνου σε βρόχους

Ο ύπνος χρησιμοποιείται καλύτερα με βρόχους στο 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 is 1 second so 3000 is is to 3 seconds Loop End Υπο 

Εκτελέστε αυτόν τον κωδικό και πρέπει να περιμένετε τουλάχιστον 30 δευτερόλεπτα για να ολοκληρώσετε τη διαδικασία.

Για να παρακολουθείτε την ακριβή ώρα χρησιμοποιήστε τον παρακάτω κωδικό.

Κώδικας:

 Sub Sleep_Example2 () Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox "Ο κώδικάς σας ξεκίνησε στο" & StartTime k = 1 Do While k <= 10 Cells (k, 1). Value = kk = k + 1 ύπνος (3000) '1000 χιλιοστά του δευτερολέπτου είναι 1 δευτερόλεπτο, έτσι το 3000 είναι ίσο με 3 δευτερόλεπτα Loop EndTime = Time MsgBox "Ο κωδικός σας έληξε στο" & EndTime End Sub 

Αυτός ο κωδικός θα εμφανίσει 2 πλαίσιο μηνύματος, ο πρώτος θα εμφανίσει την ώρα έναρξης και ο δεύτερος θα εμφανίσει την ώρα λήξης.

Σημείωση: Κατά την εκτέλεση αυτού του κώδικα, δεν μπορείτε να χρησιμοποιήσετε το excel, ακόμη και το κλειδί διαφυγής δεν θα λειτουργήσει.