Μακροεντολή συμβάντος για να αλλάξετε την κεφαλίδα του Excel - Συμβουλές για το Excel

Πίνακας περιεχομένων

Η Ντόνα από το Μισούρι ρώτησε:

Έχετε ιδέα πώς μπορώ να βρω τη διαδρομή όπου το έγγραφο αρχειοθετείται αναγράφεται στην κεφαλίδα ή στο υποσέλιδο - ή οπουδήποτε στο έγγραφο. Μπορώ να λάβω το όνομα του αρχείου με το & f αλλά δεν μπορώ να καταλάβω πώς να κάνω τη διαδρομή.

Καταρχάς, καταλαβαίνω ότι η Microsoft έχει προσθέσει αυτήν τη λειτουργικότητα στο Excel XP και τους προσφέρω kudos καθώς είναι ένα συχνό πρόβλημα. Όσοι αναγνώστες έχουν ήδη αναβαθμίσει στο Office XP δεν θα χρειαστούν τις τεχνικές στην άκρη αυτής της εβδομάδας για να λύσουν αυτό το πρόβλημα, αλλά θα εξακολουθήσουν να είναι χρήσιμοι για την επίλυση άλλων προβλημάτων.

Η λύση σε αυτήν την συμβουλή είναι ένας ειδικός τύπος μακροεντολής που ονομάζεται μακροεντολή χειριστή συμβάντων. Θα ελέγξουμε εν συντομία το Excel κάθε φορά που πρόκειται να εκτυπώσει το βιβλίο εργασίας μας και να προσθέσουμε την τρέχουσα διαδρομή στην κεφαλίδα.

Πολλοί χρήστες του Excel προσπάθησαν να καταγράψουν απλές μακροεντολές. Οι μακροεντολές αποθηκεύονται σε μια ενότητα που ονομάζεται Module1 ή Module2 και γίνονται μέρος του έργου σας. Σήμερα, πρόκειται να συζητήσω μακροεντολές χειριστή συμβάντων. Αυτές οι μακροεντολές βρίσκονται σε μια ειδική ενότητα κώδικα που σχετίζεται με κάθε φύλλο εργασίας ή βιβλίο εργασίας.

Οι προηγούμενες συμβουλές, όπως το Enter Excel Time Without the Colon, άγγιξαν το Worksheet_Change event. Η σημερινή συμβουλή απαιτεί να προσθέσουμε κάποιο κώδικα στο συμβάν BeforePrint του Workbook.

Ο κώδικας που προστίθεται σε ένα συμβάν θα εκτελείται όποτε το συμβάν "ενεργοποιείται". Σε αυτήν την περίπτωση, οποτεδήποτε εκτυπώνεται το βιβλίο εργασίας του Excel, πριν από την εκτύπωση, το Excel μετατρέπει τον έλεγχο στον κώδικα VBA και επιτρέπει οτιδήποτε μπορείτε να καθορίσετε στον κώδικα VBA να συμβεί αυτόματα πριν από την εκτύπωση.

Θα υποθέσω ότι είστε νέοι στις μακροεντολές χειριστή συμβάντων. Θα ακολουθήσω ακριβώς πώς να φτάσω στο σωστό μέρος για να εισαγάγω αυτήν τη μακροεντολή.

Έχω ένα βιβλίο εργασίας που ονομάζεται «Tip055 Sample.xls». Με το βιβλίο εργασίας που φορτώνεται στο Excel, θα πατήσω το alt = "" + F11 για να ξεκινήσω τον οπτικό βασικό επεξεργαστή. Η προεπιλεγμένη εμφάνιση του προγράμματος επεξεργασίας είναι όπως φαίνεται στα δεξιά. Στα αριστερά, συνήθως βλέπετε ένα παράθυρο έργου στοιβασμένο πάνω από ένα παράθυρο ιδιοτήτων. Το μεγαλύτερο μέρος της δεξιά πλευράς της οθόνης περιλαμβάνει ένα πλαίσιο κώδικα. Εάν δεν έχετε μακροεντολές στο βιβλίο εργασίας σας, το παράθυρο κώδικα θα είναι γκρι όπως φαίνεται στα δεξιά.

Έχω προσθέσει λέξεις με μπλε πλάγια γραφή στην εικόνα για να προσδιορίσω τα τρία παράθυρα - δεν θα τα δείτε στο παράδειγμά σας.

