Καθώς οι μακροεντολές Excel γίνονται όλο και πιο ισχυρές και πολύπλοκες, μπορεί να διαπιστώσετε ότι χάνουν την απόδοσή τους. Όταν μιλάμε για μακροεντολές, η λέξη απόδοση είναι συνήθως συνώνυμη με την ταχύτητα . Η ταχύτητα είναι το πόσο γρήγορα οι διαδικασίες VBA εκτελούν τις προβλεπόμενες εργασίες τους. Ακολουθούν δέκα τρόποι για να διατηρήσετε τη λειτουργία των μακροεντολών Excel στο βέλτιστο επίπεδο απόδοσης.
Παύση υπολογισμών φύλλου
Γνωρίζατε ότι κάθε φορά που αλλάζει ή χειρίζεται ένα κελί που επηρεάζει οποιονδήποτε τύπο στο υπολογιστικό φύλλο σας, το Excel υπολογίζει εκ νέου ολόκληρο το φύλλο εργασίας; Σε φύλλα εργασίας που έχουν μεγάλο αριθμό τύπων, αυτή η συμπεριφορά μπορεί να επιβραδύνει δραστικά τις μακροεντολές σας.
Μπορείτε να χρησιμοποιήσετε την ιδιότητα Application.Calculation για να πείτε στο Excel να μεταβεί στη λειτουργία μη αυτόματου υπολογισμού. Όταν ένα βιβλίο εργασίας βρίσκεται σε λειτουργία χειροκίνητου υπολογισμού, το βιβλίο εργασίας δεν θα επανυπολογίσει μέχρι να ενεργοποιήσετε ρητά έναν υπολογισμό πατώντας το πλήκτρο F9.
Τοποθετήστε το Excel σε λειτουργία μη αυτόματου υπολογισμού, εκτελέστε τον κώδικά σας και μετά επιστρέψτε στη λειτουργία αυτόματου υπολογισμού.
Sub Macro1()
Application.Calculation = xlCalculationManual
"Τοποθετήστε τον κωδικό μακροεντολής σας εδώ
Application.Calculation = xlCalculationAutomatic
End Sub
Η επαναφορά της λειτουργίας υπολογισμού σε xlCalculationAutomatic θα ενεργοποιήσει αυτόματα έναν επανυπολογισμό του φύλλου εργασίας, επομένως δεν χρειάζεται να πατήσετε το πλήκτρο F9 μετά την εκτέλεση της μακροεντολής σας.
Απενεργοποίηση ενημέρωσης οθόνης φύλλου
Μπορεί να παρατηρήσετε ότι όταν εκτελούνται οι μακροεντολές σας, η οθόνη σας τρεμοπαίζει αρκετά. Αυτό το τρεμόπαιγμα είναι το Excel που προσπαθεί να σχεδιάσει ξανά την οθόνη για να δείξει την τρέχουσα κατάσταση του φύλλου εργασίας. Δυστυχώς, κάθε φορά που το Excel επανασχεδιάζει την οθόνη, καταλαμβάνει πόρους μνήμης.
Μπορείτε να χρησιμοποιήσετε την ιδιότητα Application.ScreenUpdating για να απενεργοποιήσετε τις ενημερώσεις οθόνης μέχρι να ολοκληρωθεί η μακροεντολή σας. Η απενεργοποίηση της ενημέρωσης οθόνης εξοικονομεί χρόνο και πόρους, επιτρέποντας στη μακροεντολή σας να εκτελείται λίγο πιο γρήγορα. Αφού ολοκληρωθεί η εκτέλεση του κώδικα μακροεντολής, μπορείτε να ενεργοποιήσετε ξανά την ενημέρωση οθόνης.
Sub Macro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
"Τοποθετήστε τον κωδικό μακροεντολής σας εδώ
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Αφού επαναφέρετε την ιδιότητα ScreenUpdating σε True, το Excel θα ενεργοποιήσει αυτόματα μια νέα σχεδίαση της οθόνης.
Απενεργοποίηση ενημερώσεων γραμμής κατάστασης
Η γραμμή κατάστασης του Excel, που εμφανίζεται στο κάτω μέρος του παραθύρου του Excel, εμφανίζει συνήθως την πρόοδο ορισμένων ενεργειών στο Excel. Εάν η μακροεντολή σας λειτουργεί με πολλά δεδομένα, η γραμμή κατάστασης θα καταλαμβάνει κάποιους πόρους.
Είναι σημαντικό να σημειωθεί ότι η απενεργοποίηση της ενημέρωσης οθόνης είναι ξεχωριστή από την απενεργοποίηση της εμφάνισης της γραμμής κατάστασης. Η γραμμή κατάστασης θα συνεχίσει να ενημερώνεται ακόμα κι αν απενεργοποιήσετε την ενημέρωση οθόνης. Μπορείτε να χρησιμοποιήσετε την ιδιότητα Application.DisplayStatusBar για να απενεργοποιήσετε προσωρινά τυχόν ενημερώσεις της γραμμής κατάστασης, βελτιώνοντας περαιτέρω την απόδοση της μακροεντολής σας:
Sub Macro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
"Τοποθετήστε τον κωδικό μακροεντολής σας εδώ
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
End Sub
Λέμε στο Excel να αγνοήσει τα συμβάντα
Μπορείτε να εφαρμόσετε μακροεντολές ως διαδικασίες συμβάντων, λέγοντας στο Excel να εκτελεί συγκεκριμένο κώδικα όταν αλλάζει ένα φύλλο εργασίας ή ένα βιβλίο εργασίας.
Μερικές φορές, οι τυπικές μακροεντολές κάνουν αλλαγές που θα ενεργοποιήσουν μια διαδικασία συμβάντος. Για παράδειγμα, εάν έχετε μια τυπική μακροεντολή που χειρίζεται πολλά κελιά στο Φύλλο1, κάθε φορά που αλλάζει ένα κελί σε αυτό το φύλλο, η μακροεντολή σας πρέπει να τίθεται σε παύση ενώ εκτελείται το συμβάν Worksheet_Change.
Μπορείτε να προσθέσετε ένα άλλο επίπεδο ενίσχυσης της απόδοσης χρησιμοποιώντας την ιδιότητα EnableEvents για να πείτε στο Excel να αγνοεί συμβάντα ενώ εκτελείται η μακροεντολή σας.
Ορίστε την ιδιότητα EnableEvents σε False πριν εκτελέσετε τη μακροεντολή σας. Αφού ολοκληρωθεί η εκτέλεση του κώδικα μακροεντολής, μπορείτε να ορίσετε την ιδιότητα EnableEvents ξανά σε True.
Sub Macro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
"Τοποθετήστε τον κωδικό μακροεντολής σας εδώ
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
End Sub
Απόκρυψη αλλαγών σελίδας
Κάθε φορά που η μακροεντολή σας τροποποιεί τον αριθμό των γραμμών, τροποποιεί τον αριθμό των στηλών ή αλλάζει τη ρύθμιση σελίδας ενός φύλλου εργασίας, το Excel αναγκάζεται να χρειάζεται χρόνο για να υπολογίσει εκ νέου τις αλλαγές σελίδας που εμφανίζονται στο φύλλο.
Μπορείτε να αποφύγετε αυτήν τη συμπεριφορά απλώς αποκρύπτοντας τις αλλαγές σελίδας πριν ξεκινήσετε τη μακροεντολή σας.
Ορίστε την ιδιότητα φύλλου DisplayPageBreaks σε False για να αποκρύψετε αλλαγές σελίδας. Εάν θέλετε να συνεχίσετε να εμφανίζετε αλλαγές σελίδας μετά την εκτέλεση της μακροεντολής σας, ορίστε την ιδιότητα φύλλου DisplayPageBreaks ξανά σε True.
Sub Macro1()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
Activesheet.DisplayPageBreaks = False
"Τοποθετήστε τον κωδικό μακροεντολής σας εδώ
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.EnableEvents = True
Activesheet.DisplayPageBreaks = True
End Sub
Αναστολή ενημερώσεων συγκεντρωτικού πίνακα
Εάν η μακροεντολή σας χειρίζεται συγκεντρωτικούς πίνακες που περιέχουν μεγάλες πηγές δεδομένων, ενδέχεται να έχετε κακή απόδοση όταν κάνετε πράγματα όπως η δυναμική προσθήκη ή μετακίνηση συγκεντρωτικών πεδίων.
Μπορείτε να βελτιώσετε την απόδοση της μακροεντολής σας αναστέλλοντας τον επανυπολογισμό του συγκεντρωτικού πίνακα μέχρι να γίνουν όλες οι αλλαγές στο πεδίο περιστροφής. Απλώς ορίστε την ιδιότητα PivotTable.ManualUpdate σε True για να αναβάλετε τον επανυπολογισμό, εκτελέστε τον κώδικα μακροεντολής σας και, στη συνέχεια, ορίστε την ιδιότητα PivotTable.ManualUpdate ξανά σε False για να ενεργοποιήσετε τον εκ νέου υπολογισμό.
Sub Macro1()
ActiveSheet.PivotTables("PivotTable1").ManualUpdate=True
"Τοποθετήστε τον κωδικό μακροεντολής σας εδώ
ActiveSheet.PivotTables("PivotTable1").ManualUpdate=False
End Sub
Αποφύγετε την αντιγραφή και επικόλληση
Είναι σημαντικό να θυμάστε ότι αν και το Macro Recorder εξοικονομεί χρόνο γράφοντας κώδικα VBA για εσάς, δεν γράφει πάντα τον πιο αποτελεσματικό κώδικα. Ένα χαρακτηριστικό παράδειγμα είναι πώς το Macro Recorder καταγράφει οποιαδήποτε ενέργεια αντιγραφής και επικόλλησης εκτελείτε κατά την εγγραφή.
Μπορείτε να δώσετε στις μακροεντολές σας μια μικρή ώθηση αποκόπτοντας τον μεσάζοντα και πραγματοποιώντας απευθείας αντιγραφή από ένα κελί σε ένα κελί προορισμού. Αυτός ο εναλλακτικός κώδικας χρησιμοποιεί το όρισμα Destination για να παρακάμψει το πρόχειρο και να αντιγράψει τα περιεχόμενα του κελιού A1 απευθείας στο κελί B1.
Εύρος ("A1"). Αντιγραφή Προορισμού:=Εύρος ("B1")
Εάν χρειάζεται να αντιγράψετε μόνο τιμές (όχι μορφοποίηση ή τύπους), μπορείτε να βελτιώσετε ακόμη περισσότερο την απόδοση αποφεύγοντας τη μέθοδο Αντιγραφής από κοινού. Απλώς ορίστε την τιμή του κελιού προορισμού στην ίδια τιμή που βρίσκεται στο κελί προέλευσης. Αυτή η μέθοδος είναι περίπου 25 φορές πιο γρήγορη από τη χρήση της μεθόδου αντιγραφής:
Εύρος ("B1").Τιμή = Εύρος ("A1").Τιμή
Εάν χρειάζεται να αντιγράψετε μόνο τύπους από ένα κελί σε άλλο (όχι τιμές ή μορφοποίηση), μπορείτε να ορίσετε τον τύπο του κελιού προορισμού στον ίδιο τύπο που περιέχεται στο κελί προέλευσης:
Εύρος ("B1").Τύπος = Εύρος ("A1").Τύπος
Χρησιμοποιώντας τη δήλωση Με
Κατά την εγγραφή μακροεντολών, συχνά χειρίζεστε το ίδιο αντικείμενο περισσότερες από μία φορές. Μπορείτε να εξοικονομήσετε χρόνο και να βελτιώσετε την απόδοση χρησιμοποιώντας τη δήλωση With για να εκτελέσετε πολλές ενέργειες σε ένα δεδομένο αντικείμενο σε μία λήψη.
Η δήλωση With που χρησιμοποιείται στο ακόλουθο παράδειγμα λέει στο Excel να εφαρμόσει όλες τις αλλαγές μορφοποίησης ταυτόχρονα:
Με εύρος ("A1"). Γραμματοσειρά
.Τόλμη = Αληθινή
.Italic = Αληθινό
.Υπογράμμιση = xlUnderlineStyleSingle
Τέλος με
Το να αποκτήσετε τη συνήθεια να τεμαχίζετε τις ενέργειες σε δηλώσεις With όχι μόνο θα διατηρήσει τις μακροεντολές σας πιο γρήγορα αλλά θα διευκολύνει και την ανάγνωση του κώδικα μακροεντολής σας.
Αποφυγή της μεθόδου Επιλογή
Το Macro Recorder λατρεύει να χρησιμοποιεί τη μέθοδο Select για να επιλέγει ρητά αντικείμενα πριν προβεί σε ενέργειες σε αυτά. Γενικά δεν χρειάζεται να επιλέξετε αντικείμενα πριν εργαστείτε μαζί τους. Στην πραγματικότητα, μπορείτε να βελτιώσετε δραματικά την απόδοση της μακροεντολής μη χρησιμοποιώντας τη μέθοδο Επιλογή.
Αφού καταγράψετε τις μακροεντολές σας, συνηθίστε να τροποποιείτε τον κώδικα που δημιουργείται για να καταργήσετε τις μεθόδους Επιλογή. Σε αυτήν την περίπτωση, ο βελτιστοποιημένος κώδικας θα μοιάζει με τον ακόλουθο:
Φύλλα ("Φύλλο1").Εύρος ("A1").FormulaR1C1 = "1000"
Φύλλα ("Φύλλο 2"). Εύρος ("A1").FormulaR1C1 = "1000"
Φύλλα ("Φύλλο 3"). Εύρος ("A1").FormulaR1C1 = "1000"
Σημειώστε ότι το τίποτα δεν επιλέγεται. Ο κώδικας χρησιμοποιεί απλώς την ιεραρχία αντικειμένων για να εφαρμόσει τις απαραίτητες ενέργειες.
Περιορισμός ταξιδιών στο φύλλο εργασίας
Ένας άλλος τρόπος για να επιταχύνετε τις μακροεντολές σας είναι να περιορίσετε τον αριθμό των φορών που αναφέρετε δεδομένα φύλλου εργασίας στον κώδικά σας. Είναι πάντα λιγότερο αποτελεσματικό να συλλέγετε δεδομένα από το φύλλο εργασίας παρά από τη μνήμη. Δηλαδή, οι μακροεντολές σας θα εκτελούνται πολύ πιο γρήγορα εάν δεν χρειάζεται να αλληλεπιδρούν επανειλημμένα με το φύλλο εργασίας.
Για παράδειγμα, ο ακόλουθος απλός κώδικας αναγκάζει τη VBA να επιστρέφει συνεχώς στα Φύλλα("Φύλλο1").Range("A1") για να πάρει τον αριθμό που απαιτείται για τη σύγκριση που εκτελείται στην πρόταση If:
Για ReportMonth = 1 έως 12
If Range("A1").Value = ReportMonth Τότε
MsgBox 1000000 / Μήνας αναφοράς
Τέλος εαν
Επόμενος Μήνας Έκθεσης
Μια πολύ πιο αποτελεσματική μέθοδος είναι να αποθηκεύσετε την τιμή στα Φύλλα ("Φύλλο1").Range("A1") σε μια μεταβλητή που ονομάζεται MyMonth. Με αυτόν τον τρόπο, ο κώδικας παραπέμπει στη μεταβλητή MyMonth αντί για το φύλλο εργασίας:
Dim MyMonth ως ακέραιος αριθμός
MyMonth = Εύρος ("A1").Τιμή
Για ReportMonth = 1 έως 12
If MyMonth = ReportMonth Τότε
MsgBox 1000000 / Μήνας αναφοράς
Τέλος εαν
Επόμενος Μήνας Έκθεσης
Εξετάστε το ενδεχόμενο να αξιοποιήσετε μεταβλητές για να εργαστείτε με δεδομένα στη μνήμη σε αντίθεση με την απευθείας αναφορά σε φύλλα εργασίας.
Αποφύγετε την υπερβολική αναφορά
Όταν καλείτε μια μέθοδο ή μια ιδιότητα ενός αντικειμένου, πρέπει να περάσει από τη διεπαφή IDispatch του στοιχείου OLE. Οι κλήσεις σε αυτά τα στοιχεία OLE χρειάζονται χρόνο, επομένως η μείωση του αριθμού αναφορών σε στοιχεία OLE μπορεί να βελτιώσει την ταχύτητα του κώδικα μακροεντολής.
Για την επίκληση ιδιοτήτων ή μεθόδων αντικειμένου, χρησιμοποιείται γενικά η μέθοδος αναπαράστασης του Object.Method , δηλαδή το "." Το σύμβολο χρησιμοποιείται για την επίκληση ιδιοτήτων και μεθόδων.
Επομένως, ο αριθμός των κλήσεων μεθόδου ή ιδιοτήτων μπορεί να κριθεί σύμφωνα με τον αριθμό των συμβόλων ".". Όσο λιγότερο το "." σύμβολο, τόσο πιο γρήγορα εκτελείται ο κωδικός.
Για παράδειγμα, η ακόλουθη δήλωση περιλαμβάνει 3 σύμβολα ".".
ThisWorkbook.Sheet1.Range("A1").Value = 100
Η ακόλουθη δήλωση έχει μόνο ένα σύμβολο ".".
Activewindow.Top = 100
Ακολουθούν μερικά κόλπα για να μειώσετε τον αριθμό των συμβόλων "." να τρέχει πιο γρήγορα.
Πρώτον, όταν χρειάζεται να αναφέρεστε επανειλημμένα στο ίδιο αντικείμενο, μπορείτε να ορίσετε το αντικείμενο σε μια μεταβλητή για να μειώσετε τον αριθμό των κλήσεων. Για παράδειγμα, ο ακόλουθος κώδικας απαιτεί δύο κλήσεις ανά γραμμή.
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = 100
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = 200
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = 300
Επειδή το αντικείμενο Sheets("Sheet1") πρέπει να αναφέρεται επανειλημμένα, μπορεί να οριστεί πρώτα σε μια μεταβλητή sht , έτσι ώστε κάθε κώδικας να χρειάζεται να καλείται μόνο μία φορά.
Set sht = ThisWorkbook.Sheets("Sheet1")
sht.Cells(1, 1) = 100
sht.Cells(2, 1) = 200
sht.Cells(3, 1) = 300
Δεύτερον, εάν δεν θέλετε να δηλώσετε μια προσωρινή μεταβλητή sht, μπορείτε επίσης να χρησιμοποιήσετε τη δήλωση With που αναφέρθηκε προηγουμένως. Όπως φαίνεται στο παρακάτω παράδειγμα:
With ThisWorkbook.Sheets("Sheet1")
.Cells(1, 1) = 100
.Cells(2, 1) = 200
.Cells(3, 1) = 300
End With
Τρίτον, όταν υπάρχουν πολλοί βρόχοι, προσπαθήστε να διατηρήσετε ιδιότητες και μεθόδους εκτός του βρόχου. Όταν χρησιμοποιείτε ξανά μια τιμή ιδιότητας του ίδιου αντικειμένου σε έναν βρόχο, μπορείτε πρώτα να αντιστοιχίσετε την τιμή ιδιότητας σε μια καθορισμένη μεταβλητή εκτός του βρόχου και, στη συνέχεια, να χρησιμοποιήσετε τη μεταβλητή στον βρόχο, η οποία μπορεί να επιτύχει μεγαλύτερη ταχύτητα. Όπως φαίνεται στο παρακάτω παράδειγμα:
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = Cells(1, 2).Value
Next i
Κάθε βρόχος σε αυτό το παράδειγμα λαμβάνει την ιδιότητα Value του κελιού Cells(1,2). Εάν αντιστοιχίσετε την ιδιότητα Value του Cells(1.2) σε μια μεταβλητή πριν από την έναρξη του βρόχου, θα έχετε ταχύτερη εκτέλεση. Όπως φαίνεται στο παρακάτω παράδειγμα:
tmp = Cells(1, 2).Value
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = tmp
Next i
Ο παραπάνω κωδικός καλεί ThisWorkbook.Sheets("Sheet1") κάθε φορά που κάνει βρόχο. Μπορείτε να το κάνετε πιο γρήγορα χρησιμοποιώντας τη δήλωση With για να μετακινήσετε την κλήση στο ThisWorkbook.Sheets("Sheet1") εκτός του βρόχου. Όπως φαίνεται στο παρακάτω παράδειγμα:
tmp = Cells(1, 2).Value
With ThisWorkbook.Sheets("Sheet1")
For i = 1 To 1000
.Cells(1, 1) = tmp
.Cells(2, 1) = tmp
.Cells(3, 1) = tmp
Next i
End With
Αποφύγετε τη χρήση τύπων παραλλαγών
Οι αρχάριοι συνήθως προτιμούν να χρησιμοποιούν μεταβλητές τύπου Variant, οι οποίες έχουν το πλεονέκτημα ότι είναι λιγότερο περίπλοκες, επειδή οποιοσδήποτε τύπος δεδομένων μπορεί να χρησιμοποιηθεί χωρίς πρόβλημα υπερχείλισης μνήμης, εάν τα δεδομένα είναι πολύ μεγάλα για τους τύπους δεδομένων Integer ή Long. Ωστόσο, τα δεδομένα τύπου Varienmt απαιτούν περισσότερο χώρο μνήμης από τους άλλους καθορισμένους τύπους (2 byte για ακέραια δεδομένα, 4 byte για δεδομένα μεγάλου μήκους και 16 byte για δεδομένα παραλλαγής), η VBA απαιτεί περισσότερο χρόνο για την επεξεργασία δεδομένων τύπου παραλλαγής από άλλους καθορισμένους τύπους των δεδομένων. Όπως δείχνει το παρακάτω παράδειγμα.
Sub VariantTest()
Dim i As Long
Dim ix As Integer, iy As Integer, iz As Integer
Dim vx As Variant, vy As Variant, vz As Variant
Dim tm As Date
vx = 100: vy = 50
tm = Timer
For i = 1 To 1000000
vz = vx * vy
vz = vx + vy
vz = vx - vy
vz = vx / vy
Next i
Debug.Print "Variant types take " & Format((Timer - tm), "0.00000") & " seconds"
ix = 100: iy = 50
tm = Timer
For i = 1 To 1000000
iz = ix * iy
iz = ix + iy
iz = ix - iy
iz = ix / iy
Next i
Debug.Print "Integer types take " & Format((Timer - tm), "0.00000") & " seconds"
End Sub
Στον παραπάνω κώδικα, οι γραμμές 8 έως 13 κάνουν 1 εκατομμύριο πράξεις πρόσθεσης, αφαίρεσης, πολλαπλασιασμού και διαίρεσης μεταβλητών Variant και οι γραμμές 17 έως 22 κάνουν 1 εκατομμύριο πράξεις πρόσθεσης, αφαίρεσης, πολλαπλασιασμού και διαίρεσης μεταβλητών ακέραιου αριθμού. Στον υπολογιστή μου, η λειτουργία της μεταβλητής Variant χρειάστηκε περίπου 0,09375 δευτερόλεπτα, ενώ η λειτουργία της μεταβλητής Integer χρειάστηκε περίπου 0,03125 δευτερόλεπτα. Τα αποτελέσματα μπορεί να διαφέρουν από υπολογιστή σε υπολογιστή, αλλά οι μεταβλητές Variant είναι σημαντικά πιο αργές από τις μεταβλητές Integer .
Για αυτόν τον λόγο, συνιστάται να αποφεύγετε τη χρήση μεταβλητών Variant όταν μπορείτε να χρησιμοποιήσετε ρητά τον καθορισμένο τύπο δεδομένων .