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