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

Εισαγωγή

Αυτό το άρθρο περιγράφει τον τρόπο χρήσης μεταβλητών σε Microsoft Excel δευτερεύουσες διαδικασίες στο Microsoft Visual Basic for Applications.

Περισσότερες πληροφορίες

Μεταβλητές σε μια δευτερεύουσα διαδικασία

Ένα ισχυρό χαρακτηριστικό των γλωσσών προγραμματισμού είναι η δυνατότητα αποθήκευσης ενός στοιχείου σε μια μεταβλητή, έτσι ώστε τα περιεχόμενα της μεταβλητής να μπορούν να χρησιμοποιηθούν ή να αλλάξουν αργότερα στη διαδικασία. Αυτό το έγγραφο περιγράφει την ακόλουθη χρήση των μεταβλητών στα Visual Basic:

  • Πώς δηλώνονται οι μεταβλητές.

  • Οι διαδικασίες και τα έργα που μπορούν να χρησιμοποιήσουν τη μεταβλητή.

  • Η διάρκεια ζωής μιας μεταβλητής.

Δήλωση μεταβλητής σε μακροεντολή

Ο πιο απλός τρόπος για να δηλώσετε μια μεταβλητή σε μια μακροεντολή είναι να χρησιμοποιήσετε την πρόταση Dim. Η ακόλουθη γραμμή δηλώνει δύο μεταβλητές, ως ακέραιους:

    Dim x As Integer, y As Integer

Με το x και το y να καθορίζονται ως ακέραιοι αριθμοί, ενημερώνετε τους Visual Basic να δεσμεύσουν επαρκή μνήμη για μια ακέραια μεταβλητή (2 byte για τα x και y) και ότι οι πληροφορίες που είναι αποθηκευμένες είτε στο x είτε στο y είναι ένας ακέραιος αριθμός μεταξύ -32768 και 32767.

ΣΗΜΕΊΩΣΗ: Εάν δηλώσετε περισσότερες από μία μεταβλητές χρησιμοποιώντας μία μόνο πρόταση Dim, πρέπει να καθορίσετε τον τύπο δεδομένων για κάθε μεταβλητή.

Εάν δεν καθορίσετε τον τύπο δεδομένων για κάθε μεταβλητή, όπως στον ακόλουθο κωδικό Visual Basic, μόνο η μεταβλητή y ορίζεται ως ακέραιος μεταβλητής. Η μεταβλητή x θα είναι ένας τύπος μεταβλητής:

    Dim x, y As Integer

Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Τύπος δεδομένων "Μεταβλητή" παρακάτω.
 

Για να εκτελέσετε έναν έλεγχο μεταβλητής, ακολουθήστε τα παρακάτω βήματα:

  1. Αποθηκεύστε και κλείστε τυχόν ανοιχτά βιβλία εργασίας και, στη συνέχεια, ανοίξτε ένα νέο βιβλίο εργασίας.

  2. Εκκινήστε το πρόγραμμα επεξεργασίας Visual Basic (πατήστε το συνδυασμό πλήκτρων ALT+F11).

  3. Στο μενού Εισαγωγή, κάντε κλικ στην επιλογή Λειτουργική μονάδα.

  4. Πληκτρολογήστε τον παρακάτω κωδικό:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "η τιμή του x είναι " & x & _
        Chr(13) & "η τιμή του y είναι " & y
    End Sub

  5. Εκτελέστε τη μακροεντολή Variable_Test. Λαμβάνετε το ακόλουθο μήνυμα:


    the value of x is 10#x1

  6. Κάντε κλικ στο κουμπί OK.

  7. Στη Variable_Test μακροεντολή αλλάξτε την ακόλουθη γραμμή:

    x = 10

  8. προς:

    x = "error"

  9. Εκτελέστε τη μακροεντολή Variable_Test.

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

Σύνοψη τύπου δεδομένων

Αυτοί είναι οι κοινοί τύποι δεδομένων μεταβλητών:

κοινοί τύποι δεδομένων μεταβλητών

τύπος δεδομένων Variant

Εάν δεν καθορίσετε έναν τύπο δεδομένων όταν δηλώνετε μια μεταβλητή ή δεν δηλώνετε καθόλου μια μεταβλητή, Visual Basic καθορίζει αυτόματα τον τύπο δεδομένων μεταβλητής για αυτήν τη μεταβλητή. Ακολουθούν τα πλεονεκτήματα των μεταβλητών που έχουν δηλωθεί ως αυτός ο τύπος δεδομένων:

  • Οι μεταβλητές μπορεί να περιέχουν τιμές συμβολοσειράς, ημερομηνίας, ώρας, δυαδικής τιμής ή αριθμητικές τιμές.

  • Οι μεταβλητές μπορούν να μετατρέψουν τις τιμές που περιέχουν αυτόματα.

Το μειονέκτημα είναι ότι οι μεταβλητές μεταβλητές απαιτούν τουλάχιστον 16 byte μνήμης. Η μνήμη 16 byte μπορεί να είναι σημαντική σε μεγάλες διαδικασίες ή σε σύνθετες λειτουργικές μονάδες.

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

Αλλάξτε τον κώδικα της μακροεντολής Variable_Test σε:

Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

Εκτελέστε τη μακροεντολή Variable_Test.

Δεν θα εμφανιστεί σφάλμα, επειδή μπορείτε να αντιστοιχίσετε οτιδήποτε στις μεταβλητές x και y.

ΣΗΜΕΊΩΣΗ: Μπορείτε επίσης να παραλείψετε την ακόλουθη γραμμή και η μακροεντολή θα εξακολουθεί να λειτουργεί ως μεταβλητές x και y θεωρούνται τύποι δεδομένων Μεταβλητή:

    Dim x, y

Εύρος μεταβλητής

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

Πεδίο εφαρμογής επιπέδου διαδικασίας

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

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

  1. Εισαγάγετε μια νέα λειτουργική μονάδα στο έργο σας.

  2. Πληκτρολογήστε και τις δύο παρακάτω μακροεντολές σε αυτή τη λειτουργική μονάδα:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, όπως φαίνεται από την macro1 is " & x 'η επόμενη γραμμή εκτελεί Μακροεντολή2 Macro2 End Sub Macro2() MsgBox "x, όπως φαίνεται από τη μακροεντολή2 είναι " & x End Sub

  3. Εκτελέστε την μακροεντολή1 και θα λάβετε το ακόλουθο μήνυμα:

    x, as seen by Macro1 is 10

  4. Κάντε κλικ στο κουμπί OKκαι θα λάβετε το ακόλουθο μήνυμα:

    x, as seen by Macro2 is

  5. Κάντε κλικ στο κουμπί OK.

Η μακροεντολή2 δεν εμφανίζει μια τιμή για τη μεταβλητή x, επειδή η μεταβλητή x είναι τοπική σε Μακροεντολή1.

Πεδίο εφαρμογής ιδιωτικού και δημόσιου επιπέδου λειτουργικής μονάδας

Μπορείτε να ορίσετε μεταβλητές στην ενότητα δηλώσεων μιας λειτουργικής μονάδας (στο επάνω μέρος μιας λειτουργικής μονάδας, πάνω από όλες τις δευτερεύουσες διαδικασίες) και να ορίσετε το εύρος της μεταβλητής σας χρησιμοποιώντας τη Δημόσια δήλωση, την πρόταση Dim ή την πρόταση Private. Εάν τοποθετήσετε τη δημόσια πρόταση μπροστά από τη μεταβλητή σας, η μεταβλητή σας θα είναι διαθέσιμη σε όλες τις μακροεντολές σε όλες τις λειτουργικές μονάδες του έργου. Εάν τοποθετήσετε είτε την πρόταση Dim είτε την ιδιωτική πρόταση πριν από τη μεταβλητή, η μεταβλητή είναι διαθέσιμη μόνο σε μακροεντολές στη λειτουργική μονάδα όπου δηλώνεται.

