你可以使用 評估 函數來評估產生文字串或數值的表達式。
你可以構造一個字串,然後把它當作一個真正的表達式一樣傳給 Eval 函式。
Eval 函數會評估字串表達式並回傳其值。 例如,returns 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 函式回傳一個變體,該變體可是字串或數值型態。
參數 stringexpr 必須是儲存在字串中的表達式。 如果你傳給 Eval 函式一個字串,該字串不含數值表達式或函式名稱,只有簡單的文字字串,就會發生執行時錯誤。 例如,會導致 Eval("Smith") 錯誤。
你可以用 Eval 函式來判斷控制項的 Value 屬性中儲存的值。 以下範例將包含完整控制參照的字串傳遞給 評估 函式。 接著它會在對話框中顯示目前控制項的值。
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 或 T, 但你可以用在傳給 Eval 函式的表達式中。
下一個範例判斷命令表單中 ShipRegion 控制值是否為多個指定狀態縮寫之一。 若欄位包含其中一個縮寫 intState ,則為 真 (–1) 。 請注意,你使用單引號 (') 來包含字串中包含字串。
Dim intState As Integer
intState = Eval("Forms!Orders!ShipRegion In " _
& "('AK', 'CA', 'ID', 'WA', 'MT', 'NM', 'OR')")
查詢範例
| 運算式 | 結果 |
|---|---|
| SELECT 評估 (“15+3”) 作為 ProductSales GROUP 的 Expr1 評價 (“15+3”) ; | 評估字串值並計算結果。 結果:18。 |
| 選擇評估 (「日期 () +月 (日期 () ) 」) 作為 NewDate 來自 ProductSales Group by Eval (「日期 () +月 (日期 () ) 」) ; | 評估字串值、識別函式並執行。 結果:目前系統日期 + 當前月份,顯示在「NewDate」欄位。 |
VBA 範例
以下範例假設你有一組定義為 A1、A2 等的 50 個函數。 此範例使用 評估 函數來呼叫序列中的每個函數。
Sub CallSeries()
Dim intI As Integer
For intI = 1 To 50
Eval("A" & intI & "()")
Next intI
End Sub
下一個例子會觸發 點擊 事件,就像使用者在表單上點擊按鈕一樣。 如果按鈕的 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