Αυτό το σεμινάριο θα εξηγήσει τι σημαίνει ένα σφάλμα αυτοματισμού VBA και πώς εμφανίζεται.
Το Excel αποτελείται από αντικείμενα - το αντικείμενο του βιβλίου εργασίας, το αντικείμενο του φύλλου εργασίας, το αντικείμενο εμβέλειας και το αντικείμενο κυψέλης για να ονομάσετε μόνο μερικά. Κάθε αντικείμενο έχει πολλές ιδιότητες και μεθόδους των οποίων η συμπεριφορά μπορεί να ελεγχθεί με κώδικα VBA. Εάν ο κωδικός VBA δεν είναι σωστά προγραμματισμένος, τότε μπορεί να προκύψει σφάλμα αυτοματισμού. Είναι ένα από τα πιο απογοητευτικά λάθη στο VBA καθώς μπορεί συχνά να εμφανίζεται χωρίς προφανή λόγο όταν ο κώδικας σας φαίνεται τέλειος!
(Ανατρέξτε στον Οδηγό χειρισμού σφαλμάτων για περισσότερες πληροφορίες σχετικά με τα Σφάλματα VBA)
Αναφορά σε μια μεταβλητή όχι πλέον ενεργή
Θα μπορούσε να προκύψει σφάλμα αυτοματισμού όταν αναφέρεστε σε ένα βιβλίο εργασίας ή σε ένα φύλλο εργασίας μέσω μιας μεταβλητής, αλλά η μεταβλητή δεν είναι πλέον ενεργή.
1234567891011 | Sub TestAutomation ()Dim strFile As StringDim wb Ως βιβλίο εργασίας'ανοίξτε το αρχείο και ορίστε μεταβλητή βιβλίου εργασίαςstrFile = Application.GetOpenFilenameΟρισμός wb = Workbooks.Open (strFile)«Κλείστε το βιβλίο εργασίαςwb. ΚλείσιμοΠροσπαθήστε να ενεργοποιήσετε το βιβλίο εργασίαςwb. ΕνεργοποιήστεΤέλος υπο |
Όταν εκτελέσουμε τον παραπάνω κώδικα, θα λάβουμε ένα σφάλμα αυτοματισμού. Αυτό οφείλεται στο γεγονός ότι έχουμε ανοίξει ένα βιβλίο εργασίας και έχουμε εκχωρήσει μια μεταβλητή σε αυτό το βιβλίο εργασίας. Έχουμε κλείσει το βιβλίο εργασίας αλλά στην επόμενη γραμμή κώδικα προσπαθούμε να ενεργοποιήσουμε το κλειστό βιβλίο εργασίας. Αυτό θα προκαλέσει το σφάλμα καθώς η μεταβλητή δεν είναι πλέον ενεργή.
Αν θέλουμε να ενεργοποιήσουμε ένα βιβλίο εργασίας, πρέπει πρώτα να έχουμε ανοιχτό το βιβλίο εργασίας!
Υπερφόρτωση μνήμης
Αυτό το σφάλμα μπορεί επίσης να συμβεί μερικές φορές εάν έχετε έναν βρόχο και ξεχάσετε να καθαρίσετε ένα αντικείμενο κατά τη διάρκεια του βρόχου. Ωστόσο, μπορεί να συμβεί μόνο μερικές φορές, και όχι άλλες- που είναι ένας από τους λόγους για τους οποίους αυτό το σφάλμα μπορεί να είναι τόσο ενοχλητικό.
Πάρτε για παράδειγμα αυτόν τον κωδικό παρακάτω:
1234567891011121314151617 | Υπο InsertPicture ()Dim i As IntegerDim shp Ως αντικείμενοΓια i = 1 έως 100Με φύλλα εργασίας ("Φύλλο1")'ορίστε τη μεταβλητή αντικειμένουΟρίστε shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, "A"). Κορυφή, Πλάτος: = 264, ightψος: = 124)Τέλος μεΜε shp.Object.PictureSizeMode = 3"φορτώστε την εικόνα.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Τέλος μεΕπόμενο iΤέλος υπο |
Η μεταβλητή δηλώνεται ως Αντικείμενο και στη συνέχεια το ΣΕΙΡΑ η λέξη -κλειδί χρησιμοποιείται για να εκχωρήσει μια εικόνα στο αντικείμενο. Το αντικείμενο συμπληρώνεται στη συνέχεια με μια εικόνα και εισάγεται στο φύλλο του Excel με κάποια μορφοποίηση να λαμβάνει χώρα ταυτόχρονα. Στη συνέχεια, προσθέτουμε έναν βρόχο στον κώδικα για να εισάγουμε 100 εικόνες στο φύλλο Excel. Περιστασιακά αυτό προκαλεί σφάλμα αυτοματισμού, αλλά μερικές φορές δεν συμβαίνει - απογοητευτικό, σωστά;
Η λύση σε αυτό το πρόβλημα είναι να καθαρίσετε τη μεταβλητή αντικειμένου εντός του βρόχου, ορίζοντας το αντικείμενο σε ΤΙΠΟΤΑ - αυτό θα απελευθερώσει τη μνήμη και θα αποτρέψει το σφάλμα.
12345678910111213141516171819 | Υπο InsertPicture ()Dim i As IntegerDim shp Ως αντικείμενοΓια i = 1 έως 100Με φύλλα εργασίας ("Φύλλο1")'ορίστε τη μεταβλητή αντικειμένουΟρίστε shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, "A"). Κορυφή, Πλάτος: = 264, ightψος: = 124)Τέλος μεΜε shp.Object.PictureSizeMode = 3"φορτώστε την εικόνα.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Τέλος με«εκκαθάριση της μεταβλητής αντικειμένουΣετ shp = ΤίποταΕπόμενο iΤέλος υπο |
Σφάλματα DLL και ενημέρωση των Windows
Μερικές φορές εμφανίζεται το σφάλμα και δεν υπάρχει τίποτα που μπορεί να γίνει με τον κώδικα VBA. Επανεγγραφή των DLL που χρησιμοποιούνται, διασφαλίζοντας ότι τα Windows μας είναι ενημερωμένα και ως έσχατη λύση, εκτελώντας έναν έλεγχο μητρώου ως μερικές φορές τα μόνα πράγματα που μπορεί να λειτουργήσουν για να διαγράψετε αυτό το σφάλμα.
Ένας καλός τρόπος για να αποφύγετε αυτό το σφάλμα είναι να βεβαιωθείτε ότι υπάρχουν παγίδες σφάλματος χρησιμοποιώντας το On Error Μετάβαση στο ή On Error Συνέχιση επόμενου ρουτίνες.