Τρόπος εντοπισμού σφαλμάτων μιας μακροεντολής Excel VBA που δεν λειτουργεί. Υπάρχουν εκπληκτικά εργαλεία στο Excel VBA που σας επιτρέπουν να βλέπετε την τρέχουσα τιμή που είναι αποθηκευμένη σε μεταβλητές καθώς περνάτε τον κώδικα μία γραμμή κάθε φορά. Εάν έχετε μια μακροεντολή που δεν λειτουργεί,
Δες το βίντεο
- Έχετε μια μακροεντολή Excel VBA που δεν λειτουργεί
- Το VBA διαθέτει εκπληκτικά εργαλεία εντοπισμού σφαλμάτων
- Αντί να εκτελέσετε τον κωδικό σας, μπορείτε να ακολουθήσετε τον κωδικό χρησιμοποιώντας το F8
- Η γραμμή με κίτρινο χρώμα είναι η γραμμή που πρόκειται να εκτελεστεί
- Τοποθετήστε τον δείκτη του ποντικιού πάνω από οποιαδήποτε μεταβλητή για να δείτε την τιμή αυτής της μεταβλητής.
- Εναλλαγή εμπρός και πίσω στο Excel για να δείτε τι συμβαίνει
Μεταγραφή βίντεο
Μάθετε το Excel από το Podcast, επεισόδιο 2096: Αποσφαλμάτωση του VBA Macro
Γεια σας, καλώς ήλθατε πίσω στο netcast, είμαι ο Bill Jelen. Η σημερινή ερώτηση: Κάποιος είχε κάποιο κωδικό που δημοσίευσα σε ένα παλιό βίντεο του YouTube και δημοσίευσε ένα σχόλιο λέγοντας, "Αχ, αυτό δεν λειτουργεί. Δεν αποθηκεύει το διπλό τιμολόγιο, αλλά δεν προκαλεί σφάλμα. " Δεν ξέρω τι συμβαίνει με τον κωδικό. Εντάξει λοιπόν, ξέρετε, κοίτα, υπάρχουν υπέροχα εργαλεία που είναι διαθέσιμα όταν δεν λειτουργεί η μακροεντολή VBA. Έχουμε λοιπόν ένα κουμπί εδώ που υποτίθεται ότι τρέχει κάποιο κωδικό. Πρόκειται να εκχωρήσω τη μακροεντολή, ονομάζεται SaveInvoice. Θα κάνω κλικ στην Επεξεργασία και θα τελειώσουμε στη VBA. Και κανονικά όταν πατάμε αυτό το κουμπί απλώς πρόκειται να τρέξει αυτόν τον κωδικό. Μπαμ! Όπως όλα συνέβησαν πολύ γρήγορα, αλλά δεν μπορείτε να δείτε τι συμβαίνει.
Έτσι, κάτω από τα εργαλεία εντοπισμού σφαλμάτων, ένα από τα αγαπημένα μου πράγματα εδώ είναι το Debug Step Into, το οποίο θα δείτε το πλήκτρο συντόμευσης είναι το F8, και αυτό μας επιτρέπει να εκτελούμε τον κώδικα μία γραμμή κάθε φορά. Πιέσαμε λοιπόν το F8 εκεί και αυτό είναι - η κίτρινη γραμμή είναι η γραμμή που πρόκειται να εκτελέσει. Έτσι, αν πατήσω το F8, ξεπερνά αυτές τις δύο δηλώσεις και τώρα πρόκειται να κάνουμε ένα ActiveSheet.Copy Αυτό που είναι πραγματικά όμορφο εδώ είναι, ξέρετε, ειδικά αν έχετε μια μεγάλη οθόνη ότι το παράθυρο Podcast είναι πολύ μικρό, αλλά αυτό που μπορείτε να κάνετε είναι να μπορείτε να παρακολουθείτε τη λειτουργία Macro. Λοιπόν τώρα πρόκειται να κάνουμε το ActiveSheet.Copy. Αυτήν τη στιγμή βρίσκομαι σε ένα βιβλίο εργασίας που ονομάζεται Podcast 2096. Εδώ είναι ένα φύλλο εργασίας που ονομάζεται Τιμολόγιο και όταν πατάω το F8, θα δείτε ότι τώρα βρίσκομαι σε ένα ολοκαίνουργιο βιβλίο εργασίας που ονομάζεται Book2 και έχουμε το τιμολόγιο, εντάξει.
Και τώρα πρόκειται να αναθέσουμε αυτό το μεγάλο, μεγάλο πράγμα στο New FN. Πατήστε F8. Εντάξει τώρα, δεν έμοιαζε με τίποτα εδώ γιατί τίποτα δεν έγινε εδώ Αλλά εδώ είναι το όμορφο πράγμα, τώρα έχω αντιστοιχίσει κάτι σε αυτήν τη μεταβλητή που ονομάζεται New FN και αν πάρω το ποντίκι μου και αιωρηθώ πάνω από το New FN, θα εμφανιστεί μια μικρή συμβουλή εργαλείου που μου δείχνει τι αποθηκεύεται στο New FN. Έτσι αποθηκεύει το όνομα αρχείου, υπάρχει ο φάκελος στον οποίο θα πάει. Ονομάζεται Invoice1234 επειδή πήρε την τιμή από το F4 και στη συνέχεια πρόσθεσε το PDF.
Εντάξει τώρα, ένα από τα πιο απογοητευτικά πράγματα για το Excel είναι ότι εάν η μνήμη σας αρχίσει να μειώνεται, αυτή η συμβουλή εργαλείου δεν θέλει να εμφανιστεί. Θα αιωρηθείτε εκεί και δεν θα συμβεί τίποτα. Μερικές φορές πρέπει να κάνετε κλικ για να το κάνετε εδώ και μερικές φορές απλά δεν θα εμφανιστεί καθόλου. Όταν δεν θα εμφανιστεί καθόλου, αυτό που μπορούμε να κάνουμε είναι να κάνουμε Ctrl + G. Το Ctrl + G είναι το άμεσο παράθυρο και μετά θα το χρησιμοποιήσουμε; που είναι η συντόμευση για το Debug.Print, NewFN. Με άλλα λόγια, πείτε μου τι υπάρχει στο Νέο FN και θα σας δείξει τι υπάρχει στο Νέο FN εκεί.
Εντάξει λοιπόν τώρα, πρόκειται να εκτελέσουμε αυτήν τη γραμμή κώδικα που θα δημιουργήσει ένα PDF. Εντάξει, οπότε θα πατήσω το F8. Εντάξει, και σε αυτό το σημείο θα πρέπει να έχουμε ένα νέο PDF εκεί έξω με το 1234 και αν πάω να κοιτάξω στο φάκελο, σίγουρα δημιουργήθηκε αρκετό Inv1234 στις 11 Μαΐου στις 6:25 π.μ. Φοβερό, σωστά;
Εντάξει, τώρα φτάνουμε στο σημείο που αντιμετωπίζουμε το πρόβλημα. Εντάξει, έτσι πατάμε το F8 εδώ και εμφανίζεται ως διπλότυπο αντίγραφο. Εντάξει, αυτό λειτούργησε. Και μετά το F8, και μπορούμε να δούμε τι υπάρχει στο Νέο FN. Εντάξει, έτσι έχει το DupInv1234.pdf και μπορείτε ακόμη και να επιστρέψετε εδώ και απλώς κάντε κλικ μετά το Print NewFN και στη συνέχεια θα δείτε ότι έχουμε αλλάξει το όνομα του αρχείου, εντάξει. Έτσι, όλα είναι ωραία. Και μετά πατάμε το F8 για να τρέξει Δημιουργία του PDF. Φοβερός! Όλα φαίνονται υπέροχα, έτσι;
Επιστρέψτε λοιπόν στα αρχεία μας Podcast. Εντάξει, αλλά αντί να έχω κάτι που ονομάζεται DupInv1234, απλά δεν ξέρω πώς κάτι που ονομάζεται Book2. Εντάξει, μόλις δημιουργήθηκε πριν από ένα λεπτό. Αυτό πρέπει να είναι αυτό, αλλά καλό! Φαίνεται να είναι λάθος όνομα. Εντάξει, οπότε επιστρέφουμε στο VBA και ξέρω ότι απλώς έδωσα τη σωστή τιμή στο New FN έτσι, εντάξει. Και ας δούμε τι το σώζουμε ως. Το αποθηκεύουμε ως ένα νέοFN1 που είναι άδειο. και αφού είναι άδειο σημαίνει ότι παίρνει το όνομα του αρχείου που σε αυτήν την περίπτωση είναι το Book2 αφού έφτιαξα ένα αντίγραφο. Και το άλλαξα - Ω, κοίτα! Εδώ λοιπόν, έδωσα το όνομα στο NewFN και έπειτα έσωσα αυτό το NewFN1, και τώρα επειδή κάνω εντοπισμό σφαλμάτων και αιωρείται - το Hovering είναι το καλύτερο πράγμα ποτέ. Ελπίζω να μπορέσω να καταλάβω τι συμβαίνει.Γι 'αυτό επιστρέφω και αλλάζω το NewFN1. Τώρα, εδώ είναι το φοβερό πράγμα. Εντάξει, έτσι πέρασα ήδη αυτήν τη γραμμή σε Macro, αλλά μπορώ να το μεταφέρω πίσω και να πω, εντάξει, ας το τρέξουμε ξανά F8. Και τώρα ας δημιουργήσουμε το PDF. Εντάξει, και εκεί εμφανίζεται με το σωστό όνομα και όλα είναι ωραία.
Εντάξει, τώρα που ξέρω ότι τελείωσα, όλα είναι υπέροχα. Όλα θα λειτουργήσουν από εδώ. Απλώς κάντε κλικ στο Εκτέλεση και θα τρέξει στο τέλος του κώδικα. Εντάξει, μερικές φορές θα έχετε μια μεγάλη μακροεντολή με, ξέρετε, εκατοντάδες γραμμές κώδικα που λειτουργούν και στη συνέχεια ένα συγκεκριμένο μέρος που δεν λειτουργεί, εντάξει; Μερικά άλλα εργαλεία μόλις αναφέρθηκαν εδώ. Εάν πρέπει να μεταβείτε σε ένα σωρό κώδικα και να εκτελέσετε τα πάντα μέχρι αυτό το σημείο, λοιπόν, ένας τρόπος για να το κάνετε αυτό είναι να κάνετε κλικ εδώ και να δημιουργήσετε ένα Breakpoint. Εντάξει, οπότε τώρα όταν το τρέχω αυτό, θα τρέξει τα πάντα μέχρι εκείνο το σημείο. Μπορώ απλώς να κάνω κλικ στο τρέξιμο και θα σταματήσει, ή αν δεν θέλετε καν να ορίσετε ένα Breakpoint, θα κάνουμε κλικ ακριβώς εδώ και θα πούμε Debug, Run To Cursor. Εκτελέστε τον δρομέα.Τώρα ξέρω ότι αυτό θα προκαλέσει πρόβλημα εδώ, επειδή ο κωδικός για να αλλάξετε αυτόν τον αριθμό τιμολογίου, δεν έχω συνδέσει ακόμη. Θα βάλω λοιπόν έναν νέο αριθμό τιμολογίου και έτσι είμαι στη γραμμή αυτή τη στιγμή. Debug, Run To Cursor που είναι Ctrl + F8. Εντάξει, οπότε τώρα έτρεξε τα πάντα σε αυτό το σημείο και αυτό που πρέπει να έχουμε είναι να μπορούμε να δούμε ότι μόλις δημιούργησε το Inv1235, εντάξει. Και τώρα πρόκειται για αυτήν τη γραμμή κώδικα. Μπορώ απλώς να πατήσω το F8 για να τρέξω μία γραμμή ή απλά να τρέξω στον υπόλοιπο δρόμο. Και υπάρχει το DupInv1235 μας, εντάξει; Έτσι, τα Εργαλεία εντοπισμού σφαλμάτων εδώ στο VBA είναι καταπληκτικά. Ας εκτελέσουμε έναν κωδικό μία γραμμή τη φορά, να τακτοποιήσουμε την οθόνη σας, ώστε να μπορούμε να δούμε τόσο τον κώδικα που εκτελείται όσο και τα αποτελέσματα του κώδικα πάνω στα αριστερά. Και, ας ελπίσουμε, μπορείτε να καταλάβετε τι συμβαίνει με τον κώδικα.
Εντάξει, οπότε ανακεφαλαιώστε το επεισόδιο: Έχετε μια μακροεντολή Excel VBA που δεν λειτουργεί. Διαθέτει εκπληκτικά εργαλεία εντοπισμού σφαλμάτων. Αντί να εκτελείτε τον κωδικό σας, μπορείτε να ακολουθήσετε τον κωδικό χρησιμοποιώντας το F8. Η κίτρινη γραμμή είναι η γραμμή που πρόκειται να εκτελεστεί. Μπορείτε να τοποθετήσετε το δείκτη του ποντικιού πάνω από τη μεταβλητή για να δείτε την τιμή αυτής της μεταβλητής, εναλλαγή προς το Excel για να δείτε τι συμβαίνει.
Λοιπόν, θέλω να σας ευχαριστήσω που σταματήσατε. Θα σας δούμε την επόμενη φορά για ένα άλλο netcast από.
Λήψη αρχείου
Κατεβάστε το δείγμα αρχείου εδώ: Podcast2096.xlsm