Функцию Eval можно использовать для вычисления выражения, которое приводит к текстовой строке или числовым значениям.
Вы можете составить строку и передать ее функции Eval точно так же, как если бы эта строка была настоящим выражением. Функция Eval вычисляет строковое выражение и возвращает его значение. Например, Eval("1 + 1") возвращает значение 2.
Если в функцию Eval передать строку, содержащую имя другой функции, функция Eval вернет значение, возвращаемое этой функцией. Например, Eval("Chr$(65)") возвращает "A".
Синтаксис
Eval(stringexpr)
Аргумент stringexpr — это выражение, которое вычисляет буквенно-цифровую текстовую строку. Например, stringexpr может быть функцией, которая возвращает строковое или числовое значение. Или это может быть ссылка на элемент управления в форме. Аргумент stringexpr должен иметь строковое или числовое значение; он не может выполнить вычисление по объекту Microsoft Access.
Примечание
В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.
Примечание
Если вы передаете имя функции в функцию Eval , необходимо включить скобки после имени функции в аргумент stringexpr . Например:
' ShowNames is user-defined function.
Debug.Print Eval("ShowNames()")
Debug.Print Eval("StrComp(""Joe"",""joe"", 1)")
Debug.Print Eval("Date()")
Замечания
Функцию Eval можно использовать в вычисляемом элементе управления в форме или отчете, а также в макросе или модуле. Функция Eval возвращает тип Variant, который является строковым или числовым типом.
Аргумент stringexpr должен быть выражением, которое хранится в строке. Если передать в функцию Eval строку, которая не содержит числовое выражение или имя функции, а только простую текстовую строку, возникает ошибка во время выполнения. Например, Eval("Smith") приводит к ошибке.
С помощью функции Eval можно определить значение, хранящееся в свойстве Значение элемента управления. В следующем примере в функцию Eval передается строка, содержащая полную ссылку на элемент управления. В диалоговом окне будет отображаться текущее значение элемента управления.
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))
Функция Eval дает возможность применять операторы выражений, недопустимые в модулях Visual Basic для приложений (VBA). Например, в коде программы нельзя использовать непосредственно операторы SQL Between...And или In, но их можно использовать в выражении, передаваемом в функцию Eval.
В следующем примере определяется, является ли значение элемента управления ShipRegion (Регион доставки) в форме Orders (Заказы) одним из заданных кодов регионов. Если поле содержит одно из сокращений, intState будет иметь значение True (–1). Обратите внимание, что для включения одной строки в другую нужно использовать одинарные кавычки (').
Dim intState As Integer
intState = Eval("Forms!Orders!ShipRegion In " _
& "('AK', 'CA', 'ID', 'WA', 'MT', 'NM', 'OR')")
Примеры запросов
| Выражение | Результаты |
|---|---|
| SELECT Eval("15+3") AS Expr1 FROM ProductSales GROUP BY Eval("15+3"); | Вычисляет строковое значение и вычисляет результат. Результат: 18. |
| SELECT Eval("Date()+month(date())) AS NewDate FROM ProductSales Group by Eval("Date()+month(date())"); | Вычисляет строковое значение, определяет функции и выполняет их. Результат: текущая системная дата + текущий месяц, отображаемый в столбце NewDate. |
Примеры VBA
В следующем примере предполагается, что имеется 50 функций, обозначенных A1, A2 и т. д. Функция Eval используется для последовательного вызова этих функций.
Sub CallSeries()
Dim intI As Integer
For intI = 1 To 50
Eval("A" & intI & "()")
Next intI
End Sub
В следующем примере событие Click активируется так, как если бы пользователь нажал кнопку на форме. Если значение свойства OnClick кнопки начинается со знака равенства (=), что означает, что это имя функции, функция Eval вызывает функцию, что эквивалентно активации события Click . Если значение не начинается со знака равенства, то значение должно называть макрос. Метод RunMacro объекта DoCmd выполняет именованный макрос.
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