Για να δείτε τη διαφορά μεταξύ της δημόσιας πρότασης και της πρότασης Dim, ακολουθήστε τα παρακάτω βήματα:

  1. Αποθηκεύστε και κλείστε τυχόν ανοιχτά βιβλία εργασίας και, στη συνέχεια, ανοίξτε ένα νέο βιβλίο εργασίας.

  2. Εκκινήστε το Πρόγραμμα επεξεργασίας Visual Basic.

  3. Εισαγάγετε μια λειτουργική μονάδα στο έργο σας.

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
        x = 10
        MsgBox x
        Macro_1b
    End Sub
    Sub Macro_1b()
        x = x * 2
        MsgBox x
        Macro2
    End Sub
  5. Εισαγάγετε μια άλλη λειτουργική μονάδα στο έργο σας.

  6. Πληκτρολογήστε τον παρακάτω κώδικα σε αυτή τη λειτουργική μονάδα:


    Sub Macro2()     x = x * 3
        MsgBox x
    End Sub

  7. Εκτελέστε Macro_1a μακροεντολή στην πρώτη λειτουργική μονάδα.

  8. Με τη μεταβλητή x να έχει δηλωθεί ως "Δημόσιο x Ως Ακέραιος", και οι τρεις μακροεντολές του έργου έχουν πρόσβαση στην τιμή του x. Το πρώτο πλαίσιο μηνύματος εμφανίζει την τιμή 10. Το δεύτερο πλαίσιο μηνύματος εμφανίζει μια τιμή 20 (επειδή το x πολλαπλασιάζεται επί 2 σε Macro_1b). Το τρίτο πλαίσιο μηνύματος εμφανίζει την τιμή 60 (επειδή η τιμή του x άλλαξε σε 20 σε Macro_1b και, στη συνέχεια, πολλαπλασιάστηκε επί 3 στο macro2).

  9. Αλλαγή της γραμμής δήλωσης στην πρώτη λειτουργική μονάδα από:

       Public x As Integer

    προς:

       Dim x As Integer

  10. Εκτελέστε τη μακροεντολή Macro_1a.

  11. Με τη μεταβλητή x να έχει δηλωθεί ως "Dim x As Integer", μόνο οι μακροεντολές στην πρώτη λειτουργική μονάδα έχουν πρόσβαση στην τιμή του x. Επομένως, το πρώτο πλαίσιο μηνύματος εμφανίζει μια τιμή 10, το δεύτερο πλαίσιο μηνύματος εμφανίζει μια τιμή 20, (επειδή το x πολλαπλασιάζεται επί 2 στο Macro_1b) και το τρίτο πλαίσιο μηνύματος εμφανίζει μια τιμή 0 (επειδή η Μακροεντολή2 δεν βλέπει την τιμή του x και η τιμή του μη εξουσιοδοτημένου από το μηδέν χρησιμοποιείται από τη Μακροεντολή 2).

  12. Αλλαγή της γραμμής δήλωσης στην πρώτη λειτουργική μονάδα από:

      Dim x As Integer

    Να:

        Private x As Integer

  13. Εκτελέστε τη μακροεντολή Macro_1a.

  14. Τα ίδια πλαίσια μηνύματος εμφανίζονται χρησιμοποιώντας την εμβέλεια ιδιωτικής δήλωσης, όπως χρησιμοποιούσαν την πρόταση Dim. Η μεταβλητή x έχει το ίδιο πεδίο εφαρμογής, ιδιωτικό για τη λειτουργική μονάδα όπου δηλώνεται.


