5. MΑΚΡΟΕΝΤΟΛΕΣ. περιέχουν ένα σύνολο ενεργειών-κινήσεων-εντολών οι οποίες εκτελούνται όλες µαζί όταν εκτελείται η µακροεντολή που τις περιέχει. συντάσσονται : sub όνοµα µακροεντολής().....end sub. Οι µακροεντολές βασικά αποτελούνται από αντικείµενα και ενέργειες. Το αντικείµενο µπορεί να είναι µια περιοχή (range), φύλλο εργασίας (sheets), βιβλίο εργασίας(workbooks) κ.λ.π. υπάρχουν περισσότερα από 100 είδη αντικειµένων. Οποιαδήποτε ενέργεια την οποία εκτελεί ένα οποιοδήποτε αντικείµενο λέγεται µέθοδος. Ο αριθµός των µεθόδων που υποστηρίζει ένα αντικείµενο εξαρτάται από το αντικείµενο. π.χ. το αντικείµενο range υποστηρίζει 800 διαφορετικές µεθόδους. Η δηµιουργία Μακροεντολής γίνεται µε δύο τρόπους : Α)Mε την επιλογή Εργαλεία \ Μακροεντολή \Καταγραφή νέας µακροεντολής (tools \macro\record new macro) δηµιουργείται µια µακροεντολή στην οποία καταγράφονται όλες οι ενέργειες που θα εκτελέσουµε από την στιγµή που θα ενεργοποιήσουµε την παραπάνω επιλογή. Με την ενεργοποίηση της επιλογής ενεργοποιείται ένα πλαίσιο διαλόγου µε το οποίο δίνουµε το όνοµα µακροεντολής (Macro Name) την περιγραφή (Description), το Πλήκτρο συντόµευσης. Για να αρχίσει η καταγραφή επιλέγουµε ΟΚ Για να σταµατήσει επιλέγουµε Εργαλεία \ Μακροεντολή \ ιακοπή Καταγραφής Β) Mε την επιλογή Εργαλεία \ Μακροεντολή αν πληκτρολογήσουµε το όνοµα της µακροεντολής ενεργοποιείται η επιλογή δηµιουργία και δηµιουργείται η µακροεντολή. Mε την επιλογή Εργαλεία \ Μακροεντολή και αφού επιλέξουµε τη µακροεντολή µπορούµε να κάνουµε επεξεργασία του κώδικα της µακροεντολής.,διαγραφή της µακροεντολής και από τις επιλογές να αλλάξουµε το πλήκρο συντόµευσης καθώς και την περιγραφή της µακροεντολής. Μάθηµα 1-54- Χατζάκης Ηλίας
Η εκτέλεση Μακροεντολής γίνεται α) Με την Επιλογή Εργαλεία \ Μακροεντολή (tools\macro\) και στη συνέχεια επιλέγουµε τη µακροεντολή και µετά επιλέγουµε εκτέλεση(run). β)με τα πλήκτρα συντόµευσης που έχουµε ορίσει(ctrl ή Ctrl+Shift και το χαρακτήρα) γ) επίσης µια µακροεντολή µπορεί να εκτελείται µε το πάτηµα κάποιου πλήκτρου. Για να γίνει αυτό εµφανίζουµε τα εργαλεία που µπορούµε να εισάγουµε σε µία φόρµα (προβολή\γραµµές εργαλείων\ φόρµες) επιλέγουµε το εργαλείο κουµπί και το δηµιουργούµε πάνω στο φύλλο εργασίας. Αν κάνουµε δεξί κλίκ πάνω στο κουµπί που µόλις δηµιουργήσαµε µπορούµε να το αντιστοιχίσουµε σε κάποια µακροεντολή επίσης µπορούµε να του αλλάξουµε την ετικέτα. δ) Το παραπάνω γίνεται και µε αντιστοίχιση της µακροεντολής σε κουµπί εντολής. Για να γίνει αυτό εµφανίζουµε τα αντικεργαλειοθήκη στοιχείων ελέγχου (προβολή\ γραµµές εργαλείων \ εργαλειοθήκη στοιχείων ελέγχου) και εισάγουµε το κουµπί εντολής στο φύλλο εργασίας. Για να επεξεργαστούµε το κουµπί εντολής πρέπει να εχουµε απενεργοποιήσει τις µακροεντολές. Αν κάνουµε δεξί κλίκ πάνω στο κουµπί που µόλις δηµιουργήσαµε εµφανίζονται οι γνωστές επιλογές όπως αντιγραφή, αποκοπή και επικόλληση καθώς και η επιλογή ιδιότητες απο οπου µπορούµε να αλλάξουµε τις διάφορες ιδιότητες του κοµβίου(ετικέτα(caption),όνοµα.(name)κ.λ.π.) Επίσης υπάρχει η επιλογή προβολή κώδικα όπου εµφανίζεται ο κώδικας που εκετελείται όταν κάνουµε κλίκ πάνω στο κουµπί και έχει τη µορφή Private Sub όνοµα_κοµβίου_click() Application.Run "όνοµα βιβλίου εργασίας.xls!όνοµα µακροεντολής" Παράδειγµα Private Sub Button1_Click() Application.Run "game.xls!game" o παραπάνω κώδικας ενεργοποιείται µε το πάτηµα του κοµβίου Button1 και εκτελείται η µακροεντολή game που βρίσκεται στο βιβλίο εργασίας game.xls Μάθηµα 1-55- Χατζάκης Ηλίας
ΙΑΦΟΡΕΣ ΜΑΚΡΟΕΝΤΟΛΕΣ. sheets("sheet1") Αναφερόµαστε στο φύλλο εργασίας sheet1 sheets("sheet1").select ή sheets("sheet1").activate Τοποθετούµαστε στο φύλλο εργασίας sheet1. Tο sheets είναι το αντικείµενο και το select και το activate είναι ενέργειες πάνω στο αντικείµενο Sheets. Άλλες ενέργειες που µπορούµε να χρησιµοποιήσουµε είναι η copy µε την οποία δηµιουργείται ένα νέο βιβλίο εργασίας και µέσα σε αυτό αντιγράφεται το φύλλο που αναφέρουµε, η delete µε την οποία διαγράφουµε το αναφερόµενο φύλλο, η name δίνουµε νέο όνοµα στο αναφερόµενο φύλλο εργασίας ενώ για τη δηµιουργία φύλλου εργασίας χρησιµοποιούµε την Sheets.Add Παράδειγµα Η παρακάτω µακροεντολή δηµιουργεί ένα φύλλο εργασίας ανάµεσα στο φύλλο2 και φύλλο3 και του δίνει το όνοµα Φύλλο4 και στη συνέχεια του δίνει νέο όνοµα new sub newsheet() Sheets("Φύλλο2").Select Sheets.Add Sheets("Φύλλο4").Select Sheets("Φύλλο4").Name = "new" end sub Η αναφορά σε κάποιο του φύλλου εργασίας που έχουµε τοποθετηθεί γίνεται µε τα παρακάτω range("όνοµα κελιού"), Cells(αριθµός γραµµής, αριθµός στήλης) π.χ. Cells(1, 8) =Cells(1, 8) + 1 Αν θέλουµε να αναφερθούµε σε κάποιο κελί που βρίσκεται ν γραµµές πιο κάτω και µ στήλες πιο δεξιά χρησιµοποιούµε την offset(ν,µ) π.χ. selection.offset(6,1) Μετακινούµαστε από τη θέση που είµαστε 6 γραµµές και 1 κολώνα. Η αναφορά στο ενεργό κελί γίνεται µε την activecell π.χ. activecell= "Άννα" µε τη επιλογή range( περιοχή ) αναφερόµαστε σε περιοχή παράδειγµα range( a1:b5 ). H Cells χωρίς παραµέτρους γραµµής και κολώνας αναφέρεται σε ολόκληρο το φύλλο εργασίας Μερικές από τις ενέργειες που µπορούµε να χρησιµοποιήσουµε στα αντικείµενα range και cells είναι η select,activate όπως και προηγουµένως η copy,cut,pastespecial µε τις οποίες κάνουµε αντιγραφή,αποκοπή και επικόλληση αντιστοίχως, η delete µε την οποία διαγράφουµε κ.λ.π Μάθηµα 1-56- Χατζάκης Ηλίας
Παραδείγµατα 1)Με την παρακάτω µακροεντολή επιλέγουµε το φύλλο εργασίας Φύλλο1 και aντιγράφουµε όλα τα περιεχόµενα του στη συνέχεια επιλέγουµε το φύλλο εργασίας new όπου κάνουµε επικόληση. Sub cp_sheet() Sheets("Φύλλο1").Select Range("A:IV").Select ή Cells.Select Selection.Copy Sheets("new").Select Range("a1").PasteSpecial 2)Με την παρακάτω µακροεντολή τοποθετούµαι τα ονόµατα των µηνών στο κελί που βρίσκοµαι και στα επόµενα της ίδιας στήλης. Sub Μήνες() ActiveCell. = "Ιανουάριος" Selection.Offset(1, 0) = "Φεβρουάριος"... Selection.Offset(10, 0) = "Νοέµβριος" Selection.Offset(11, 0) = " εκέµβριος" 3)Η παρακάτω µακροεντολή τοποθετεί τους µήνες στα κελιά Α1...Α12 Sub Μήνες2() Range("A1") = "Ιανουάριος" Range("A2")="Φεβρουάριος" Range("A3") = "Μάρτιος"... Range("A11") = "Νοέµβριος" Range("A12") = " εκέµβριος" 4)Η παρακάτω µακροεντολή τοποθετεί τυχαίους αριθµούς στη περιοχή A1:C8 καθώς και το µέσο όρο αυτων στο κελί C10 Sub random() Range("A1:C8") = ("=rand()") Range("A10") = ("µέσος όρος :") Range("C10") = ("=average(a1:c8)") Μάθηµα 1-57- Χατζάκης Ηλίας
Μορφοποίηση κελιών µε µακροεντολές Η µορφοποίηση γίνεται στην περιοχή ή στα κελιά που έχουµε επιλέξει χρησιµοιώντας την ιδιότητα Font Η χρήση της και οι διάφορες επιλογές είναι κατανοητές από τα παραδείγµατα που ακολουθούν Selection.Font.Name = "Courier New" Selection.Font.FontStyle = "Κανονικά" Selection.Font.Size = 18 Selection.Font.Strikethrough = False Selection.Font.Superscript = False Selection.Font.Subscript = False Selection.Font.OutlineFont = False Selection.Font.Shadow = False Selection.Font.Underline = xlunderlinestylesingle Selection.Font.ColorIndex = 6 Για να επιλέξουµε χρώµα και τον τύπο γεµίσµατος µιας περιοχής χρησιµοποιούµαι την Interior Π,χ. Selection.Interior.ColorIndex = 4 Selection.Interior.Pattern = xlsolid Με την colorindex όπου αναφέρεται επιλέγουµε τον κωδικό χρώµατος και είναι 1 µαύρο, 2 άσπρο, 3 κόκκινο, 4 πράσινο, 5 µπλέ, 6 κίτρινο κ.λ.π. Με τις εντολές with.... end with ορίζουµε µια σειρά από ιδιότητες που ανήκουν στο αντικείµενο. Παραδείγµατα Στο προηγούµενο παράδειγµα µε το Font αντί να γράφω σε κάθε γραµµή Selection.Font µε τη χρήση του With γράφεται ως εξής : With Selection.Font.Name = "Courier New".FontStyle = "Κανονικά".Size = 18.Strikethrough = False.Superscript = False.Subscript = False.OutlineFont = False.Shadow = False.Underline = xlunderlinestylesingle.colorindex = 6 End With Μάθηµα 1-58- Χατζάκης Ηλίας
β) with sheets("sheet1")...end With Όποια κελιά αναφέρουµε µεταξύ του with.. end with είναι κελιά του Sheet1 και δεν χρειάζεται και δεν αναφέρουµε το φύλλο Dim όνοµα µεταβλητής As είδος. Ορίζουµε µεταβλητές. Το είδος τη µεταβλητής µπορεί να είναι Boolean Integer κ.α. π.χ. dim rownum As integer For µεταβλητή = αρχική τιµή To τελική τιµή Step βήµα Εντολές... Next µεταβλητή Οι εντολές που υπάρχουν µεταξύ του for και next εκτελούνται για κάθε τιµή της µεταβλητής δηλαδή η µεταβλητή παίρνει την αρχική τιµή και εκτελούνται οι εντολές µετά η µεταβλητή γίνεται όσο ήτανε + το βήµα και εκτελούνται πάλι οι εντολές Η διαδικασία επαναλαµβάνεται µέχρι η µεταβλητή να γίνει µεγαλύτερη της τελικής τιµής οπότε το πρόγραµµα συνεχίζει στην εντολή µετά το next Παράδειγµα Η παρακάτω µακροεντολή βάζει την προπαίδεια των αριθµών από το 1 έως το 10 στην περιοχή Α1:J10 Sub fill() Dim i, k As Integer For i = 1 To 10 Step 1 For k = 1 To 10 Step 1 Cells(k, i) = i * k Next k Next i Μάθηµα 1-59- Χατζάκης Ηλίας
If συνθήκη Then Εάν η συνθήκη είναι αληθής εκτελούνται....... οι εντολές πριν το else. Αν δεν ισχύει else εκτελούνται οι εντολές µετά το else. Και..... στις δυο περιπτώσεις η εκτέλεση συνεχίζεται end if µετά το end ΠΑΡΑ ΕΙΓΜΑ Η παρακάτω µακροεντολή ελέγχει τα περιεχόµενα των κελιών της περιοχής Α1:J10 Και αλλάζει το χρώµα των αριθµών σε κόκκινο αν είναι αρνητικοί αλλιώς γίνεται πράσινο Sub color() Dim i, k As Integer For i = 1 To 10 Step 1 For k = 1 To 10 Step 1 If Cells(k, i) < 0 Then Cells(k, i).font.colorindex = 3 Else Cells(k, i).font.colorindex = 4 End If Next k Next i While συνθήκη Εντολές... Wend Οι εντολές που υπάρχουν µεταξύ του while και wend εκτελούνται µέχρι η συνθήκη που είναι δίπλα στο while είναι αληθής δηλαδή ελέγχεται η συνθήκη και άν είναι αληθής τιµή και εκτελούνται οι εντολές µεταξύ του while και wend και στη συνέχεια ξαναελέγχεται η συνθήκη και αν είναι αληθής εκτελούνται οι εντολές Η διαδικασία επαναλαµβάνεται µέχρι να η συνθήκη να γίνει ψευδής οπότε το πρόγραµµα συνεχίζει στην εντολή µετά το wend Μάθηµα 1-60- Χατζάκης Ηλίας
ΠΑΡΑ ΕΙΓΜΑ H παρακάτω µακροεντολή τοποθετεί τη µεγαλύτερη και τη µικρότερη τιµή που που υπάρχει στην στήλη Α στα κελιά b1, b2 αντίστοιχα. Επίσης τα κελιά της στήλης Α που έχουν τη µεγαλύτερη τιµή ή τη µικρότερη τιµή παίρνουν χρώµα γεµίσµατος µπλε ή κόκκινο αντίστοίχως. H διαδικασία της αλλαγής χρώµατος γίνεται µέχρι να βρεθεί το πρώτο κενό κελί. Sub maxim() Dim IND, I As Integer I = 0 Range("b1") = "=MAX(a:a)" Range("b2") = "=min(a:a)" Range("a1").Select While (Not (ActiveCell.Offset(I, 0) = "")) If ActiveCell.Offset(I, 0) = Range("b1") Then IND = 5 Else If ActiveCell.Offset(I, 0) = Range("b2") Then IND = 3 Else IND = 2 End If End If With Selection.Offset(I, 0).Interior.ColorIndex = IND End With I = I + 1 Wend Μάθηµα 1-61- Χατζάκης Ηλίας
ΒΙΒΛΙΟΓΡΑΦΙΑ 1. EXCEL ΕΛΛΗΝΙΚΟΣ Ο ΗΓΟΣ ΓΙΑ WINDOWS 95 ΓΚΙΜΠΕΡΙΤΗΣ ΒΑΓΓΕΛΗΣ ΝΙΚΟΛΑΚΟΠΟΥΛΟΣ ΓΙΑΝΝΗΣ ΕΚ ΟΣΕΙΣ Α. ΤΖΙΟΛΑ Α. Ε. 2. DATA ANALYSIS USING MICROSOFT EXCEL MICHAEL R. MIDDLETON DUXBURY PRESS 3. ΕΛΛΗΝΙΚΟ EXCEL 97 ΕΝΑ ΒΗΜΑ ΤΗ ΦΟΡΑ ALLAN NEIBAUER 4. MICROSOFT EXCEL FOR WINDOWS 95 ΒΗΜΑ ΠΡΟΣ ΒΗΜΑ Microsoft Press ΚΛΕΙ ΑΡΙΘΜΟΣ Μάθηµα 1-62- Χατζάκης Ηλίας