Υπορουτίνα Excel VBA: Πώς να καλέσετε το Sub σε VBA με Παράδειγμα

⚡ Έξυπνη Σύνοψη

Η υπορουτίνα VBA του Excel ομαδοποιεί ένα μπλοκ κώδικα που εκτελεί μια εργασία χωρίς να επιστρέφει τιμή. Αυτή η σελίδα καλύπτει τους κανόνες ονομασίας, τη σύνταξη Sub, την κλήση ενός Sub από ένα κουμπί εντολής και τον τρόπο με τον οποίο ένα Sub διαφέρει από μια Συνάρτηση.

  • 📦 Ορισμός: Μια υπορουτίνα εκτελεί μια συγκεκριμένη εργασία και δεν επιστρέφει καμία τιμή στον κώδικα που την κάλεσε.
  • ♻️ Επαναχρησιμοποίηση: Μία υπορουτίνα μπορεί να κληθεί πολλές φορές από οπουδήποτε στο έργο.
  • 🔤 Κανόνες ονομασίας: Ένα όνομα δεν περιέχει κενά, ξεκινά με γράμμα ή υπογράμμιση και δεν είναι ποτέ λέξη-κλειδί VBA.
  • 🧾 Σύνταξη: Η εντολή Private Sub name (ByVal arg As String) ανοίγει το μπλοκ και η εντολή End Sub το κλείνει.
  • 🖱️ Κλήση: Ένα συμβάν κλικ στο κουμπί εντολής καλεί την υπορουτίνα και μεταβιβάζει τα ορίσματά της.
  • ▶ ️ Άμεση λειτουργία: Το F5, το παράθυρο διαλόγου Μακροεντολές ή η λέξη-κλειδί Κλήση εκτελούν όλα μια Υπορουτίνα χωρίς κουμπί.
  • 🔁 Υπολειτουργία ή λειτουργία: Επιλέξτε μια Συνάρτηση όταν πρέπει να επιστραφεί μια τιμή, διαφορετικά επιλέξτε μια Υποσυνάρτηση.

Υπορουτίνα Excel VBA

Τι είναι μια υπορουτίνα στο VBA;

A Υπορουτίνα σε VBA είναι ένα κομμάτι κώδικα που εκτελεί μια συγκεκριμένη εργασία που περιγράφεται στον κώδικα αλλά δεν επιστρέφει αποτέλεσμα ή τιμή. Οι υπορουτίνες χρησιμοποιούνται για τη διάσπαση μεγάλων κομματιών κώδικα σε μικρά διαχειρίσιμα μέρη. Οι υπορουτίνες μπορούν να ανακληθούν πολλές φορές από οπουδήποτε στο πρόγραμμα.

Ας υποθέσουμε ότι έχετε δημιουργήσει μια διεπαφή χρήστη με πλαίσια κειμένου για την αποδοχή δεδομένων εισόδου χρήστη. Μπορείτε να δημιουργήσετε μια υπορουτίνα που διαγράφει τα περιεχόμενα των πλαισίων κειμένου. Μια υπορουτίνα κλήσεων VBA είναι κατάλληλη σε ένα τέτοιο σενάριο επειδή δεν θέλετε να επιστρέψετε αποτελέσματα.

Γιατί να χρησιμοποιήσετε υπορουτίνες

  • Σπάστε τον κώδικα σε μικρό διαχειρίσιμο κώδικα: Ένα μέσο πρόγραμμα υπολογιστή έχει χιλιάδες και χιλιάδες γραμμές πηγαίου κώδικα. Αυτό εισάγει πολυπλοκότητα. Οι υπορουτίνες βοηθούν στην επίλυση αυτού του προβλήματος αναλύοντας το πρόγραμμα σε μικρά διαχειρίσιμα κομμάτια κώδικα.
  • Code επαναχρησιμοποίηση. Ας υποθέσουμε ότι έχετε ένα πρόγραμμα που πρέπει να έχει πρόσβαση στη βάση δεδομένων, σχεδόν όλα τα παράθυρα του προγράμματος θα πρέπει να αλληλεπιδρούν με τη βάση δεδομένων. Αντί να γράφετε ξεχωριστό κώδικα για αυτά τα παράθυρα, μπορείτε να δημιουργήσετε μια συνάρτηση που χειρίζεται όλες τις αλληλεπιδράσεις της βάσης δεδομένων. Στη συνέχεια, μπορείτε να το καλέσετε από όποιο παράθυρο θέλετε.
  • Οι υπορουτίνες και οι συναρτήσεις είναι αυτοτεκμηριωμένες. Ας υποθέσουμε ότι έχετε μια συνάρτησηcalculateLoanInterest και μια άλλη που λέει connectToDatabase. Βλέποντας απλώς το όνομα της υπορουτίνας/συνάρτησης, ο προγραμματιστής θα μπορεί να πει τι κάνει το πρόγραμμα.

