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 运算符“介 于...AndIn 直接包含在代码中,但可在传递给 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 示例

以下示例假设有一系列定义为 A1、A2 等的 50 个函数。 此示例使用 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