Funkcja Eval

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

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

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

Jeśli przejdziesz do funkcji Eval jako ciąg zawierający nazwę funkcji, funkcja Eval zwróci wartość zwracaną przez funkcję. Na przykład Eval("Chr$(65)") zwraca wartość "A".

Składnia

Eval(stringexpr)

Argument wyrażenie_ciągu jest wyrażeniem obliczającym ciąg tekstowy alfanumeryczny. Na przykład wyrażenieexpr może być funkcją zwracającą ciąg lub wartość liczbową. Może też to być odwołanie do kontrolki w formularzu. Argument wyrażenie_ciągu musi być szacowany jako ciąg lub wartość liczbowa; nie można oszacować obiektu 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

W przypadku przekazywania nazwy funkcji do funkcji Eval należy dołączyć nawiasy po nazwie funkcji do argumentu 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 lub raporcie albo w makkra lub module. Funkcja Eval zwraca wartość typu wariant będącego ciągiem lub typem liczbowym.

Ciąg argumentu musi być wyrażeniem przechowywanym w ciągu. Jeśli przejdziesz do funkcji Eval jako ciąg, który nie zawiera wyrażenia liczbowego ani nazwy funkcji, ale tylko prosty ciąg tekstowy, występuje błąd w czasie wykonywania. Na przykład Eval("Smith") wynikiem jest błąd.

Za pomocą funkcji Eval można określić wartość przechowywaną we właściwości Value kontrolki. W poniższym przykładzie jest przekazywany ciąg zawierający pełne odwołanie do kontrolki funkcji Eval . 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))

Za pomocą funkcji Eval można uzyskać dostęp do operatorów wyrażeń, które zwykle nie są dostępne w module Visual Basic for Applications (VBA). Na przykład nie można używać operatorów SQL Between... Oraz lub In bezpośrednio w kodzie, ale można ich używać w wyrażeniu przekazanym do funkcji Eval .

Następny przykład określa, czy wartość kontrolki ShipRegion w formularzu Zamówienia jest jednym z kilku określonych skrótów stanu. Jeśli pole zawiera jeden ze skrótów, intState będzie to prawda (–1). Należy pamiętać, że do dołączania ciągu w innym ciągu używa się cudzysłowów pojedynczych (').

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

Przykłady zapytań

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()))"); Oblicza wartość ciągu, identyfikuje funkcje i wykonuje je. Wynik: bieżąca data systemowa + bieżący miesiąc wyświetlana w kolumnie "NewDate".

Przykłady języka VBA

W poniższym przykładzie założono, że masz serię 50 funkcji zdefiniowanych jako A1, A2 i tak dalej. W tym przykładzie funkcja Eval jest używana do wywoływania każdej funkcji w serii.

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

Następny przykład wyzwala zdarzenie Click , tak jakby użytkownik kliknął przycisk w formularzu. Jeśli wartość właściwości OnClick przycisku zaczyna się od znaku równości (=), co oznacza, że jest to nazwa funkcji, funkcja Eval wywołuje funkcję, co odpowiada wyzwalaniu zdarzenia Click . Jeśli wartość nie zaczyna się od znaku 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