Πριν γράψει ένα, ο μεταγλωττιστής αναμένει ότι το όνομα θα ακολουθεί ένα σύντομο σύνολο κανόνων.

Κανόνες ονομασίας υπορουτίνων και συναρτήσεων

Για να χρησιμοποιήσετε υπορουτίνες και συναρτήσεις, υπάρχουν κανόνες που πρέπει να ακολουθήσετε.

  • Το όνομα μιας υπορουτίνας ή μιας συνάρτησης κλήσης VBA δεν μπορεί να περιέχει χώρο
  • Ένα όνομα υποκλήσεων Excel VBA ή μια συνάρτηση πρέπει να ξεκινά με ένα γράμμα ή μια υπογράμμιση. Δεν μπορεί να ξεκινά με αριθμό ή ειδικό χαρακτήρα
  • Μια υπορουτίνα ή ένα όνομα συνάρτησης δεν μπορεί να είναι λέξη-κλειδί. Μια λέξη-κλειδί είναι μια λέξη που έχει ιδιαίτερη σημασία VBA. Λέξεις όπως Private, Sub, Function και End, κ.λπ. είναι όλες παραδείγματα λέξεων-κλειδιών. Ο μεταγλωττιστής τα χρησιμοποιεί για συγκεκριμένες εργασίες.

Με την επιλογή ενός έγκυρου ονόματος, η ίδια η δήλωση ακολουθεί ένα σταθερό μοτίβο.

Σύνταξη υπορουτίνας VBA

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

ΕΔΩ στη σύνταξη,

Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String)
    'do something
End Sub

Επεξήγηση σύνταξης

Code Ενέργειες
  • "Private Sub mySubRoutine(...)"
  • Εδώ η λέξη-κλειδί "Sub" χρησιμοποιείται για να δηλώσει μια υπορουτίνα με το όνομα "mySubRoutine" και να ξεκινήσει το σώμα της υπορουτίνας.
  • Η λέξη-κλειδί Ιδιωτικό χρησιμοποιείται για να καθορίσει το εύρος της υπορουτίνας
  • "ByVal arg1 ως συμβολοσειρά, ByVal arg2 ως συμβολοσειρά" :
  • Δηλώνει δύο παραμέτρους του ονόματος τύπου δεδομένων συμβολοσειράς arg1 και arg2
  • "Τέλος δευτερεύοντος"
  • Το "End Sub" χρησιμοποιείται για τον τερματισμό του σώματος της υπορουτίνας

Η ακόλουθη υπορουτίνα δέχεται το όνομα και το επώνυμο και τα εμφανίζει σε ένα πλαίσιο μηνύματος.

Τώρα θα προγραμματίσουμε και θα εκτελέσουμε αυτήν την Υποδιαδικασία. Ας το δούμε αυτό.

Πώς να καλέσετε το Sub στο VBA

Ακολουθεί μια διαδικασία βήμα προς βήμα σχετικά με τον τρόπο κλήσης του Sub στο VBA:

  1. Σχεδιάστε τη διεπαφή χρήστη και ορίστε τις ιδιότητες για τα στοιχεία ελέγχου χρήστη.
  2. Προσθέστε την υπορουτίνα
  3. Γράψτε τον κωδικό συμβάντος κλικ για το κουμπί εντολής που καλεί την υπορουτίνα
  4. Δοκιμάστε την εφαρμογή

Βήμα 1) Διεπαφής χρήστη

Σχεδιάστε τη διεπαφή χρήστη όπως φαίνεται στην παρακάτω εικόνα.

Πώς να καλέσετε το Sub στο VBA

Ορίστε τις ακόλουθες ιδιότητες. Οι ιδιότητες που ορίζουμε:

