Třída Evaluator

 

Třída slouží pro vyhodnocování výrazů uložených v řetězcích. Instanci lze získat pouze voláním metody Vario.VytvoritEvaluator(SUdalostiVarioEval). Parametr nastavuje vlastnost FireVarioEvalEvent.

Metody

AddObject(Value) Metoda pro vložení instance třídy s rozšiřujícími funkcemi pro vyhodnocování výrazů. Funkce musí být veřejné a vracet pouze primitivní typy.
Evaluate(sExpression, Data) Vrací hodnotu, která odpovídá vyhodnocení výrazu sExression s hodnotami parametrů uložených v Data. Data může být VBA.Collection, DAO.Recordset, ADODB.Recordset nebo jakýkoliv jiný typ, který má výchozí vlastnost rozhraní s podpisem <název vlastnosti/funkce>(string/variant) as <primitivní typ>/variant

 

Vlastnosti

FireVarioEvalEvent Pokud je nastaveno False (výchozí), proběhne při zavolání metody Evaluate vyhodnocení pouze v dané instanci, pokud je vlastnost nastavena na True, vyvolá se událost Eval na objektu Vario. Když je událost zpracována a označena za vyhodnocenou, použije se jako návratová hodnota výsledek z události. Jinak proběhle zpracování tak jako v prvním případě.

 

Příklad 1

Dim c As New Collection
c.Add #8/16/2007#, "Datum"

Dim e As Evaluator
Set e = Vario.VytvoritEvaluator()
Debug.Print e.Evaluate("Format(DateSerial(Year([Datum]) -1,Month([Datum]),Day([Datum])), ""yyyy-mm-dd"")", c)
'vrátí 2006-08-16

Debug.Print e.Evaluate("8 and 15", c)

'vrátí 8
Debug.Print e.Evaluate("null", c)
'vrátí Null

Příklad 2

'Příklad třídy s rozšiřující funkcí

Public Class MojeSuperTrida

    Public Function SuperFunkce(ByVal sText As String) As String

        Dim i As Long
        For i = 1 To Len(sText) Step 2
            Mid(sText, i, 1) = UCase(Mid(sText, i, 1))
        Next
 

        SuperFunkce = sText

    End Function

End Class

 

'Použití

Dim c As New Collection
c.Add "aaaaaa", "a6"

Dim e As Evaluator
Set e = Vario.VytvoritEvaluator()
e.addObject New MojeSuperTrida

Debug.Print e.Evaluate("SuperFunkce(""abcdefghijklmnop"")", null) 'vrátí AbCdEfGhIjKlMnOp

Debug.Print e.Evaluate("SuperFunkce([a6])", c) 'vrátí AaAaAa