Funkcji Eval można użyć do oceny wyrażenie powodującego ciąg tekstowy lub wartość liczbową.
Można skonstruować ciąg, a następnie przekazać go do funkcji Eval , tak jakby był rzeczywistym wyrażeniem. Funkcja Eval oblicza wyrażenie tekstowe i zwraca jej 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 kontrolka w formularzu. Argument wyrażenie_ciągu musi być szacowany jako ciąg lub wartość liczbowa; nie można oszacować na 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: 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()")
Uwagi
Funkcji Eval można używać w kontrolka obliczeniowa w formularzu lub raporcie albo w makrze 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 czasu 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 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 mieć wartość 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ń
Expression |
Wyniki |
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