Είναι σημαντικό να μπορείτε να δείτε το Project Pane στον επεξεργαστή VB. Εάν η προβολή του προγράμματος επεξεργασίας VB δεν περιλαμβάνει το παράθυρο έργου, πατήστε Ctrl + R για προβολή του έργου. Εναλλακτικά, κάντε κλικ στο εικονίδιο της γραμμής εργαλείων που φαίνεται παρακάτω:

Στο παράθυρο έργου θα εμφανίζεται ένα έργο για κάθε ανοιχτό βιβλίο εργασίας του Excel και για κάθε εγκατεστημένο πρόσθετο. Κάντε κλικ στο γκρι συν δίπλα στο όνομα του βιβλίου εργασίας σας για να αναπτύξετε το έργο για το βιβλίο εργασίας σας. Στη συνέχεια, κάντε κλικ στο γκρι συν δίπλα στο φάκελο Microsoft Excel Objects για να αναπτύξετε το φάκελο αντικειμένων. Τώρα θα πρέπει να βλέπετε μία καταχώριση για κάθε φύλλο εργασίας και μία καταχώρηση που ονομάζεται ThisWorkbook.

Κάντε δεξί κλικ στην καταχώριση για το ThisWorkbook και επιλέξτε Προβολή κώδικα από το αναδυόμενο μενού.

Πιθανότατα τώρα θα έχετε ένα μεγάλο κενό πλαίσιο λευκού κώδικα που καταλαμβάνει τη δεξιά πλευρά της οθόνης. Υπάρχουν δύο αναπτυσσόμενα μενού στο επάνω μέρος του παραθύρου κώδικα που θα αναφέρουν (Γενικά) και (Δηλώσεις).

  • Από το αριστερό αναπτυσσόμενο μενού, επιλέξτε Βιβλίο εργασίας.
  • Το σωστό αναπτυσσόμενο μενού συμπληρώνεται τώρα με όλα τα προγραμματιζόμενα συμβάντα που σχετίζονται με το βιβλίο εργασίας. Υπάρχουν συμβάντα εδώ που θα εκτελούν κώδικα κάθε φορά που το βιβλίο εργασίας ανοίγει, ενεργοποιείται, απενεργοποιείται, κ.λπ.

Σημειώστε ότι κάθε φορά που επιλέγετε κάτι από το σωστό αναπτυσσόμενο μενού, ο επεξεργαστής VBA γράφει την αρχή και το τέλος της γραμμής κώδικα στη μονάδα κώδικα για εσάς. Την πρώτη φορά που αλλάζετε το αριστερό αναπτυσσόμενο μενού σε Βιβλίο εργασίας, πιθανότατα λάβατε την αρχή μιας υπορουτίνας Workbook_Open από προεπιλογή. Εάν δεν πρόκειται να γράψετε μια διαδικασία Workbook_Open, θα πρέπει να εξετάσετε το ενδεχόμενο να διαγράψετε αυτήν την κενή διαδικασία.

Τώρα, για να γράψετε τον κώδικα VBA. Υπάρχουν μερικές χρήσιμες μεταβλητές που μπορείτε να χρησιμοποιήσετε.

  • Το ActiveWorkbook.Path θα επιστρέψει τη διαδρομή του βιβλίου εργασίας. Μπορεί να μοιάζει με "C: My Documents MrExcel".
  • Το ActiveWorkbook.FullName θα επιστρέψει τη διαδρομή και το όνομα αρχείου του βιβλίου εργασίας. Μπορεί να μοιάζει με "C: My Documents MrExcel Tip055 Sample.xls".

Μπορείτε να αντιστοιχίσετε αυτήν τη μεταβλητή σε μία από τις ακόλουθες 6 θέσεις:

Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.LeftFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightFooter = ActiveWorkbook.FullName

Ακολουθούν τρεις πιθανές μακροεντολές δείγματος.

Αυτή η μακροεντολή θα προσθέσει τη διαδρομή και το όνομα αρχείου ως το δεξί υποσέλιδο του ενεργού φύλλου εργασίας:

Private Sub Workbook_BeforePrint(Cancel As Boolean) ActiveSheet.PageSetup.RightFooter = ActiveWorkbook.FullName End Sub

Σε αυτήν τη μακροεντολή θα προστεθεί η διαδρομή ως αριστερή κεφαλίδα του Φύλλου1 και ως κεντρικό υποσέλιδο του Φύλλου2:

Private Sub Workbook_BeforePrint(Cancel As Boolean) Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.Path Worksheets("Sheet2").PageSetup.CenterFooter = ActiveWorkbook.Path End Sub

Εάν έχετε την τάση να χρησιμοποιείτε την επιλογή "Ολόκληρο το βιβλίο εργασίας" κατά την εκτύπωση, αυτή η έκδοση θα προσθέσει το πλήρες όνομα ως το κεντρικό υποσέλιδο σε όλα τα φύλλα:

Private Sub Workbook_BeforePrint(Cancel As Boolean) For Each Sh In ActiveWorkbook.Worksheets Sh.PageSetup.CenterFooter = ActiveWorkbook.FullName Next Sh End Sub

Ακολουθήστε ένα από αυτά τα παραδείγματα ή δημιουργήστε ένα δικό σας. Όταν τελειώσετε, κλείστε τον επεξεργαστή VBA με το αρχείο> Κλείσιμο και επιστροφή στο Microsoft Excel.

Κάθε φορά που εκτυπώνετε ένα φύλλο εργασίας, ο κώδικας θα εκτελείται και θα εισάγει την τρέχουσα διαδρομή στην κατάλληλη κεφαλίδα ή υποσέλιδο που υποδείξατε στον κώδικα VBA.

Μερικές σημειώσεις και προειδοποιήσεις:

  • Οι χρήστες του Novice Excel θα έχουν λίγη ιδέα ότι αυτός ο κωδικός βρίσκεται στο βιβλίο εργασίας. Όταν ανοίγουν το βιβλίο εργασίας, ενδέχεται να λάβουν την προειδοποίηση ασφαλείας ότι το αρχείο περιέχει μακροεντολές, αλλά δεν θα υπάρχει προειδοποίηση όταν ο κώδικας VBA χτυπά ό, τι είχε ως το υποσέλιδο και τοποθετεί το όνομα διαδρομής εκεί. Αυτό μπορεί να οδηγήσει σε καούρα. Φανταστείτε 5 χρόνια από τώρα κάποιος χρησιμοποιεί το βιβλίο εργασίας σας και ο νέος διαχειριστής θέλει το όνομα αρχείου να μετακινηθεί από το κεντρικό υποσέλιδο στο δεξί υποσέλιδο. Αυτό το άτομο μπορεί να ξέρει να αλλάζει χειροκίνητα τις ρυθμίσεις στο Αρχείο> PageSetup, αλλά αν δεν γνωρίζει ότι ο κώδικας υπάρχει, θα τους οδηγήσει να μπάτσο καθώς ο κώδικας αλλάζει συνεχώς τα υποσέλιδά του.

    It is really unlikely that they will be able to find your code module, but just in case they do, you might want to leave a comment in the code module that directs them back to this website for an explanation.

    You also might want to add a comment to cell A1 reminding yourself that there is an event handler set up to change the print headers.

  • There is a setting within VBA which prevents events from running. If your macro suddenly stops working, t is common to find that something within VBA has turned this setting to prevent the events from running. The common scenario is that a programmer starts a macro with:

    Application.EnableEvents = False '… macro here… Application.EnableEvents = True

    Όταν παρουσιαστεί σφάλμα στη μακροεντολή, τα συμβάντα δεν ενεργοποιούνται ξανά. Όταν συμβεί αυτό, υπάρχει μικρή προειδοποίηση. Εάν υποψιάζεστε ότι οι διαχειριστές συμβάντων δεν εκτελούνται, μεταβείτε στον οπτικό βασικό επεξεργαστή. Πατήστε Ctrl + g για να εμφανιστεί ένα άμεσο παράθυρο. Στο άμεσο παράθυρο, πληκτρολογήστε:

    Print Application.EnableEvents

    και πατήστε enter. Εάν διαπιστώσετε ότι έχει οριστεί σε False, πληκτρολογήστε την ακόλουθη γραμμή στο άμεσο παράθυρο:

    Application.EnableEvents = True

    και πατήστε enter.

Ευχαριστώ την Donna για μια υπέροχη ερώτηση. Κατά τη διαδικασία εξήγησης της απάντησης, ήταν μια μεγάλη ευκαιρία να επεκταθεί η ιδέα του Event Handlers στο VBA.

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