ΣΗΜΕΊΩΣΗ: Εάν θέλετε το εύρος της μεταβλητής σας να περιορίζεται στη λειτουργική μονάδα όπου δηλώνεται, χρησιμοποιήστε τη δήλωση Privatestatement αντί για την πρόταση Dim. Και οι δύο έχουν το ίδιο αποτέλεσμα, αλλά το εύρος είναι σαφέστερο κατά την ανάγνωση του κώδικα εάν χρησιμοποιήσετε τη δήλωση "Ιδιωτικό".
 

Διάρκεια ζωής μιας μεταβλητής

Ο χρόνος κατά τον οποίο μια μεταβλητή διατηρεί την τιμή της είναι γνωστή ως διάρκεια ζωής της. Η τιμή μιας μεταβλητής μπορεί να αλλάξει κατά τη διάρκεια ζωής της, αλλά θα διατηρήσει μια τιμή. Επίσης, όταν μια μεταβλητή χάνει την εμβέλεια, δεν έχει πλέον τιμή.
 

Προετοιμασία της τιμής μιας μεταβλητής

Όταν εκτελείτε μια μακροεντολή, όλες οι μεταβλητές αρχικοποιούνται σε μια τιμή. Γίνεται προετοιμασία μιας αριθμητικής μεταβλητής σε μηδέν, γίνεται προετοιμασία μιας συμβολοσειράς μεταβλητού μήκους σε συμβολοσειρά μηδενικού μήκους ("") και μια συμβολοσειρά σταθερού μήκους συμπληρώνεται με τον κωδικό ASCII 0. Οι μεταβλητές αρχικοποιούνται σε Άδειασμα. Μια κενή μεταβλητή αναπαρίσταται από το μηδέν σε αριθμητικό περιβάλλον και από συμβολοσειρά μηδενικού μήκους ("") σε περιβάλλον συμβολοσειράς.

Μεταβλητές επιπέδου διαδικασίας

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

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

  1. Εισαγάγετε μια νέα λειτουργική μονάδα στο έργο σας.

  2. Πληκτρολογήστε και τις δύο παρακάτω μακροεντολές σε αυτή τη λειτουργική μονάδα:

    Sub Macro1()
        'ορισμός του x ως μεταβλητού
    επιπέδου διαδικασίας    Dim x As Integer
       MsgBox "η αρχική τιμή του x είναι " & x
       x = 10
        MsgBox "x is " & x
        'η επόμενη γραμμή εκτελεί μακροεντολή2
        Μακροεντολή2
        MsgBox "το x εξακολουθεί να " & x
    End Sub
    Δευτερεύουσα μακροεντολή2()
        MsgBox "x, όπως φαίνεται από το macro2 είναι " & x
    End Sub

  3. Εκτέλεση μακροεντολής1.

  4. Λαμβάνετε το ακόλουθο μήνυμα:

        the initialized value of x is 0

  5. Κάντε κλικ στο κουμπί OKκαι θα λάβετε το μήνυμα:

     x is 10

  6. Κάντε κλικ στο κουμπί OKκαι θα λάβετε το ακόλουθο μήνυμα:

    x, as seen by Macro2 is

  7. Κάντε κλικ στο κουμπί OK.

  8. Η μακροεντολή2 δεν εμφανίζει μια τιμή για τη μεταβλητή x, επειδή η μεταβλητή x είναι τοπική σε Μακροεντολή1. Λαμβάνετε το ακόλουθο μήνυμα:

    x is still 10

  9. Κάντε κλικ στο κουμπί OK.

  10. Εκτέλεση μακροεντολής1.

Λαμβάνετε τα ίδια μηνύματα που περιγράφονται στα βήματα 3 έως 6, επειδή μόλις η Μακροεντολή1 σταμάτησε να εκτελείται στο βήμα 6, η τιμή της μεταβλητής x χάθηκε. Επομένως, όταν εκτελέσετε ξανά τη Μακροεντολή1 στο Βήμα 7, το πρώτο μήνυμα εμφανίζει την τιμή του x ως μηδέν (την αρχική τιμή).

