Περιορίζοντας τι προκάλεσε σφάλμα - Συμβουλές για το Excel

Μερικές φορές το Excel απλώς δίνει ένα μήνυμα σύμφωνα με το «Το Excel έχει σταματήσει να λειτουργεί. Λυπούμαστε για την αναστάτωση. "

Όταν λάβετε ένα τέτοιο μήνυμα, μπορείτε να πατήσετε Ctrl + alt = "" + Διαγραφή και να ανοίξετε ξανά το βιβλίο εργασίας (ελπίζω να έχετε αποθηκεύσει οποιαδήποτε εργασία έχετε κάνει!), Θέλοντας να περάσετε τον κώδικα για να βρείτε την προσβλητική δήλωση. Όταν περνάτε ένα βήμα στον κώδικα, όλα μπορεί να λειτουργούν καλά, αλλά όταν το εκτελείτε με πλήρη ταχύτητα, για άλλη μια φορά μπορεί να καταρρεύσει. Πώς μπορείτε να βρείτε την προσβλητική δήλωση;

Μπορείτε να γράψετε μια απλή γραμμή κώδικα μεταξύ κάθε γραμμής κώδικα που θα μπορούσε να είναι ο ένοχος. Έτσι ο κώδικας VBA μπορεί αρχικά να μοιάζει με αυτό:

Sub UICreation() Dim x As String On Error Resume Next x = Sheets("Scenario").Name If Err.Number 0 Then MsgBox "Current workbook needs to have a Scenario sheet!", vbCritical Exit Sub End If ActiveWorkbook.Unprotect WorkbookPassword Err.Clear ActiveWorkbook.Unprotect SheetPassword If Err.Number 0 Then MsgBox "Workbook cannot be unprotected by the macro.", vbCritical Exit Sub End If Application.OnTime Now, "More" ThisWorkbook.Sheets("FastPricer").Copy Before:=ActiveWorkbook.Sheets(1) End Sub

Αυτή η διαδικασία, στην πραγματικότητα, δεν συντρίβεται, αλλά δείχνει τι μπορείτε να κάνετε αν διαπιστώσετε ότι ο κώδικας διακόπτεται όταν εκτελείται με πλήρη ταχύτητα, αλλά όχι όταν το περπατάτε.

Αλλάζετε τον παραπάνω κώδικα σε αυτό, με παρεμβαλλόμενες δηλώσεις Bug 1, Bug 2, κ.λπ .:

Sub UICreation() Dim x As String On Error Resume Next Bug 1 x = Sheets("Scenario").Name Bug 2 If Err.Number 0 Then MsgBox "Current workbook needs to have a Scenario sheet!", vbCritical Exit Sub End If Bug 3 ActiveWorkbook.Unprotect WorkbookPassword Err.Clear Bug 4 ActiveWorkbook.Unprotect SheetPassword If Err.Number 0 Then MsgBox "Workbook cannot be unprotected by the macro.", vbCritical Exit Sub End If Bug 5 Application.OnTime Now, "More" Bug 6 ThisWorkbook.Sheets("FastPricer").Copy Before:=ActiveWorkbook.Sheets(1) End Sub

Εδώ είναι η διαδικασία σφάλματος:

Sub Bug(num As Integer) SaveSetting "EOTB2", "EOTB2", "EOTB2", num End Sub

Αυτή η διαδικασία αποθηκεύει μια τιμή στο μητρώο. Η σύνταξη για το SaveSetting είναι:

Σύνταξη SaveSetting

Για τις τρεις πρώτες παραμέτρους, ας πούμε ότι χρησιμοποιείτε το EOTB2 (για το Excel Outside the Box 2) - μια τυχαία επιλογή. Θα μπορούσατε να χρησιμοποιήσετε το SaveSetting "X", "X", "X", num. Εάν το χρησιμοποιείτε πολύ, μπορείτε να επωφεληθείτε από τα τρία επίπεδα AppName, Section και Key. Με αυτόν τον τρόπο, εάν έχετε πολλές ενότητες στο AppName, μπορείτε να κάνετε εκκαθάριση του μητρώου για όλες τις ρυθμίσεις σας χρησιμοποιώντας το απλό DeleteSetting "EOTB2" (ή ό, τι έχετε ορίσει για το AppName) και όλες οι ενότητες και τα κλειδιά θα διαγραφούν επίσης.

Τώρα εκτελείτε τη διαδικασία με πλήρη ταχύτητα και διακόπτεται. Έτσι, επανεκκινήστε το Excel, μεταβείτε στο VBE, ανοίξτε το παράθυρο Άμεση (πατώντας Ctrl + G) και πληκτρολογήστε αυτό:

? GetSetting(“EOTB2”,”EOTB2”,”EOTB2”)

Εάν αυτή η διαδικασία επιστρέψει 4, για παράδειγμα, τότε έπεσε κάποια στιγμή μετά το σφάλμα 4. Είναι απίθανο η ενότητα If / End If να ήταν ο ένοχος. πιο πιθανό ήταν το ActiveWorkbook.Unprotect SheetPassword. (Θυμηθείτε ότι αυτό είναι απλώς ένα παράδειγμα, όχι αυτό που συνέβη στην πραγματικότητα.)

Εάν η αρχική σας εκτέλεση των Bug 1, Bug 2 κ.λπ. δείχνει ότι η διαδικασία έπεσε σε μεγάλο τμήμα του κώδικα μετά το Bug x, μπορείτε να εισαγάγετε περισσότερες κλήσεις σφαλμάτων για να το περιορίσετε περαιτέρω. Μπορείτε να κάνετε μια δυαδική αναζήτηση σε μια μακρά διαδικασία για να βρείτε τον ένοχο.

Αυτό το άρθρο επισκεπτών προέρχεται από το Excel MVP Bob Umlas. Είναι από το βιβλίο, Περισσότερα Excel εκτός κουτιού. Για να δείτε τα άλλα θέματα στο βιβλίο, κάντε κλικ εδώ.

ενδιαφέροντα άρθρα...