Το VBA για το Excel 2016 είναι γρήγορο, αλλά δεν είναι πάντα αρκετά γρήγορο. (Τα προγράμματα υπολογιστών δεν είναι ποτέ αρκετά γρήγορα.) Συνεχίστε να διαβάζετε για να ανακαλύψετε μερικά παραδείγματα προγραμματισμού που μπορείτε να χρησιμοποιήσετε για να επιταχύνετε τις μακροεντολές σας.
Απενεργοποίηση ενημέρωσης οθόνης
Κατά την εκτέλεση μιας μακροεντολής, μπορείτε να καθίσετε και να παρακολουθήσετε όλες τις ενέργειες στην οθόνη που εμφανίζονται στη μακροεντολή. Αν και αυτό μπορεί να είναι διδακτικό, αφού η μακροεντολή λειτουργεί σωστά, είναι συχνά ενοχλητικό και μπορεί να επιβραδύνει σημαντικά την απόδοση της μακροεντολής σας. Ευτυχώς, μπορείτε να απενεργοποιήσετε την ενημέρωση της οθόνης που πραγματοποιείται συνήθως όταν εκτελείτε μια μακροεντολή. Για να απενεργοποιήσετε την ενημέρωση οθόνης, χρησιμοποιήστε την ακόλουθη δήλωση:
Application.ScreenUpdating = False
Εάν θέλετε ο χρήστης να δει τι συμβαίνει σε οποιοδήποτε σημείο της μακροεντολής, χρησιμοποιήστε την ακόλουθη δήλωση για να ενεργοποιήσετε ξανά την ενημέρωση οθόνης:
Application.ScreenUpdating = True
Για να δείξετε τη διαφορά στην ταχύτητα, εκτελέστε αυτήν την απλή μακροεντολή, η οποία γεμίζει μια περιοχή με αριθμούς:
Sub FillRange()
Dim r όσο μακρύς, c Όσο μακρύς
Dim Number as Long
Αριθμός = 0
Για r = 1 έως 50
Για c = 1 έως 50
Αριθμός = Αριθμός + 1
Κελιά(r, c). Επιλέξτε
Κελιά(r, c).Τιμή = Αριθμός
Επόμενο γ
Επόμενο r
End Sub
Βλέπετε ότι κάθε κελί επιλέγεται και η τιμή εισάγεται στα κελιά. Τώρα εισάγετε την ακόλουθη δήλωση στην αρχή της διαδικασίας και εκτελέστε την ξανά:
Application.ScreenUpdating = False
Το εύρος γεμίζει πολύ πιο γρήγορα και δεν βλέπετε το αποτέλεσμα μέχρι να ολοκληρωθεί η εκτέλεση της μακροεντολής και να οριστεί (αυτόματα) η ενημέρωση οθόνης σε True.
Όταν κάνετε εντοπισμό σφαλμάτων κώδικα, η εκτέλεση του προγράμματος μερικές φορές τελειώνει κάπου στη μέση χωρίς να έχετε ενεργοποιήσει ξανά την ενημέρωση οθόνης. Αυτό μερικές φορές προκαλεί το παράθυρο της εφαρμογής του Excel να μην ανταποκρίνεται εντελώς. Η έξοδος από αυτήν την παγωμένη κατάσταση είναι απλή: Επιστρέψτε στο VBE και εκτελέστε την ακόλουθη πρόταση στο παράθυρο Άμεση:
Application.ScreenUpdating = True
Απενεργοποίηση αυτόματου υπολογισμού
Εάν έχετε ένα φύλλο εργασίας με πολλούς σύνθετους τύπους, μπορεί να διαπιστώσετε ότι μπορείτε να επιταχύνετε σημαντικά τα πράγματα ρυθμίζοντας τη λειτουργία υπολογισμού σε μη αυτόματη, ενώ εκτελείται η μακροεντολή σας. Όταν ολοκληρωθεί η μακροεντολή, επαναφέρετε τη λειτουργία υπολογισμού σε αυτόματη.
Η ακόλουθη δήλωση ορίζει τη λειτουργία υπολογισμού του Excel σε μη αυτόματη:
Application.Calculation = xlCalculationManual
Εκτελέστε την επόμενη πρόταση για να ορίσετε τη λειτουργία υπολογισμού σε αυτόματη:
Application.Calculation = xlCalculationAutomatic
Εάν ο κώδικάς σας χρησιμοποιεί κελιά με αποτελέσματα τύπου, η απενεργοποίηση του υπολογισμού σημαίνει ότι τα κελιά δεν θα υπολογιστούν εκ νέου, εκτός και αν πείτε ρητά στο Excel να το κάνει!
Εξάλειψη αυτών των ενοχλητικών μηνυμάτων ειδοποίησης
Όπως γνωρίζετε, μια μακροεντολή μπορεί να εκτελέσει αυτόματα μια σειρά ενεργειών. Σε πολλές περιπτώσεις, μπορείτε να ξεκινήσετε μια μακροεντολή και, στη συνέχεια, να πάτε για παρέα στην αίθουσα διαλειμμάτων ενώ το Excel κάνει τη δουλειά του. Ορισμένες λειτουργίες του Excel, ωστόσο, εμφανίζουν μηνύματα που απαιτούν ανθρώπινη απάντηση. Αυτοί οι τύποι μηνυμάτων σημαίνουν ότι δεν μπορείτε να αφήσετε το Excel χωρίς επίβλεψη ενώ εκτελεί τη μακροεντολή σας — εκτός εάν γνωρίζετε το μυστικό κόλπο.
Μπορείτε να δώσετε εντολή στο Excel να μην εμφανίζει αυτούς τους τύπους ειδοποιήσεων κατά την εκτέλεση μιας μακροεντολής.
Το μυστικό κόλπο για να αποφύγετε αυτά τα μηνύματα ειδοποίησης είναι να εισαγάγετε την ακόλουθη δήλωση VBA στη μακροεντολή σας:
Application.DisplayAlerts = False
Το Excel εκτελεί την προεπιλεγμένη λειτουργία για αυτούς τους τύπους μηνυμάτων. Στην περίπτωση διαγραφής φύλλου, η προεπιλεγμένη λειτουργία είναι Διαγραφή. Εάν δεν είστε σίγουροι ποια είναι η προεπιλεγμένη λειτουργία, κάντε μια δοκιμή για να δείτε τι συμβαίνει.
Όταν τελειώσει η διαδικασία, το Excel επαναφέρει αυτόματα την ιδιότητα DisplayAlerts σε True. Εάν πρέπει να ενεργοποιήσετε ξανά τις ειδοποιήσεις πριν τελειώσει η διαδικασία, χρησιμοποιήστε αυτήν τη δήλωση:
Application.DisplayAlerts = True
Απλοποίηση αναφορών αντικειμένων
Όπως πιθανότατα γνωρίζετε ήδη, οι αναφορές σε αντικείμενα μπορεί να γίνουν πολύ μεγάλες. Για παράδειγμα, μια πλήρης αναφορά σε ένα αντικείμενο Range μπορεί να μοιάζει με αυτό:
Βιβλία εργασίας ("MyBook.xlsx"). Φύλλα εργασίας ("Φύλλο1") _
.Range ("InterestRate")
Εάν η μακροεντολή σας χρησιμοποιεί συχνά αυτό το εύρος, μπορεί να θέλετε να δημιουργήσετε μια μεταβλητή αντικειμένου χρησιμοποιώντας την εντολή Set. Για παράδειγμα, η ακόλουθη δήλωση εκχωρεί αυτό το αντικείμενο Range σε μια μεταβλητή αντικειμένου με το όνομα Rate:
Ορισμός ποσοστού = Βιβλία εργασίας ("MyBook.xlsx") _
.Φύλλα εργασίας ("Φύλλο 1"). Εύρος ("Επιτόκιο")
Αφού ορίσετε αυτήν τη μεταβλητή αντικειμένου, μπορείτε να χρησιμοποιήσετε τη μεταβλητή Rate και όχι τη μακροσκελή αναφορά. Για παράδειγμα, μπορείτε να αλλάξετε την τιμή του κελιού με το όνομα InterestRate:
Rate.Value = .085
Είναι πολύ πιο εύκολο να πληκτρολογήσετε από την ακόλουθη πρόταση:
Βιβλία εργασίας ("MyBook.xlsx"). Φύλλα εργασίας ("Φύλλο1"). _
Εύρος ("InterestRate") = ,085
Εκτός από την απλοποίηση της κωδικοποίησής σας, η χρήση μεταβλητών αντικειμένων επιταχύνει σημαντικά τις μακροεντολές σας.
Δήλωση τύπων μεταβλητών
Συνήθως δεν χρειάζεται να ανησυχείτε για τον τύπο των δεδομένων που εκχωρείτε σε μια μεταβλητή. Το Excel χειρίζεται όλες τις λεπτομέρειες για εσάς στα παρασκήνια. Για παράδειγμα, εάν έχετε μια μεταβλητή με το όνομα MyVar, μπορείτε να αντιστοιχίσετε έναν αριθμό οποιουδήποτε τύπου σε αυτήν τη μεταβλητή. Μπορείτε ακόμη και να της αντιστοιχίσετε μια συμβολοσειρά κειμένου αργότερα στη διαδικασία.
Εάν θέλετε οι διαδικασίες σας να εκτελούνται όσο το δυνατόν γρηγορότερα, πείτε στο Excel ποιος τύπος δεδομένων θα εκχωρηθεί σε καθεμία από τις μεταβλητές σας. Αυτό είναι γνωστό ως δήλωση του τύπου μιας μεταβλητής.
Σε γενικές γραμμές, θα πρέπει να χρησιμοποιείτε τον τύπο δεδομένων που απαιτεί τον μικρότερο αριθμό byte αλλά εξακολουθεί να μπορεί να χειριστεί όλα τα δεδομένα που του έχουν εκχωρηθεί. Όταν το VBA λειτουργεί με δεδομένα, η ταχύτητα εκτέλεσης εξαρτάται από τον αριθμό των byte που έχει στη διάθεσή του η VBA. Με άλλα λόγια, όσο λιγότερα byte χρησιμοποιεί δεδομένα, τόσο πιο γρήγορα μπορεί η VBA να έχει πρόσβαση και να χειρίζεται τα δεδομένα. Μια εξαίρεση σε αυτό είναι ο τύπος δεδομένων Integer. Εάν η ταχύτητα είναι κρίσιμη, χρησιμοποιήστε τον τύπο δεδομένων Long.
Εάν χρησιμοποιείτε μια μεταβλητή αντικειμένου, μπορείτε να δηλώσετε τη μεταβλητή ως συγκεκριμένο τύπο αντικειμένου. Εδώ είναι ένα παράδειγμα:
Dim Rate ως εύρος
Ορισμός ποσοστού = Βιβλία εργασίας ("MyBook.xlsx") _
.Φύλλα εργασίας ("Φύλλο 1"). Εύρος ("Επιτόκιο")
Χρήση της δομής With-End With
Χρειάζεται να ορίσετε έναν αριθμό ιδιοτήτων για ένα αντικείμενο; Ο κώδικάς σας εκτελείται πιο γρήγορα εάν χρησιμοποιείτε τη δομή With-End With. Ένα επιπλέον πλεονέκτημα είναι ότι ο κώδικάς σας μπορεί να είναι πιο ευανάγνωστος.
Ο παρακάτω κώδικας δεν χρησιμοποιεί With-End With:
Επιλογή.Οριζόντια Στοίχιση = xlΚέντρο
Επιλογή.Κάθετη στοίχιση = xlCenter
Selection.WrapText = Αληθινό
Επιλογή.Προσανατολισμός = 0
Selection.ShrinkToFit = False
Επιλογή.MergeCells = False
Ακολουθεί ο ίδιος κώδικας, ο οποίος έχει ξαναγραφεί για να χρησιμοποιήσει το With-End With:
Με Επιλογή
.HorizontalAlignment = xlCenter
.Κάθετη στοίχιση = xlCenter
.WrapText = Αληθινό
.Προσανατολισμός = 0
.ShrinkToFit = Λάθος
.MergeCells = Λάθος
Τέλος με
Όταν χρησιμοποιείτε το With-End With, βεβαιωθείτε ότι κάθε πρόταση αρχίζει με μια τελεία.