Στατική λέξη-κλειδί

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

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

  1. Change the code in Macro1 to:
    
    Sub Macro1()
        'set x as a procedure level variable
        Static x As Integer
           MsgBox "the initialized value of x is " & x
        x = x + 10
        MsgBox "x is " & x
    End Sub
  2. Εκτέλεση μακροεντολής1.

  3. Θα λάβετε το μήνυμα:

    the initialized value of x is 0

  4. Κάντε κλικ στο κουμπί OKκαι θα λάβετε το μήνυμα:

    x is 10

  5. Κάντε κλικ στο κουμπί OK.

  6. Εκτελέστε την μακροεντολή1 και λαμβάνετε το ακόλουθο μήνυμα:

    the initialized value of x is 10

  7. Κάντε κλικ στο κουμπί OKκαι θα λάβετε το ακόλουθο μήνυμα:

    x is 20

  8. Κάντε κλικ στο κουμπί OK.

Οι τιμές που εμφανίζονται στα μηνύματα διαφέρουν τη δεύτερη φορά, επειδή η μεταβλητή x δηλώνεται ως στατική μεταβλητή και η μεταβλητή διατηρεί την τιμή της αφού εκτελέσετε την Μακροεντολή1 την πρώτη φορά.

ΣΗΜΕΊΩΣΗ:  Εάν έχετε μια μεταβλητή επιπέδου λειτουργικής μονάδας, η διάρκεια ζωής της είναι ίδια σαν να ήταν μια στατική μεταβλητή επιπέδου διαδικασίας.

Για να επαληθεύσετε τη διάρκεια ζωής μιας μεταβλητής επιπέδου λειτουργικής μονάδας, ακολουθήστε τα παρακάτω βήματα:

  1. Change the code in the module that contains Macro1 to the following:
    
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
       x = x + 10
       MsgBox "x is " & x
    End Sub
  2. Εκτελέστε την μακροεντολή1 και θα λάβετε το ακόλουθο μήνυμα:

    the initialized value of x is 0

  3. Κάντε κλικ στο κουμπί OK και θα λάβετε το ακόλουθο μήνυμα:

    x is 10

  4. Κάντε κλικ στο κουμπί OK,

  5. Εκτελέστε την μακροεντολή1 και θα λάβετε αυτό το μήνυμα:

    the initialized value of x is 10

  6. Κάντε κλικ στο κουμπί OK.

  7. Λαμβάνετε το ακόλουθο μήνυμα:

    x is 20

  8. Κάντε κλικ στο κουμπί OK.

Οι τιμές που εμφανίζονται στα μηνύματα διαφέρουν τη δεύτερη φορά, επειδή η μεταβλητή x δηλώνεται ως στατική μεταβλητή και διατηρεί την τιμή της αφού εκτελέσετε την Μακροεντολή1 την πρώτη φορά.
 

Επαναφορά έργου για την επαναφορά μεταβλητών

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

Εάν το κάνετε αυτό για το έργο Macro1 και, στη συνέχεια, εκτελέσετε ξανά τη μακροεντολή Macro1,η τιμή της μεταβλητής x αρχικοποιηθεί πάλι στο μηδέν και λαμβάνετε το πρώτο μήνυμα:

    the initialized value of x is 0

Χρειάζεστε περισσότερη βοήθεια;

Θέλετε περισσότερες επιλογές;

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

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

Σας βοήθησαν αυτές οι πληροφορίες;

Πόσο ικανοποιημένοι είστε με τη γλωσσική ποιότητα;
Τι επηρέασε την εμπειρία σας;
Πατώντας "Υποβολή" τα σχόλια σας θα χρησιμοποιηθούν για τη βελτίωση των προϊόντων και των υπηρεσιών της Microsoft. Ο διαχειριστής IT θα έχει τη δυνατότητα να συλλέξει αυτά τα δεδομένα. Δήλωση προστασίας προσωπικών δεδομένων.

Σας ευχαριστούμε για τα σχόλιά σας!

×