Eval 函數

Applies To
Access for Microsoft 365 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 函數來存取 VBA) 模組中通常無法使用的 Visual Basic for Applications (運算式運算子。 例如,您無法使用 SQL 運算子 Between...AndIn ,但您可以在傳遞至 Eval 函數的運算式中使用它們。

下一個範例會判斷 Orders 表單上 ShipRegion 控制項的值是否為數個指定的狀態縮寫之一。 如果欄位包含其中一個縮寫, 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 事件。 如果值不是以等號開頭,則該值必須命名巨集。 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