Λειτουργία νάρκης 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 ως LongPtr) 'Για εκδόσεις 64-bit του Excel #Else Δηλώστε Δηλώσεις Sub Sleep Lib "kernel32" (ByVal dwMilliseconds as Long)' Για εκδόσεις 32-bit του Excel # Τέλος εάν

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

Παράδειγμα

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

Παράδειγμα # 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. Ακόμα και το κλειδί διαφυγής δεν θα λειτουργήσει.

ενδιαφέροντα άρθρα...