VBA Private vs Public Procedures (Subs & Functions)

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

Διαδικασίες δημόσιου εναντίον ιδιωτικών υποδιαιρέσεων

Οι διαδικασίες (υπο και λειτουργίες) μπορούν να δηλωθούν είτε ιδιωτικές είτε δημόσιες στο VBA. Εάν είναι δημόσια, σημαίνει ότι θα μπορείτε να τα δείτε μέσα από το παράθυρο μακροεντολών του Excel και μπορούν να κληθούν από οπουδήποτε στο VBA Project σας. Εάν είναι ιδιωτικά, δεν μπορούν να εμφανιστούν στο παράθυρο μακροεντολής του Excel και είναι διαθέσιμα μόνο για χρήση εντός της ενότητας στην οποία έχουν δηλωθεί (χρησιμοποιώντας συνήθεις μεθόδους, ανατρέξτε στο κάτω μέρος αυτού του άρθρου για τρόπους πρόσβασης σε ιδιωτικές διαδικασίες από άλλες ενότητες) Το

Οι δημόσιες συναρτήσεις μπορούν να ονομαστούν σαν ενσωματωμένες συναρτήσεις του Excel στο φύλλο εργασίας του Excel.

Σημείωση: Οι μεταβλητές και οι σταθερές μπορούν επίσης να είναι δημόσιες ή ιδιωτικές.

Παράθυρο μακροεντολής Excel

Από προεπιλογή, οι μακροεντολές του Excel (οι περισσότερες διαδικασίες VBA) είναι ορατές σε χρήστες βιβλίων εργασίας στο παράθυρο μακροεντολών:

Αυτά θεωρούνται Δημόσιο διαδικασίες. Μπορείτε να ορίσετε ρητά τις διαδικασίες ως δημόσιες, προσθέτοντας "Δημόσιο" πριν από την υπο -δήλωση:

123 Public Sub HelloWorld ()MsgBox "Hello World"Τέλος υπο

Εάν δεν ορίσετε τη διαδικασία ως δημόσια, θα θεωρηθεί δημόσια.

Για να δηλώσετε μια διαδικασία ως ιδιωτική, απλώς προσθέστε το "ιδιωτικό" πριν από την υποδήλωση της διαδικασίας:

123 Private Sub HelloEveryone ()MsgBox "Γεια σε όλους"Τέλος υπο

Η δεύτερη διαδικασία δεν θα είναι ορατή στο παράθυρο Μακροεντολή στους χρήστες του Excel, αλλά μπορεί ακόμα να χρησιμοποιηθεί στον κώδικα VBA.

Διαδικασίες με επιχειρήματα

Οι δευτερεύουσες διαδικασίες μπορεί να έχουν επιχειρήματα. Τα επιχειρήματα εισάγονται στην υποδιαδικασία:

123 Sub Hello (strName as string)MsgBox "Γεια" & strNameΤέλος υπο

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

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

Οι δημόσιες συναρτήσεις στο Excel μπορούν να χρησιμοποιηθούν απευθείας σε ένα φύλλο εργασίας ως «Συνάρτηση καθορισμένη από το χρήστη» (UDF). Αυτός είναι βασικά ένας προσαρμοσμένος τύπος που μπορεί να κληθεί απευθείας σε ένα φύλλο εργασίας. Μπορούν να βρεθούν στην κατηγορία "Ορισμός χρήστη" στο παράθυρο "Εισαγωγή συνάρτησης" ή μπορούν να πληκτρολογηθούν απευθείας σε ένα κελί.

Προγραμματισμός VBA | Το Code Generator λειτουργεί για εσάς!

Χρήση διαδικασιών μεταξύ ενοτήτων στο έργο σας VBA

Οι δημόσιες διαδικασίες μπορούν να κληθούν από οποιαδήποτε ενότητα ή μορφή στο VBA Project σας.

