Eval 函数

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

可以使用 Eval 函数来计算产生文本字符串或数值的表达式。

可以构造字符串,然后将其传递给 Eval 函数,就像字符串是实际表达式一样。 Eval 函数计算字符串表达式并返回其值。 例如, Eval("1 + 1") 返回 2。

如果向 Eval 函数传递包含函数名称的字符串, 则 Eval 函数返回函数的返回值。 例如, Eval("Chr$(65)") 返回“A”。

语法

eval (stringexpr)

stringexpr 参数是计算结果为字母数字文本字符串的表达式。 例如, stringexpr 可以是返回字符串或数值的函数。 也可以是对窗体上控件的引用。 stringexpr 参数的计算结果必须为字符串或数值;它无法计算为 Microsoft Access 对象。

注意

下面的示例演示了如何在 Visual Basic for Applications (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 函数来确定存储在控件的 Value 属性中的值。 以下示例将包含对控件的完整引用的字符串传递给 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 for Applications (VBA) 模块中通常不可用的表达式运算符。 例如,不能使用 SQL 运算符 Between...和In 直接在代码中,但可以在传递给 Eval 函数的表达式中使用它们。

下一个示例确定 Orders 窗体上的 ShipRegion 控件的值是否是几个指定的状态缩写之一。 如果字段包含其中一个缩写, intState 则 为 True (–1) 。 请注意,使用单引号 ( ) 将字符串包含在另一个字符串中。

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

查询示例

Expression 结果
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 事件。 如果值不以等号开头,则该值必须命名宏。 DoCmd 对象的 RunMacro 方法运行命名宏。

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