S / N Έλεγχος Ιδιοκτησία αξία
1 Κουμπί Command1 Όνομα btnDisplayFullName
2 Λεζάντα Πλήρες όνομα υπορουτίνα

Η διεπαφή σας θα πρέπει τώρα να φαίνεται ως εξής.

Πώς να καλέσετε το Sub στο VBA

Βήμα 2) Προσθήκη υπορουτίνας

  1. Πατήστε Alt + F11 για να ανοίξετε το παράθυρο κώδικα
  2. Προσθέστε την ακόλουθη υπορουτίνα
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

ΕΔΩ στον κωδικό,

Code Δράσεις
  • "Ιδιωτική δευτερεύουσα εμφάνισηFullName(...)"
  • Δηλώνει μια ιδιωτική υπορουτίνα displayFullName που δέχεται δύο παραμέτρους συμβολοσειράς.
  • "ByVal firstName As String, ByVal lastName As String"
  • Δηλώνει δύο μεταβλητές παραμέτρων firstName και lastName
  • MsgBox όνομα επίθετο"
  • Καλεί το MsgBox ενσωματωμένη λειτουργία για την εμφάνιση ενός πλαισίου μηνυμάτων. Στη συνέχεια, μεταβιβάζει τις μεταβλητές 'firstName' και 'lastName' ως παραμέτρους.
  • Το συμπλεκτικό σύμβολο "&" χρησιμοποιείται για τη σύνδεση των δύο μεταβλητών και την προσθήκη κενού κενού μεταξύ τους.

Βήμα 3) Κλήση της υπορουτίνας

Κλήση της υπορουτίνας από το συμβάν κλικ στο κουμπί εντολής.

  • Κάντε δεξί κλικ στο κουμπί εντολής όπως φαίνεται στην παρακάτω εικόνα. Επιλέξτε Προβολή Code.
  • Θα ανοίξει ο επεξεργαστής κώδικα

Πώς να καλέσετε το Sub στο VBA

Προσθέστε τον ακόλουθο κώδικα στο πρόγραμμα επεξεργασίας κώδικα για το συμβάν κλικ του κουμπιού εντολής btnDisplayFullName.

Private Sub btnDisplayFullName_Click()
    displayFullName "John", "Doe"
End Sub

Το παράθυρο του κωδικού σας θα πρέπει τώρα να έχει ως εξής

Πώς να καλέσετε το Sub στο VBA

Αποθηκεύστε τις αλλαγές και κλείστε το παράθυρο κώδικα.

Βήμα 4) Δοκιμή του κώδικα

Στη γραμμή εργαλείων προγραμματιστή βάλτε τη λειτουργία σχεδίασης 'off'. Οπως φαίνεται παρακάτω.

Πώς να καλέσετε το Sub στο VBA

Βήμα 5) Κάντε κλικ στο κουμπί εντολής «Υπορουτίνα FullName».

Θα λάβετε τα ακόλουθα αποτελέσματα

Πώς να καλέσετε το Sub στο VBA

Κατεβάστε το παραπάνω αρχείο Excel Code

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

Πώς να εκτελέσετε μια υπορουτίνα χωρίς κουμπί

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

  • Πατήστε F5 στον επεξεργαστή: Τοποθετήστε τον κέρσορα οπουδήποτε μέσα στο Sub και πατήστε F5. Εκτελείται αμέσως. Αυτό λειτουργεί μόνο όταν το Sub δεν δέχεται ορίσματα, επειδή η VBA δεν έχει τιμές να δώσει.
  • Βήμα προς βήμα με το F8: Η ίδια εκτέλεση, μία γραμμή τη φορά, ώστε να μπορείτε να παρακολουθείτε κάθε αλλαγή μεταβλητής στο παράθυρο "Τοπικά". Χρησιμοποιήστε το όταν ένα αποτέλεσμα είναι λανθασμένο και πρέπει να δείτε πού.
  • Χρησιμοποιήστε το παράθυρο διαλόγου Μακροεντολές: Στην καρτέλα Προγραμματιστής, κάντε κλικ στην επιλογή Μακροεντολές, επιλέξτε το όνομα και κάντε κλικ στην επιλογή Εκτέλεση. Σε αυτήν τη λίστα εμφανίζονται μόνο οι Δημόσιες Υποδομές χωρίς ορίσματα, γι' αυτό και μια βοηθητική Υπομονάδα συνήθως δηλώνεται ως Ιδιωτική.
  • Καλέστε το από άλλο Sub: Αυτή είναι η μέθοδος που χρησιμοποιείται για οποιοδήποτε Sub που δέχεται ορίσματα και αυτή στην οποία βασίζεται το παραπάνω κουμπί εντολών.

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