Η απόπειρα κλήσης μιας ιδιωτικής διαδικασίας από διαφορετική ενότητα θα οδηγήσει σε σφάλμα (Σημείωση: ανατρέξτε στο κάτω μέρος αυτού του άρθρου για μια εργασία γύρω).

Σημείωση: Οι δημόσιες διαδικασίες και οι μεταβλητές στις ενότητες τάξης συμπεριφέρονται ελαφρώς διαφορετικά και δεν εμπίπτουν στο πεδίο εφαρμογής αυτού του άρθρου.

Διαφορετικές ενότητες, μπορούν να αποθηκεύσουν διαδικασίες με το ίδιο όνομα, υπό την προϋπόθεση ότι είναι και οι δύο ιδιωτικές.

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

Ιδιωτικές ενότητες

Από προεπιλογή, οι ενότητες είναι δημόσιες.

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

1 Επιλογή Ιδιωτική ενότητα

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

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

Πρόσβαση σε ιδιωτική διαδικασία από διαφορετική ενότητα

Όπως αναφέρθηκε παραπάνω, οι ιδιωτικές διαδικασίες δεν είναι προσβάσιμες σε άλλες ενότητες κώδικα με «κανονικές» μεθόδους. Ωστόσο, μπορείτε να αποκτήσετε πρόσβαση σε ιδιωτικές διαδικασίες χρησιμοποιώντας το Εφαρμογή. Εκτέλεση εντολή διαθέσιμη στο VBA.

Εξετάστε τις ακόλουθες 3 ενότητες.

Η Ενότητα 2 είναι α Ιδιωτικός Ενότητα με α Δημόσιο Υποδιαδικασία, ενώ η Ενότητα 3 είναι Δημόσιο ενότητα με α Ιδιωτικός Υποδιαδικασία.

Στο Module1, μπορούμε να καλέσουμε Hello World - the Επιλογή Ιδιωτική ενότητα στο επάνω μέρος δεν μας εμποδίζει να καλέσουμε τη Διαδικασία Υπο - το μόνο που εξυπηρετεί είναι να κρύψει τη Διαδικασία Υπο στο παράθυρο μακροεντολής.

Δεν χρειαζόμαστε επίσης τη δήλωση κλήσης - είναι εκεί για να διευκολύνει την ανάγνωση του κώδικα.

Ο κώδικας θα μπορούσε επίσης να μοιάζει με αυτό παρακάτω:

1234 Sub CallHelloFromPrivate ()«καλέστε ένα υποσύνολο από μια ιδιωτική μονάδαΓειά σου ΚόσμεΤέλος υπο

Μπορούμε επίσης να εκτελέσουμε τη διαδικασία HelloWorld Sub χρησιμοποιώντας το VBA Εφαρμογή. Εκτέλεση εντολή.

Στο Module3, ωστόσο, η διαδικασία GoodMorningWorld έχει κηρυχθεί ιδιωτική. Δεν μπορείτε να το καλέσετε από άλλη ενότητα χρησιμοποιώντας «κανονικά» μέσα, δηλαδή τη δήλωση κλήσης.

Πρέπει να χρησιμοποιήσετε Application.RunCommand για εκτέλεση ενός Ιδιωτικού Υπο -από άλλη ενότητα.

1234 Sub CallGoodMorning ()«εκτελέστε ένα ιδιωτικό υποσύστημα από μια δημόσια ενότηταApplication.Run ("GoodMorningWorld")Τέλος υπο

Προσέξτε το πότε χρησιμοποιείτε το Application.RunCommand εντολή, πρέπει να βάλετε το όνομα της διαδικασίας Sub σε ανεστραμμένα κόμματα.

Εάν προσπαθήσουμε να χρησιμοποιήσουμε τη δήλωση κλήσης για να εκτελέσουμε τη διαδικασία GoodMorningWorld Sub, θα εμφανιστεί σφάλμα.

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave