Εμφάνιση ενός μόνο μηνύματος
  #6  
Παλιά 22-09-10, 20:46
kapetang Ο χρήστης kapetang δεν είναι συνδεδεμένος
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.674
Προεπιλογή

Καλησπέρα σε όλους

Θα ήθελα να μοιραστώ και με τα υπόλοιπα μέλη του φόρουμ κάτι που έμαθα από την ενασχόληση με το πρόβλημα που έθεσε ο Χρήστος, επειδή το θεωρώ χρήσιμο.
Αφορά την αποτίμηση των συναρτήσεων που χρησιμοποιούνται ως προέλευση στοιχείου ελέγχου σε μία φόρμα.
Σύμφωνα με το πρόβλημα η τιμή του πλαισίου κειμένου a6 εξαρτάται από τις τιμές των a1, a2, a3, a4, a5.
Αρχικά στη μονάδα κώδικα της φόρμας δημιούργησα μία συνάρτηση (SetValue), χωρίς ορίσματα (δε χρειάζονταν) και τη χρησιμοποίησα ως προέλευση του πλαισίου κειμένου a6 , πιστεύοντας ότι, όταν γίνονταν αλλαγές στα πλαίσια κειμένου a1, a2, a3, a4, a5, θα γίνονταν αυτόματα (από την access) νέος υπολογισμός της συνάρτησης και το α6 θα εμφάνιζε τη σωστή τιμή.
Δυστυχώς αυτό δε γίνονταν και έτσι αναγκάστηκα να προσθέσω επιπλέον κώδικα σε αντιστοιχία με κάποια συμβάντα.
Τελικά διαπίστωσα ότι συνάρτηση επαναϋπολογίζεται αυτόματα, όταν αλλάζουν τα πλαίσια κειμένου, μόνο όταν αυτά είναι παράμετροί της.
Έτσι έδωσα στη συνάρτηση SetValue την παρακάτω μορφή:
Κώδικας:
Function SetValue(ParamArray x() As Variant) As Variant
    Dim i As Integer
    SetValue = Null
    For i = LBound(x) To UBound(x)
        If Not IsNull(x(i)) Then
            SetValue = x(i)
            Exit For
        End If
    Next
End Function
Στην προέλευση στοιχείου ελέγχου του a6 θα πρέπει να βάλουμε:
=SetValue([a5];[a4];[a3];[a2];[a1]).
Γενικά μπορούμε να χρησιμοποιήσουμε ως παραμέτρους όσα χειριστήρια θέλουμε αρκεί να τα γράψουμε με τη σειρά που επιθυμούμε να ψάχνονται.
Στο αρχείο που επισυνάπτω υπάρχει αυτή η υλοποίηση.

Φιλικά/Γιώργος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb accSetValueNew.mdb (128,0 KB, 18 εμφανίσεις)
Απάντηση με παράθεση