Λειτουργίες αναμονής & ύπνου VBA - Παύση / καθυστέρηση κώδικα VBA

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

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

Χρήση της εφαρμογής. Μέθοδος αναμονής

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

Περιμένετε 1 δευτερόλεπτο

Συμπεριλαμβανομένης αυτής της γραμμής παρακάτω στη μακροεντολή σας, η λειτουργία της θα διακοπεί για περίπου 1 δευτερόλεπτο:

1 Application.Wait (Now + TimeValue ("0:00:01"))

Περίμενε μέχρι

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

1 Εφαρμογή. Περιμένετε "09:00:00"

Παρακαλώ σημειώστε ότι το Εφαρμογή. Περιμένετε δεν δέχεται καθυστερήσεις μικρότερες από 1 δευτερόλεπτο.

Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!

Χρήση της μεθόδου ύπνου

Εάν χρειάζεστε έναν πιο ακριβή τρόπο παύσης της μακροεντολής σας, μπορείτε να χρησιμοποιήσετε τη μέθοδο Sleep.

Ο ύπνος είναι μια λειτουργία API των Windows, δηλαδή δεν αποτελεί μέρος του VBA. Μπορείτε να έχετε πρόσβαση χρησιμοποιώντας μια ειδική δήλωση δήλωσης.

Εάν χρησιμοποιείτε την έκδοση 64-bit του Microsoft Office, μπορείτε να εισαγάγετε την ακόλουθη δήλωση σε μια νέα λειτουργική μονάδα ή στην αρχή της ενότητας (όχι απευθείας στην υπορουτίνα) στην οποία θέλετε να χρησιμοποιήσετε τη λειτουργία Αναστολής λειτουργίας:

1 Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

Με έκδοση 32-bit χρησιμοποιήστε αυτήν τη γραμμή:

1 Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

Αφού δηλώσετε τη συνάρτηση Sleep, έχετε πρόσβαση σε αυτήν σε υπορουτίνες όπως αυτή:

1 Κοιμήσου 10000

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

Χρήση βρόχου με εκδηλώσεις Do

Το μεγάλο μειονέκτημα της χρήσης των μεθόδων Wait and Sleep είναι ότι ο χρήστης δεν μπορεί να κάνει τίποτα στο Excel ενώ περιμένει να συνεχιστεί η μακροεντολή. Ένας χρήστης θα μπορούσε να σκεφτεί ότι το Excel έχει σταματήσει να ανταποκρίνεται και ενώ ο χρήστης μπορεί στη συνέχεια να χρησιμοποιήσει Ctl+Break για να διακόψει τη μακροεντολή, αυτό νικά τον σκοπό της αρχικής παύσης στη μακροεντολή.

Για να ξεπεράσουμε αυτό το πρόβλημα, μπορούμε να χρησιμοποιήσουμε ένα βρόχο με μια μέθοδο που ονομάζεται DoEvents.

1234567 Public Sub Test ()Dim i As LongΓια i = 1 έως 20000Εύρος ("A1"). Τιμή = iDoEventsΕπόμενο iΤέλος υπο

Τώρα, ενώ το Excel εκτελεί τη μακροεντολή παραπάνω, ο χρήστης μπορεί να συνεχίσει να αλληλεπιδρά με το Excel - μπορούμε να αλλάξουμε καρτέλες ή να διαμορφώσουμε κελιά για παράδειγμα - βασικά, η μακροεντολή συνεχίζει να εκτελείται αλλά η οθόνη του Excel δεν έχει παγώσει. Θα μπορούσαμε να χρησιμοποιήσουμε έναν παρόμοιο βρόχο για να δημιουργήσουμε μια λειτουργία χρονομέτρου στο Excel και να ενσωματώσουμε το DoEvents για να ξεπαγώσετε την οθόνη ενώ λειτουργεί ο χρονοδιακόπτης.

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave