Funkcja Eval

Dotyczy
Access dla Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Funkcji Eval można użyć do obliczenia wyrażenia, którego wynikiem jest ciąg tekstowy lub wartość liczbowa.

Możesz skonstruować ciąg, a następnie przekazać go do funkcji Eval tak, jakby ciąg był rzeczywistym wyrażeniem. Funkcja Eval oblicza wyrażenie ciągu i zwraca jego wartość. Na przykład zwraca Eval("1 + 1") wartość 2.

Jeśli przekażesz do funkcji Eval ciąg, który zawiera nazwę funkcji, funkcja Eval zwróci wartość zwróconą przez funkcję. Na przykład zwraca Eval("Chr$(65)") wartość "A".

Składnia

Eval(stringexpr)

Argument stringexpr jest wyrażeniem, którego wynikiem jest ciąg tekstu alfanumerycznego. Na przykład seria_ciągów może być funkcją zwracającą ciąg lub wartość liczbową. Może też być odwołaniem do kontrolki w formularzu. Argument stringexpr musi być wartością łańcuchową lub liczbową; nie może zostać obliczony jako obiekt programu Microsoft Access.

Uwaga

Poniższe przykłady przedstawiają sposób użycia tej funkcji w module języka Visual Basic for Applications (VBA). Aby uzyskać dodatkowe informacje na temat pracy w języku VBA, wybierz pozycję Dokumentacja dewelopera z listy rozwijanej obok przycisku Wyszukaj i wprowadź odpowiednie terminy w polu wyszukiwania.

Uwaga

Jeśli przekazujesz nazwę funkcji do funkcji Eval , musisz umieścić nawiasy po nazwie funkcji w argumencie stringexpr . Na przykład:

' ShowNames is user-defined function.
Debug.Print Eval("ShowNames()")   

Debug.Print Eval("StrComp(""Joe"",""joe"", 1)")

Debug.Print Eval("Date()")

Spostrzeżenia

Funkcji Eval można używać w kontrolce obliczeniowej w formularzu, raporcie, makrze lub module. Funkcja Eval zwraca wartość typu Wariant będącą ciągiem lub typem liczbowym.

Argument stringexpr musi być wyrażeniem przechowywanym w ciągu. Jeśli przekażesz do funkcji Eval ciąg, który nie zawiera wyrażenia numerycznego ani nazwy funkcji, a jedynie prosty ciąg tekstowy, wystąpi błąd wykonania. Na przykład Eval("Smith") powoduje błąd.

Za pomocą funkcji Eval można określić wartość przechowywaną we właściwości Value kontrolki. W poniższym przykładzie do funkcji Eval jest przekazywany ciąg zawierający pełne odwołanie do kontrolki. Następnie wyświetla bieżącą wartość kontrolki w oknie dialogowym.

Dim ctl As Control
Dim strCtl As String
Set ctl = Forms!Employees!LastName
strCtl = "Forms!Employees!LastName"
MsgBox ("The current value of " & ctl.Name & _
    " is " & Eval(strCtl))

Funkcja Eval umożliwia dostęp do operatorów wyrażeń, które zwykle nie są dostępne w module języka Visual Basic for Applications (VBA). Na przykład nie można używać operatorów SQL Between... I lub In bezpośrednio w kodzie, ale można ich użyć w wyrażeniu przekazywanym do funkcji Eval .

W następnym przykładzie określono, czy wartość kontrolki RegionOdbiorcy w formularzu Zamówienia jest jednym z kilku określonych skrótów stanów. Jeśli pole zawiera jeden ze skrótów, intState będzie miało wartość Prawda (-1). Zwróć uwagę, że aby ująć ciąg w inny ciąg, należy użyć cudzysłowu pojedynczego (').

Dim intState As Integer
intState = Eval("Forms!Orders!ShipRegion In " _
    & "('AK', 'CA', 'ID', 'WA', 'MT', 'NM', 'OR')")

Przykłady kwerend

Wyrażenie Rezultat
SELECT Eval("15+3") AS Wyr1 FROM ProductSales GROUP BY Eval("15+3"); Oblicza wartość ciągu i oblicza wynik. Wynik: 18.
SELECT Eval("Date()+month(date())") AS NewDate FROM ProductSales Group by Eval("Date()+month(date())"); Szacuje wartość ciągu, identyfikuje funkcje i wykonuje je. Wynik: bieżąca data systemowa + bieżący miesiąc, wyświetlane w kolumnie "NewDate".

Przykłady kodu VBA

W poniższym przykładzie założono, że istnieje seria 50 funkcji zdefiniowanych jako A1, A2 i tak dalej. W tym przykładzie użyto funkcji Eval do wywołania każdej funkcji w serii.

Sub CallSeries()
    Dim intI As Integer
    For intI = 1 To 50
        Eval("A" & intI & "()")
    Next intI
End Sub

W następnym przykładzie zdarzenie Click jest wyzwalane tak, jakby użytkownik kliknął przycisk w formularzu. Jeśli wartość właściwości OnClick przycisku rozpoczyna się znakiem równości (=), co oznacza, że jest to nazwa funkcji, funkcja Eval wywołuje funkcję, co jest równoznaczne z wyzwoleniem zdarzenia Click . Jeśli wartość nie rozpoczyna się znakiem równości, wartość musi nazywać makro. Metoda RunMacro obiektu DoCmd uruchamia nazwane makro.

Dim ctl As Control
Dim varTemp As Variant
Set ctl = Forms!Contacts!HelpButton
If (Left(ctl.OnClick, 1) = "=") Then
    varTemp = Eval(Mid(ctl.OnClick,2))
Else
    DoCmd.RunMacro ctl.OnClick
End If