Εμφάνιση ενός μόνο μηνύματος
  #8  
Παλιά 18-04-11, 11:16
Το avatar του χρήστη Tasos
Tasos Ο χρήστης Tasos δεν είναι συνδεδεμένος
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.035
Προεπιλογή

Καλημέρα Δημήτρη!
Έχουμε πολύ δουλειά μπροστά μας μ αυτό που ξεκίνησες!!

Στο σημείο αυτό θα ήθελα να προσθέσω κι εγώ ένα λιθαράκι με τη χρήση του αντικειμένου WizHook (βλ. συνημμένο).

Το WizHook δεν υποστηρίζεται επίσημα, υπάρχει όμως σε όλες τις εκδόσεις Access ξεκινώντας από την Acc 2000.
Ωστόσο μπορεί να βρει κανείς σχετική βοήθεια που όμως βασίζεται στα πειράματα του εκάστοτε συγγραφέα.
Με τον τρόπο αυτό δεν είναι αναγκαία η χρήση αγκυλών "[ ]" στο πεδίο όπου πληκτρολογείται η έκφραση πχ:

Η έκφραση στο πεδίο EQUATION είναι: "iif(a>d,date(),log(a^c))+exp(d)+d*b+c+1.6"

Στο υπολογισμένο πεδίο έχουμε τον τύπο: =calc([EQUATION])

Στη λειτουργική μονάδα της φόρμας:

Κώδικας:
Option Compare Database
Option Explicit

Function Evaluate(mystr As String) As Variant
    Dim C As String
    While InStr(1, mystr, "[", 0) > 0
        C = Mid(mystr, InStr(1, mystr, "[", 0), InStr(1, mystr, "]", 0) - InStr(1, mystr, "[", 0) + 1)
        mystr = Replace(mystr, C, Me.Controls(C).Value)
    Wend
    Evaluate = Eval(mystr)
End Function

Function Calc(strInput As String) As Variant
    Dim strOutput As String, x, Parse_Flags As Long
    strOutput = ""
    Parse_Flags = 16&
    WizHook.Key = 51488399
    If WizHook.TranslateExpression(strInput, strOutput, Parse_Flags, 0&) = True Then
        x = Evaluate(strOutput)
        Calc = x
    Else
        Calc = "???"
    End If
End Function
Καλή συνέχεια!

Τάσος
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb Calc_equation(WizHook).mdb (204,0 KB, 52 εμφανίσεις)
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση