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