Υπολογιστικά Συστήματα Ενότητα 3: Βασικά στοιχεία της γλώσσας προγραμματισμού Visual Basic for Applications (VBA) Σαπρίκης Ευάγγελος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο TEI Δυτικής Μακεδονίας και στην Ανώτατη Εκκλησιαστική Ακαδημία Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί ενότητας Να γνωρίσει ο φοιτητής τα βασικά στοιχεία της γλώσσας προγραμματισμού VBA και να είναι σε θέση να τη χρησιμοποιήσει για την ανάπτυξη διαδικασιών και συναρτήσεων. 4
Περιεχόμενα ενότητας (1/2) Εισαγωγικές έννοιες. Κυριότερα στοιχεία της VBA. Γραφικό περιβάλλον VBA Editor. Αντικείμενα. Βασικά στοιχεία προγραμματισμού στην VBA. 5
Περιεχόμενα ενότητας (2/2) Διαδικασίες. Συναρτήσεις. 6
Εισαγωγικές έννοιες Η VBA είναι μία γλώσσα προγραμματισμού scripting εφαρμογών, η οποία αναπτύχθηκε από τη Microsoft και συμπεριλαμβάνεται στην πλειοψηφία των εφαρμογών του λογισμικού πακέτου του Office, αλλά και σε εφαρμογές άλλων δημιουργών. Βασικό χαρακτηριστικό της VBA είναι ο προγραμματισμός αντικειμένων για κάθε εφαρμογή, στηριζόμενη στις βασικές αρχές της Microsoft Visual Basic. Για παράδειγμα, στο Excel, η συγγραφή κώδικα για τη διαχείριση των κελιών, των γραφημάτων, των φύλλων εργασίας και των υπόλοιπων αντικειμένων του. 7
Κυριότερα στοιχεία της VBA 1. Κώδικας: η συγγραφή εντολών που αποθηκεύεται σε μία λειτουργική μονάδα (module). 2. Λειτουργικές μονάδες: αποθηκεύονται σε ένα αρχείο Excel, αποτελούνται από διαδικασίες. 3. Διαδικασίες: πρόκειται για μία μονάδα κώδικα, η οποία εκτελεί μία ενέργεια(-ιες). Στη VBA υπάρχουν 2 κατηγορίες διαδικασιών: α) οι διαδικασίες Sub και β) οι διαδικασίες Function (συναρτήσεις). 4. Αντικείμενα: κελιά, γραφήματα, πίνακες, φύλλα εργασίας, κτλ. Επίσης, σημαντικότατο ρόλο διαδραματίζουν και οι μέθοδοι και οι ιδιότητες των αντικειμένων. 5. Μεταβλητές: η δέσμευση κύριας μνήμης για τις ανάγκες ενός προγράμματος. 8
Γραφικό περιβάλλον VBA Editor (1) Εικόνα 1: Γραφικό Περιβάλλον VBA Editor (Διδάσκων, 2014). 9
Γραφικό περιβάλλον VBA Editor (2) Εμφάνιση του VBA Editor: 1. Αlt + F11. 2. Από το βασικό μενού επιλέγω: «Προβολή» και στη συνέχεια «Μακροεντολές». Οι μακροεντολές θα αποτελέσουν το βασικό «εργαλείο» για τη συγγραφή κώδικα σε VBA και «μετατροπή» του σε ενέργειες στα αντικείμενα του Excel. 10
Γραφικό περιβάλλον VBA Editor (3) Κυριότερα παραθυρικά περιβάλλοντα VBA Editor: 1. Γραμμές μενού και εργαλείων. 2. Παράθυρο project explorer. 3. Παράθυρο κώδικα. 4. Παράθυρο immediate. 11
Παράθυρο project explorer Στο παράθυρο του project explorer εμφανίζονται τα ανοικτά βιβλία εργασίας του Excel και τα πρόσθετα, τα οποία χαρακτηρίζονται ως «έργα». Κάθε έργο αποτελείται από επιμέρους αντικείμενα και λειτουργικές μονάδες. 12
Αντικείμενα και ιεραρχία τους Τα δομικά «στοιχεία» του Excel χαρακτηρίζονται ως αντικείμενα. Επομένως, όπως αναφέρθηκε και προηγουμένως, μέσω της VBA θα γράφουμε κώδικα (προγραμματίζουμε) ώστε να κάνουμε ενέργειες στα αντικείμενα του Excel. Αυτά τα αντικείμενα ακολουθούν μία συγκεκριμένη ακολουθιακή ιεραρχία. Ειδικότερα, το αντικείμενο Application περιέχει άλλα αντικείμενα (π.χ. Workbooks, Windows και AddIns). Ένα αντικείμενο Workbook περιέχει άλλα αντικείμενα (π.χ. Worksheets και Charts. Ένα αντικείμενο Worksheet περιέχει άλλα αντικείμενα (π.χ. Range, Cells, και PivotTables), κ.ο.κ. 13
Αναφορά σε αντικείμενα Στη VBA, η αναφορά σε αντικείμενα γίνεται με τη χρήση τελείας («.»), εφαρμόζοντάς αυτήν σε φθίνουσα ιεραρχία. Για παράδειγμα: Workbooks( Βιβλίο1 ).Worksheets( Sheet1 ).Range( A1:A3 ) και Workbooks( Βιβλίο1 ).Worksheets( Sheet1 ).Cells(3,2). 14
Συλλογή αντικειμένων Στη VBA, ως συλλογή αντικειμένων χαρακτηρίζεται μία ομάδα αντικειμένων της ίδιας κλάσης και μία συλλογή θεωρείται και η ίδια ως ένα αντικείμενο. Επομένως, υπάρχει η δυνατότητα αναφοράς και προγραμματισμού, είτε σε ένα αντικείμενο είτε ως ενιαία κλάση «ομοειδών» αντικειμένων. Παράδειγμα: 1. Αναφορά σε ένα αντικείμενο: Worksheets( Φύλλο1 ) ή Worksheets(1). 2. Αναφορά σε κλάση: Worksheets(). 15
Ιδιότητες και μέθοδοι αντικειμένων Κάθε αντικείμενο έχει/ υποστηρίζει έναν αριθμό από ιδιότητες και μεθόδους. Η πλειοψηφία των μεθόδων δέχονται και ορίσματα. Παράδειγμα ιδιότητας: Worksheets( Φύλλο1 ).Range( A1 ).Value=100 Παράδειγμα μεθόδου: Worksheets( Φύλλο1 ).Range( A1:B2 ).Clear 16
Αντικείμενα: Γενικά Στοιχεία Έχουν μοναδικές ιδιότητες και μεθόδους. Ωστόσο, σε κάποιες περιπτώσεις, διαφορετικά αντικείμενα έχουν κοινές ιδιότητες (π.χ. Name) και μεθόδους (π.χ. Delete). Υπάρχει η δυνατότητα χειρισμού αντικειμένων δίχως να επιλεγούν. Οι ιδιότητες μπορούν να επιστρέφουν μία αναφορά σε ένα άλλο αντικείμενο. Υπάρχει η δυνατότητα αναφοράς στο ίδιο αντικείμενο, με διαφορετικούς τρόπους. Σημαντικό ζήτημα η κατανόηση των συλλογών αντικειμένων. Πηγή: Walkenbach, 2011. 17
Βασικά στοιχεία προγραμματισμού στην VBA Σχόλια. Μεταβλητές. Προτάσεις εκχώρησης. Πίνακες. Μεταβλητές αντικειμένων. Ενσωματωμένες συναρτήσεις. Πηγή: Walkenbach, 2011. 18
Σχόλια (1) Πρόκειται για περιγραφικό κείμενο, το οποίο γράφεται μέσα στον κώδικα της VBA αλλά δε μεταγλωττίζεται (αγνοείται) κατά την εκτέλεση του προγράμματος. Χρησιμοποιείται αποκλειστικά και μόνο για να μπορεί ο προγραμματιστής να θυμάται τι ακριβώς έκανε στον κώδικά του. Η εισαγωγή σχολίων γίνεται με χρήση του. Σε κάθε γραμμή που θέλουμε να περιέχει σχόλια θα πρέπει να εισάγουμε το σχετικό σύμβολο. 19
Σχόλια (2) Παράδειγμα: Sub macro1() 'Αυτή η γραμμή αποτελεί παράδειγμα σχολίου End Sub 20
Μεταβλητές (1) Οι μεταβλητές αποτελούν ονομαστικές θέσεις δέσμευσης χώρου στην κύρια μνήμη του υπολογιστή. Σε κάθε μεταβλητή δίνεται ένα όνομα, το οποίο είθισται να περιγράφει αυτή τη μεταβλητή (π.χ. Income για μεταβλητή σχετική με το εισόδημα). Τα ονόματα των μεταβλητών πρέπει να ξεκινούν πάντα με λατινικό γράμμα (δηλαδή ποτέ χρήση ελληνικών) και μπορούν να ακολουθούν αριθμοί και κάτω παύλα ( π.χ. income_1). 21
Τύποι μεταβλητών (1) Ανάλογα με το τι περιεχόμενο σκοπεύουμε να δώσουμε σε μία μεταβλητή, δηλώνουμε και τον ανάλογο τύπο της. Ουσιαστικά ο τύπος δεδομένων της μεταβλητής αναφέρεται στον τρόπο αποθήκευσης των δεδομένων στην μνήμη. 22
Κυριότεροι τύποι μεταβλητών Εικόνα 2: Κυριότεροι τύποι μεταβλητών (Διδάσκων, 2014). 23
Τύποι μεταβλητών (2) Γενικότερα, στον προγραμματισμό, φροντίζουμε να δίνουμε το μικρότερο πλήθος Bytes, το οποίο να καλύπτει τις ανάγκες της μεταβλητής μας. Όσο περισσότερη κύρια μνήμη δεσμεύουμε τόσο πιο «βαρύ» γίνεται το πρόγραμμά μας. 24
Δήλωση μεταβλητών Παράδειγμα: Sub macro1() Dim x as Integer Δήλωση της μεταβλητής x ως Integer - Ακέραια End Sub Η μεταβλητές δηλώνονται πάντα στην αρχή του προγράμματός μας. Εάν δε δηλωθεί τύπος μεταβλητής, η VBA δίνει αυτομάτως τον τύπο Variant σε μία μεταβλητή. 25
Εμβέλεια μεταβλητών (1) Μεταβλητές που δηλώνονται με χρήση της Dim ή Static μέσα σε μία διαδικασία έχουν εμβέλεια μόνο εντός αυτής. Μεταβλητές που δηλώνονται με χρήση της Dim ή Private πριν την πρώτη διαδικασία έχουν εμβέλεια λειτουργικής μονάδας. Μεταβλητές που δηλώνονται με χρήση της Public πριν την πρώτη διαδικασία σε μία λειτουργική μονάδα έχουν εμβέλεια σε όλες τις λειτουργικές μονάδες. 26
Εμβέλεια μεταβλητών (2): Παράδειγμα: Τοπικές μεταβλητές Sub macro1() Dim x as Integer ή Static x as Integer End sub 27
Εμβέλεια μεταβλητών (3): Παράδειγμα: Λειτουργικής μονάδας Dim x as Integer ή Private x as Integer Sub macro1() End sub 28
Εμβέλεια μεταβλητών (4): Σε όλες τις λειτουργικές μονάδες Παράδειγμα: Public x as Integer Sub macro1() End sub 29
Σταθερές Σε αντίθεση με τις μεταβλητές, όπου αλλάζει η τιμή τους κατά τη διάρκεια εκτέλεσης του προγράμματος, στις σταθερές η τιμή παραμένει ίδια σε όλη τη διάρκεια εκτέλεσης του προγράμματος. Η δήλωση των σταθερών γίνεται με τη λέξη Const. Παράδειγμα: Sub Macro1() Const x as Integer=4 Const y as String= Hello End Sub 30
Μεταβλητές ημερομηνίας Παράδειγμα: Sub Macro1() Dim x as Date Const y as Date=#17/3/2014# End Sub 31
Πίνακες Πρόκειται για ομάδα στοιχείων ίδιου τύπου, τα οποία έχουν κοινό όνομα και η αναφορά σε κάθε ένα από αυτά γίνεται με τη χρήση ενός αριθμού-δείκτη. Οι πίνακες δεσμεύουν συνεχόμενες θέσεις στην κύρια μνήμη. 32
Δήλωση πινάκων μίας διάστασης Παράδειγμα: Dim x(0 to 10) as Integer Ή Dim x(10) as Integer Και στις 2 περιπτώσεις, ο πίνακας έχει 11 στοιχεία. Εάν θέλετε ο χαμηλός σας δείκτης να ξεκινάει από 1, θα πρέπει να προσθέσετε την ακόλουθη πρόταση πριν από οποιεσδήποτε διαδικασίες στη λειτουργική μονάδα. Option Base 1 33
Δήλωση πινάκων 2 διαστάσεων Παράδειγμα: Dim x(0 to 9, 0 to 3) as Integer Ή Dim x(9, 3) as Integer Και στις 2 περιπτώσεις δηλώνεται ένας πίνακας, ο οποίος έχει 10 γραμμές και 4 στήλες (δηλαδή 10*4 = 40 στοιχεία). Ομοίως γίνεται και η δήλωση για πίνακες περισσότερων διαστάσεων. 34
Μεταβλητές αντικειμένων Πρόκειται για μεταβλητές που αντιπροσωπεύουν ένα ολόκληρο αντικείμενο, όπως π.χ. μία περιοχή κελιών ή ένα φύλλο εργασίας. Η δήλωση των μεταβλητών αντικειμένων γίνεται με τη δεσμευμένη λέξη Range, ενώ η εκχώρηση ενός αντικειμένου σε μία μεταβλητή με τη λέξη Set. Παράδειγμα: Sub Macro1() Dim x as Range Set x = Worksheets( Φύλλο1 ).Range( A1:A3 ) x.font.bold=true End Sub 35
Ενσωματωμένες συναρτήσεις Όπως συμβαίνει σε όλες τις γλώσσες προγραμματισμού, έτσι και στην VBA υπάρχουν πολλές ενσωματωμένες συναρτήσεις. Αρκετές εξ αυτών είναι παρόμοιες με του Excel. Στα επόμενα μαθήματα θα δούμε και θα χρησιμοποιήσουμε αρκετές από αυτές. 36
Διαδικασία Πρόκειται για μία σειρά προτάσεων που βρίσκονται σε μία λειτουργική μονάδα της VBA. Υπενθυμίζεται πως σε μία λειτουργική μονάδα μπορούμε να έχουμε πολλές διαδικασίες. Στον προγραμματισμό είναι προτιμότερο να διαιρούμε τα μεγάλα μας προγράμματα σε υποπρογράμματα, δηλαδή κομμάτια κώδικα τα οποία εκτελούν αυτόνομες ενέργειες και το σύνολό τους υλοποιεί όλο το πρόγραμμα-έργο (τμηματικός προγραμματισμός). Επομένως, καλό είναι οι διαδικασίες μας να εκτελούν συγκεκριμένες, αυτόνομες, ενέργειες και το σύνολό τους να υλοποιεί τους σκοπούς της λειτουργικής μονάδας. 37
Πλεονεκτήματα υποπρογραμμάτων - διαδικασιών 1. Διευκολύνουν την ανάπτυξη του έργου. 2. Διευκολύνουν την κατανόηση και διόρθωση του έργου. 3. Απαιτούν λιγότερο χρόνο και προσπάθεια στη συγγραφή του έργου. 4. Υπάρχει η δυνατότητα να χρησιμοποιηθούν και σε άλλες γλώσσες προγραμματισμού. 38
Δήλωση μίας διαδικασίας [Private ή Public ή Static] Sub όνομα διαδικασίας (λίστα παραμέτρων) Εντολές End Sub Προαιρετικοί είναι οι χαρακτηρισμοί Private/ Public/ Static και οι παράμετροι. Private: δηλώνει ότι η διαδικασία είναι προσπελάσιμη μόνο σε άλλες διαδικασίες της ίδιας λειτουργικής μονάδας. Public: δηλώνει ότι η διαδικασία είναι προσπελάσιμη σε όλες τις διαδικασίες όλων των λειτουργικών μονάδων του φύλλου εργασίας. Static: δηλώνει ότι οι μεταβλητές της διαδικασίας διατηρούνται όταν τελειώσει η διαδικασία. 39
Δήλωση και εκτέλεση μίας διαδικασίας Σε περίπτωση όπου μία διαδικασία δε δηλωθεί ως Private ή Public ή Static, θεωρείται Public. Η διαδικασία εκτελείται με ποικίλους τρόπους. Οι συνηθέστεροι είναι: α) με κλικ στο F5, β) επιλέγοντας το κουμπί Run και γ) επιλέγοντας εκτέλεση από το παραθυρικό περιβάλλον προβολής των αποθηκευμένων διαδικασιών. Υπάρχει η δυνατότητα, όπως σε όλες τις γλώσσες προγραμματισμού, η εκτέλεση μίας διαδικασία να γίνει μέσω μίας άλλης διαδικασίας. Η εκτέλεση μίας διαδικασίας που βρίσκεται σε διαφορετικό φύλλο εργασίας μπορεί να γίνει με την εντολή Call. Παράδειγμα: Call Project1.Module1.Sub1, όπου εκτελείται η διαδικασία Sub1, η οποία βρίσκεται στη λειτουργική μονάδα Module1 του έργου Project1. 40
Ορίσματα διαδικασιών Οι διαδικασίες, σε αντίθεση με τις συναρτήσεις, δεν απαιτούν τη χρήση ορισμάτων. Ωστόσο, σε διάφορες περιπτώσεις μπορεί να βοηθήσουν στη βελτιστοποίηση του κώδικά μας. Οι διαδικασίες δέχονται ως ορίσματα: α) μεταβλητές, β) σταθερές, γ) πίνακες και δ) αντικείμενα. 41
Συναρτήσεις Πρόκειται για διαδικασία η οποία εκτελεί υπολογισμούς κι επιστρέφει μία τιμή, όπως οι ενσωματωμένες συναρτήσεις του Excel. Οι συναρτήσεις μπορούν να χρησιμοποιηθούν όπως ακριβώς και οι ενσωματωμένες συναρτήσεις του Excel. Επιπλέον, μπορούν να χρησιμοποιηθούν ως μέρος μίας έκφρασης σε μία διαδικασία VBA. Η δημιουργία συναρτήσεων επεκτείνει τις δυνατότητες του Excel και δεν περιορίζει τον προγραμματιστή στην αποκλειστική χρήση των ενσωματωμένων συναρτήσεων. Επομένως, ο προγραμματιστής μπορεί να δημιουργήσει συναρτήσεις που να ταιριάζουν ακριβέστερα στο έργο του. Πηγή: Walkenbach (2011) 42
Δήλωση μίας συνάρτησης (1) [Private ή Public ή Static] Function όνομα_συνάρτησης (λίστα ορισμάτων) [As τύπος_συνάρτησης] Εντολές [όνομα_συνάρτησης = έκφραση] End Function Προαιρετικοί είναι οι χαρακτηρισμοί Private/ Public/ Static, τα ορίσματα, o τύπος της συνάρτησης. Private: δηλώνει ότι η Function είναι προσπελάσιμη μόνο σε άλλες διαδικασίες της ίδιας λειτουργικής μονάδας. Public: δηλώνει ότι η Function είναι προσπελάσιμη σε όλες τις διαδικασίες όλων των λειτουργικών μονάδων των ενεργών έργων. 43
Δήλωση μίας συνάρτησης (2) Static: δηλώνει ότι οι μεταβλητές της Function διατηρούνται όταν τελειώσει η διαδικασία. Τύπος: ο τύπος δεδομένων που επιστρέφει η διαδικασία Function. ΠΡΟΣΟΧΗ!: Πρέπει να εκχωρείται πάντα μέσα στο «σώμα» της συνάρτησης τιμή στο όνομα της συνάρτησης, τουλάχιστον μία φορά. Σε περίπτωση όπου μία συνάρτηση δε δηλωθεί ως Private ή Public ή Static, θεωρείται Public. Ένα μία συνάρτηση δηλωθεί ως Private, δε θα μπορεί να εμφανιστεί από το μενού επιλογής εισαγωγής συνάρτησης του Excel, μαζί δηλαδή με τις ενσωματωμένες συναρτήσεις. 44
Εκτέλεση συνάρτησης Η συνάρτηση εκτελείται με τους ακόλουθους τρόπους: 1. Καλούμενη από άλλη διαδικασία. 2. Μέσα από το κεντρικό μενού εισαγωγής συναρτήσεων του Excel. 3. Χρησιμοποιώντας αυτήν σε έναν τύπο για τον καθορισμό υπό όρους μίας ενέργειας. 4. Καλούμενη από το παραθυρικό περιβάλλον Immediate. Πηγή: Walkenbach (2011) 45
Ορίσματα συνάρτησης (1) Τα ορίσματα μίας συνάρτησης μπορεί να είναι: Μεταβλητές. Πίνακες. Σταθερές Συγκεκριμένες τιμές. Εκφράσεις. Ωστόσο, είθισται να είναι μεταβλητές. Κάθε συνάρτηση μπορεί να δεχθεί από 1 έως 60 ορίσματα. Πηγή: Walkenbach (2011) 46
Ορίσματα συνάρτησης (2) Υπάρχουν, όμως, και περιπτώσεις όπου συναρτήσεις δεν έχουν ορίσματα, όπως είδαμε και σε ενσωματωμένες συναρτήσεις του Excel (π.χ. η now() ). Άλλες να έχουν συνδυασμό υποχρεωτικών και προαιρετικών ορισμάτων. 47
Συναρτήσεις χωρίς ορίσματα Παράδειγμα: Function testa() As Single testa = Round() End Function 48
Συναρτήσεις με ένα όρισμα Παράδειγμα: Function testb(x As Integer) As Integer testb = x * 10 End Function 49
Συναρτήσεις με δύο ορίσματα Παράδειγμα: Function testc(x, y As Integer) As Integer testc = x * y End Function 50
Συναρτήσεις με προαιρετικά ορίσματα Στο όρισμα που θεωρείται προαιρετικό, θα πρέπει να δηλωθεί και η δεσμευμένη λέξη Optional. Παράδειγμα: Function testd(x, y As Integer, Optional z As Single) As Single testd = x + y + z End Function 51
Βιβλιογραφία Χαριτούδη Γ. (2006). Visual Basic. ISBN 960-630-767-0. Walkenbach, J. (2011). Εγχειρίδιο Προγραμματισμού Microsoft Excel 2010 με VBA. Εκδόσεις Μ. Γκιούρδας, Αθήνα. 52
Τέλος Ενότητας