Sub RunTheGreeting()
    ' Form 1: no Call keyword, no brackets
    displayFullName "John", "Doe"

    ' Form 2: Call keyword, brackets required
    Call displayFullName("Jane", "Roe")
End Sub

Και οι δύο γραμμές κάνουν ακριβώς το ίδιο πράγμα. Η ανάμειξη των δύο μορφών, γράφοντας αγκύλες χωρίς τη λέξη-κλειδί Call, είναι η πιο συνηθισμένη αιτία του σφάλματος μεταγλώττισης "Expected: =" όταν ένα Sub δέχεται περισσότερα από ένα όρισμα.

Διαφορά μεταξύ ενός Sub και μιας Συνάρτησης σε VBA

Οι δύο τύποι διαδικασιών στη VBA είναι οι Sub και Function, και οι αρχάριοι συχνά επιλέγουν τον λάθος τύπο. Το αποφασιστικό ερώτημα είναι απλό: χρειάζεται ο κωδικός κλήσης μια τιμή πίσω;

Χαρακτηριστικό Σε Λειτουργία
Επιστρέφει μια τιμή Οχι Ναι, έχει αντιστοιχιστεί στο όνομα της συνάρτησης
Δηλώθηκε με Υπο… Τέλος Υπο Λειτουργία … Τέλος Λειτουργίας
Ονομάζεται ως Μια δήλωση από μόνη της Μέρος μιας έκφρασης, για παράδειγμα x = myFunc(2)
Μπορεί να χρησιμοποιηθεί σε κελί φύλλου εργασίας Οχι Ναι, ως συνάρτηση που ορίζεται από τον χρήστη
Τυπική χρήση Μορφοποίηση φύλλου, διαγραφή δεδομένων εισόδου, εμφάνιση μηνύματος Υπολογισμός συνόλου, μετατροπή τιμής, αναζήτηση δεδομένων

Χρησιμοποιήστε ένα Sub όταν ο κώδικας ενεργεί στο βιβλίο εργασίας και ένα Συνάρτηση VBA όταν ο κώδικας παράγει μια απάντηση που καταναλώνει κάτι άλλο.

Συχνές Ερωτήσεις

Ένα Private Sub μπορεί να κληθεί μόνο από το εσωτερικό της ενότητας που το δηλώνει. Ένα Public Sub είναι ορατό σε κάθε ενότητα του έργου και είναι το μόνο είδος που εμφανίζεται στο παράθυρο διαλόγου Μακροεντολές.

Η ByVal μεταβιβάζει ένα αντίγραφο, επομένως η Υπορουτίνα δεν μπορεί να αλλάξει τη μεταβλητή του καλούντος. Η ByRef μεταβιβάζει την ίδια τη μεταβλητή, επομένως οποιαδήποτε αλλαγή είναι ορατή στον καλούντα. Η ByRef είναι η προεπιλεγμένη όταν δεν έχει γραφτεί καμία από τις δύο λέξεις-κλειδιά.

Χρησιμοποιήστε την πρόταση Exit Sub. Σταματά τη διαδικασία σε αυτό το σημείο και επιστρέφει τον έλεγχο σε ό,τι την καλέσατε, κάτι που είναι χρήσιμο για πρόωρη αποχώρηση όταν αποτύχει μια δοκιμή επικύρωσης.

Ναι. Επικολλήστε τη μακροεντολή και ένας βοηθός AI ομαδοποιεί τις σχετικές γραμμές, προτείνει ένα περιγραφικό όνομα για κάθε νέο Sub και ξαναγράφει το πρωτότυπο ως μια σύντομη ακολουθία κλήσεων. Δοκιμάστε το αποτέλεσμα σε ένα αντίγραφο του βιβλίου εργασίας.

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

Συνοψίστε αυτήν την ανάρτηση με: