Το Word από το Α ως το Ω

Διαχωρισμός των μακροεντολών

Είναι χρήσιμο να αποθηκεύετε τον κώδικα κάθε μακροεντολής σε ξεχωριστές λειτουργικές μονάδες (modules) για καλύτερη διαχείριση των μακροεντολών. Έτσι, θα μπορείτε π.χ. να μεταφέρετε μεταξύ υπολογιστών μόνο το module με τη μακροεντολή που θέλετε. Επειδή όμως το Word έχει την κακή συνήθεια να αποθηκεύει τον κώδικα όλων των μακροεντολών στο ίδιο module, θα δείτε εδώ τι πρέπει να προσέξετε αν θελήσετε να τακτοποιήσετε αυτή την κατάσταση, και πώς θα χρησιμοποιήσετε με απλά βήματα τον VB Editor γι' αυτή τη δουλειά.

Αν έχετε χρησιμοποιήσει στο παρελθόν τον VB Editor, πιθανόν να γνωρίζετε ορισμένα βασικά, τουλάχιστον για το περιβάλλον εργασίας ή ίσως και για τον τρόπο που λειτουργεί. Ακόμα όμως κι αν είναι η πρώτη φορά που ασχολείστε μαζί του, η επόμενη διαδικασία δεν χρειάζεται ιδιαίτερες γνώσεις προγραμματισμού. Σαν πρώτο στάδιο όμως, καλό είναι να ξεκινήσετε με τις μακροεντολές που έχουν δημιουργηθεί με το εργαλείο Καταγραφή μαρκοεντολής του Word. Αυτές οι μακροεντολές μετατρέπονται σε κώδικα από το Word με ξεκάθαρη δόμηση, όπου κάθε μακροεντολή αντιστοιχεί σε ένα ολοκληρωμένο μπλοκ κώδικα με αρχή και τέλος. Άλλες μακροεντολές, που έχετε από άλλες πηγές μπορεί να έχουν πιο σύνθετο κώδικα και θα ήταν προτιμότερο να ασχοληθείτε μαζί τους σε επόμενο στάδιο.

Για να ολοκληρώσω το θεωρητικό μέρος, αν είναι η πρώτη φορά που θα ασχοληθείτε με τον VB Editor, καλό είναι να αποκτήσετε μια σχετική οικειότητα με τα βασικά στοιχεία του περιβάλλοντος εργασίας και μερικές γενικές έννοιες, όπως τι είναι project, module, ρουτίνα κ.λπ. Δείτε το θέμα Γνωριμία με τον Visual Basic Editor.

Τα πρώτα βήματα

Επί της διαδικασίας τώρα, ανοίξτε το Word και εμφανίστε τον VB Editor με ένα από τα επόμενα:

Εκ προεπιλογής, όταν ανοίγετε τον VB Editor, εμφανίζονται τα πλαίσια Project Explorer και Properties, καθώς και το παράθυρο με τον κώδικα των μακροεντολών που καταχωρεί το Word στο module NewMacros. Αν κάποιο από αυτά δεν εμφανίζεται:


Εικ. 1: Κώδικας μακροεντολών

Η εικόνα δείχνει το παράθυρο με τον κώδικα των μακροεντολών allCaps και convertCase, που είναι καταχωρημένος στο module NewMacros. Οι μακροεντολές που έχουν δημιουργηθεί με το εργαλείο Καταγραφή μακροεντολής, καταχωρούνται αυτόματα από το Word σε αυτόνομα μπλοκ κώδικα, γνωστά ως ρουτίνες (routines). Η μακροεντολή αρχίζει με την έκφραση Sub και ολοκληρώνεται με την έκφραση End Sub. Οι γραμμές που αρχίζουν με απόστροφο είναι σχόλια και δεν λαμβάνονται υπ' όψιν κατά την εκτέλεση της μακροεντολής. Συνήθως αφορούν μια εξήγηση για τον τρόπο λειτουργίας του κώδικα που ακολουθεί.

Όπως φαίνεται στην εικόνα, μεταξύ των μακροεντολών ο VB Editor προσθέτει αυτόματα μια διαχωριστική γραμμή. Αυτό σας επιτρέπει με μια γρήγορη ματιά να δείτε πού τελειώνει η μια μακροεντολή και πού αρχίζει η επόμενη και θα σας διευκολύνει στη συνέχεια, για να χωρίσετε τον κώδικα κάθε μακροεντολής σε διαφορετικό module:

ΠΡΟΣΟΧΗ: Για άλλη μια φορά, η διαδικασία που περιγράφεται εδώ αφορά τις μακροεντολές που έχουν δημιουργηθεί με το εργαλείο Καταγραφή μακροεντολής και που το Word καταχωρεί αυτόματα στο module NewMacros. Δεν καλύπτονται άλλα modules ή άλλος κώδικας που τυχόν έχετε προσθέσει στο NewMacros "με το χέρι".

  1. Στον Project Explorer κάνετε δεξιό κλικ στο Normal και στο μενού συντομίας επιλέξτε Insert > Module.

    ΣΗΜΕΙΩΣΗ: Η πιο συνηθισμένη επιλογή είναι το Normal (το βασικό πρότυπο του Word), ώστε οι μακροεντολές να είναι διαθέσιμες σε όλα τα έγγραφα. Ανάλογα με τη χρήση και τη διαθεσιμότητα που θέλετε να έχουν, μπορείτε να τις αποθηκεύσετε σε άλλο πρότυπο ή σε έγγραφο. Για περισσότερες λεπτομέρειες δείτε την ενότητα Πού καταχωρούνται οι μακροεντολές στο θέμα Τι πρέπει να γνωρίζετε για τις μακροεντολές.

  2. Με αποκοπή και επικόλληση μεταφέρετε τον κώδικα της πρώτης μακροεντολής από το module NewMacros στο module που μόλις δημιουργήσατε Module1. (Σύμφωνα με την εικόνα 1 ο κώδικας της πρώτης μακροεντολής είναι από το Sub allCaps() έως το End Sub πάνω από τη διαχωριστική γραμμή).
  3. Μια καλή τακτική είναι να αντικαθιστάτε το όνομα Module1 που χρησιμοποιεί αυτόματα ο VB Editor με κάτι πιο περιγραφικό, συνήθως με το όνομα της μακροεντολής. Έτσι:
    1. Στον Project Explorer επιλέξτε το Module1.
    2. Στο πλαίσιο Properties, στο πεδίο (Name) διορθώστε το όνομα σε allCaps.

      ΣΗΜΕΙΩΣΗ: Για το όνομα επιτρέπονται μόνο γράμματα και αριθμοί. Όχι κενά διαστήματα, όχι ειδικοί χαρακτήρες (*, ", ? κ.λπ.).

  4. Επαναλάβετε τη διαδικασία και για τις υπόλοιπες μακροεντολές του module NewMacros.
  5. Αφού ολοκληρώσετε με την μεταφορά του κώδικα όλων των μακροεντολών μπορείτε να διαγράψετε το module NewMacros. Το Word θα δημιουργήσει καινούργιο, τη επόμενη φορά που θα κάνετε καταγραφή μιας νέας μακροεντολής:
    1. Στον Project Explorer κάνετε δεξιό κλικ στο module NewMacros και στη συνέχεια επιλέξτε Remove NewMacros.
    2. Στο προειδοποιητικό μήνυμα που εμφανίζεται κάνετε κλικ στο κουμπί No για να διαγράψετε το module άμεσα.
      Η δεύτερη επιλογή Yes σας επιτρέπει, πριν τη διαγραφή, να δημιουργήσετε ένα αντίγραφο ασφαλείας. Στη συγκεκριμένη περίπτωση δεν έχει νόημα, εφόσον το module είναι κενό.

Σε επόμενο στάδιο

Όπως ανέφερα ήδη από την αρχή, η διαδικασία τακτοποίησης που περιγράφεται εδώ αφορά τις μακροεντολές που έχουν δημιουργηθεί με το εργαλείο Καταγραφή μακροεντολής, που καταχωρούνται αυτόματα από το Word στο module NewMacros. Θεώρησα όμως χρήσιμο να αναφέρω δυο τρία σημεία που πρέπει να προσέξετε, αν θέλετε να ασχοληθείτε λίγο περισσότερο με τον κώδικα των μακροεντολών.

Έχετε υπ' όψη σας ότι, ο VB Editor αναγνωρίζει ως τέλος μιας μακροεντολής τη δήλωση τέλους End Sub, ώστε να προσθέσει μια εικονική διαχωριστική γραμμή για να διακρίνετε πιο εύκολα που τελειώνει η μία μακροεντολή και πού αρχίζει η επόμενη. Αυτό όμως ισχύει απόλυτα, μόνο όταν οι μακροεντολές έχουν δημιουργηθεί με το εργαλείο Καταγραφή μακροεντολής. Αν έχετε τον κώδικα μακροεντολής από κάποια άλλη πηγή (κάποιον που γνωρίζει VBA, από ένα email, από ένα site κ.λπ.) το End Sub μπορεί να μη δηλώνει το τέλος της μακροεντολής αλλά το τέλος μιας "ενδιάμεσης" διαδικασίας. Στο επόμενο παράδειγμα, η ρουτίνα AutoExec "καλεί" μια άλλη ρουτίνα (AddPasteSpecial) και επομένως οι δυο ρουτίνες αποτελούν ένα αναπόσπαστο σύνολο, ενώ ο VB Editor θα τις χωρίσει με την διαχωριστική γραμμή:

Sub AutoExec()
    Call AddPasteSpecial
End Sub
- - - - - - - - - - - - - - - - - - -
Sub AddPasteSpecial()
    Dim cb As CommandBar
    Dim c As CommandBarButton
    ...
End Sub

Στο ανωτέρω παράδειγμα επισημάνθηκε με κόκκινο η "επικοινωνία" ανάμεσα στις δύο ρουτίνες. Ωστόσο και ο VB Editor χρησιμοποιεί κόκκινη επισήμανση για να δηλώσει ένα σφάλμα του κώδικα. Αν πρόκειται για σφάλμα σύνταξης, λίγες πιθανότητες έχετε να το διορθώσετε χωρίς βοήθεια αν δεν γνωρίζετε VBA. Ορισμένες φορές όμως το σφάλμα οφείλεται στο μέσο μεταφοράς της μακροεντολής και όχι στον συντάκτη. Π.χ. η αποστολή μιας μακροεντολής με email μπορεί να δημιουργήσει ανεπιθύμητες αναδιπλώσεις στις γραμμές του κώδικα, τις οποίες δεν αποδέχεται η VBA και επισημαίνει ως σφάλμα ο VB Editor, όπως στο παράδειγμα:

Do While myRange.Find.Execute
    FieldText = (myRange.Text)
    ActiveDocument.Fields.Add Range:=myRange,
    Type:=wdFieldIncludeText, Text:=FieldText
    myRange.MoveEndUntil cset:=""""""
    myRange.Collapse wdCollapseEnd
    myRange.Select
Loop
...

Έχετε δύο τρόπους για να διορθώσετε το σφάλμα της αναδίπλωσης:

Τέλος να υπενθυμίσω ότι, αφού ολοκληρώσετε τις εργασίες σας με τον VB Editor μπορείτε να τον κλείσετε. Οι αλλαγές που κάνατε έχουν μεταφερθεί αυτόματα στο αντίστοιχο πρότυπο ή έγγραφο που επηρεάστηκε και θα αποθηκευτούν μαζί με αυτό, ή θα σας ζητηθεί η αποθήκευσή τους όταν κλείσετε το Word.

Δείτε επίσης

Τι πρέπει να γνωρίζετε για τις μακροεντολές

Πώς θα χρησιμοποιήσω τον κώδικα μιας μακροεντολής;

Θέμα
Διαχωρισμός των μακροεντολών
Κείμενο
Γιώργος ο Αδαής
Ταυτότητα
30100.005/0033
Έκδοση
11/4/20
Σήμανση
λειτουργική μονάδα, module, VB Editor, καταγραφή μακροεντολής, project, ρουτίνα, προγραμματιστής, Visual Basic, σφάλμα κώδικα, πρότυπο

Λεξικό ορολογίας

Όροι χρήσης | πολιτική cookies

© 2010 - 2021, Γιώργος ο Αδαής