Μάθετε την Access με Απλές Ερωτήσεις – Μέρος 7ο – Μακροεντολές
Συναρτήσεις και Υπορουτίνες
Στη VBA υπάρχουν, όπως και στις άλλες γλώσσες προγραμματισμού, δύο είδη διαδικασιών : οι Συναρτήσεις (Functions) και οι Υπορουτίνες (Subroutines). Και οι τύποι διαδικασιών μπορούν να δεχθούν παραμέτρους. Οι συναρτήσεις μπορούν να επιστρέψουν μια τιμή δεδομένων, ενώ οι υπορουτίνες όχι.
Function
Μπορούμε να χρησιμοποιήσουμε μια εντολή Function για να δηλώσουμε μια νέα συνάρτηση, τις παραμέτρους που θα δέχεται, τον τύπο μεταβλητής που θα επιστρέφει και τον κώδικα που θα εκτελεί τη διαδικασία συνάρτησης.
Θα πρέπει να δηλώσουμε τον τύπο δεδομένων όλων των ορισμάτων που μπορεί να δεχθεί η συνάρτηση στη λίστα παραμέτρων της. Αν χρησιμοποιήσουμε τη δεσμευμένη λέξη ByVal για να δηλώσουμε ένα όρισμα, τότε αυτή θα είναι κλήση με τιμή. Δηλαδή, οποιαδήποτε αλλαγή κάνουμε σ’ ένα όρισμα ByVal μέσα στη συνάρτηση, δεν θα αλλάξει την αρχική μεταβλητή.
Αν χρησιμοποιήσουμε τη δεσμευμένη λέξη ByRef για να δηλώσουμε ένα όρισμα, τότε αυτή θα είναι κλήση με αναφορά. Δηλαδή, οποιαδήποτε αλλαγή κάνουμε σ’ ένα όρισμα ByRef μέσα στη συνάρτηση, θα αλλάξει και την αρχική μεταβλητή.
Μπορούμε να χρησιμοποιήσουμε την εντολή Exit Function σε οποιοδήποτε σημείο της συνάρτησης, για να βγούμε από τη συνάρτηση ομαλά και να επιστρέψουμε στη διαδικασία κλήσης.
Για παράδειγμα, για να δημιουργήσουμε μια συνάρτηση με όνομα MyFunction που θα δέχεται ένα ακέραιο και ένα αλφαριθμητικό όρισμα και θα επιστρέφει μια τιμή διπλής ακρίβειας, γράφουμε :
Function MyFunction (intArg1 As Integer, strArg2 As String) As Double <εντολές συνάρτησης> End Function Sub
Μπορούμε να χρησιμοποιήσουμε μια εντολή Sub για να δηλώσουμε μια νέα υπορουτίνα, τις παραμέτρους που θα δέχεται και τον κώδικά της.
Μπορούμε να χρησιμοποιήσουμε την εντολή Exit Sub σε οποιοδήποτε σημείο της υπορουτίνας, για να βγούμε από την υπορουτίνα ομαλά και να επιστρέψουμε στη διαδικασία κλήσης.
Για παράδειγμα, για να δημιουργήσουμε μια υπορουτίνα με όνομα MySub που θα δέχεται δύο αλφαριθμητικά ορίσματα, αλλά θα μπορεί να τροποποιήσει μόνο το δεύτερο, γράφουμε :
Sub MySub (ByVal strArg1 As String, ByRef strArg2 As String) <εντολές υπορουτίνας> End Sub
Έλεγχος της Ροής των Εντολών
Call
Μεταφέρει τον έλεγχο σε μια υπορουτίνα.
π.χ.
Call MySub (intMyInteger, curPrice * intQty)
Do … Loop
Εκτελεί ένα σύνολο εντολών πολλές φορές μέχρις ότου γίνει ψευδής ή αληθής μια συνθήκη. Δέχεται και τις δύο εκφράσεις While και Until, τις οποίες μπορούμε να βάλουμε στην αρχή ή στο τέλος του βρόχου.
π.χ.
Do Until rcdClubs.EOF <εντολές διαδικασίας> rcdClubs.MoveNext Loop
For … Next
Εκτελεί ένα σύνολο εντολών συγκεκριμένες φορές.
π.χ.
For intI = 0 To 4 Debug.Print dbEntSched.QueryDefs(intI).Name Next intI
For Each … Next
Εκτελεί ένα σύνολο εντολών για κάθε στοιχείο μιας συλλογής ή μήτρας.
π.χ.
For Each qdf In dbEntSched.QueryDefs Debug.Print qdf.Name Next qdf
GoTo
Πηγαίνει, χωρίς περιορισμό, σε κάποια άλλη εντολή.
π.χ.
GoTo SkipOver
If … Then … Else
Εκτελεί κάποιες εντολές ανάλογα με την τιμή που επιστρέφει μια συνθήκη.
π.χ.
Dim strMyString As String, strFirst As String, intVal As Integer strFirst = Ucase$(Mid$(strMyString, 1, 1)) If strFirst >= ‘A’ And strFirst <= ‘F’ Then intVal = 1 ElseIf strFirst >= ‘G’ And strFirst <= ‘N’ Then intVal = 2 ElseIf strFirst >= ‘O’ And strFirst <= ‘Z’ Then intVal = 3 Else intVal = 0 End If
Select Case
Εκτελεί εντολές υπό συνθήκη, με βάση το αποτέλεσμα της σύγκρισης της τιμής μιας παράστασης μ’ έναν κατάλογο ή ένα εύρος τιμών.
π.χ.
Dim strMyString As String, intVal As Integer Select Case Ucase$(Mid$(strMyString, 1, 1)) Case ‘A’ To ‘F’ intVal = 1 Case ‘G’ To ‘N’ intVal = 2 Case ‘O’ To ‘Z’ intVal = 3 Case Else intVal = 0 End Select
Stop
Αναστέλλει προσωρινά την εκτέλεση μιας διαδικασίας.
While … Wend
Εκτελεί συνέχεια ένα σύνολο εντολών για όσο διάστημα είναι αληθής μια συνθήκη.
π.χ.
While Not rcdClubs.EOF <εντολές διαδικασίας> rcdClubs.MoveNext Wend
With
Είναι παρόμοια με την εντολή With της Pascal.
π.χ.
Dim rst As Recordset, db As Database Set db = CurentDb() Set rst = db.OpenRecordset(‘MyTable’, dbOpenDynaset, dbAppendOnly) With rst .Addnew ![FieldOne] = ‘1’ ![FieldTwo] = ‘John’ ![FieldThree] = ‘Viescas’ .Update .Close End With
Εκτέλεση Ενεργειών Μακροεντολών
Στη VBA μπορούμε να εκτελέσουμε τις περισσότερες από τις ενέργειες μακροεντολών. Για όσες, όμως, ενέργειες μακροεντολών δεν μπορούν να εκτελεστούν μέσα σε μια διαδικασία της VBA, υπάρχουν ισοδύναμες εντολές της VBA. Για να εκτελέσουμε μια ενέργεια μακροεντολής μέσα από τη VBA, χρησιμοποιούμε το αντικείμενο DoCmd.
DoCmd
Π.χ. για να ανοίξουμε τη φόρμα Customer στην Άποψη Φόρμας για να εισαγάγουμε δεδομένα, γράφουμε :
DoCmd.OpenForm ‘Customer’, acNormal, , ,acAdd
Για να κλείσουμε τη φόρμα Supplier, γράφουμε :
DoCmd.Close acForm, ‘Supplier’
Αν βρήκατε το άρθρο μας χρήσιμο, θέλετε να μείνετε ενημερωμένοι για όλα τα νέα στο τομέα της τεχνολογίας καθώς και σε χρηστικά άρθρα, βοηθήστε μας κάνοντας like στην σελίδα μας στο Facebook πατώντας εδώ