Eval 函數(shù)

此頁沒有內(nèi)容條目
內(nèi)容

expandtri全部顯示

使用 Eval 函數(shù)可以計算一個結(jié)果為文本字符串或數(shù)值的表達式的值。

可以構(gòu)造一個字符串,然后就像是一個真正的表達式一樣把字符串傳給 Eval 函數(shù),。Eval 函數(shù)將計算字符串表達式并返回計算結(jié)果值。例如, Eval("1 + 1") 返回 2。

如果傳給 Eval 函數(shù)的字符串包含一個函數(shù)的名稱,Eval 函數(shù)會返回該函數(shù)的返回值。例如,Eval("Chr$(65)") 返回 "A"。

Eval(stringexpr)

stringexpr 參數(shù)是一個對字母數(shù)字文本字符串進行計算的表達式。例如,stringexpr 可以是一個返回字符串或數(shù)值的函數(shù),或是對窗體上的控件的引用。stringexpr 參數(shù)的值必須對字符串或數(shù)值進行計算,但不能對 Microsoft Access 對象進行計算。

注釋  如果把函數(shù)名傳給 Eval 函數(shù),則必須在 stringexpr 參數(shù)中的函數(shù)名后加上括號。例如:

' ShowNames is user-defined function.

Debug.Print Eval("ShowNames()")

Debug.Print Eval("StrComp(""Joe"",""joe"", 1)")

Debug.Print Eval("Date()")

說明

可以在窗體或報表上的計算控件中,或者宏或模塊中使用 Eval 函數(shù)。Eval 函數(shù)將返回一個字符串或數(shù)值類型的 Variant。

stringexpr 參數(shù)必須是一個以字符串形式存儲的表達式。如果傳給 Eval 函數(shù)的字符串不包括數(shù)值表達式或函數(shù)名稱而僅僅是一個簡單的文本字符串,則會出現(xiàn)運行時錯誤。例如, Eval("Smith") 將產(chǎn)生錯誤。

使用 Eval 函數(shù)可決定存儲在控件中的 Value 的屬性值。下面的示例傳給 Eval 函數(shù)一個包含對控件的完整引用的字符串,然后在對話框中顯示該控件的當前值。

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 函數(shù)可以訪問在 Visual Basic 中通常不能使用的表達式運算符。例如,不能在代碼中直接使用 SQL 運算符 Between...AndIn,但是在傳給 Eval 函數(shù)的表達式中可以使用它們。

下面的示例用于確定“訂單”窗體上的“貨主地區(qū)”控件的值是否為幾個特定的州縮寫名稱中的一個。如果字段中包含了其中一個縮寫名稱, intState 的值將為 True(-1)。請注意,在示例中使用了單引號 (') 以在字符串中包含另一個字符串。

Dim intState As Integer

intState = Eval("Forms!Orders!ShipRegion In " _

    & "('AK', 'CA', 'ID', 'WA', 'MT', 'NM', 'OR')")

示例

下面的示例中,假設(shè)有 50 個定義為 A1、 A2 這樣的一系列函數(shù),然后使用 Eval 函數(shù)依次調(diào)用每個函數(shù)。

Sub CallSeries()

    Dim intI As Integer

    For intI = 1 To 50

        Eval("A" & intI & "()")

    Next intI

End Sub

下面的示例將觸發(fā)一個 Click 事件,就像用戶單擊窗體上的一個按鈕一樣。如果按鈕的 OnClick 屬性值以等號(=)打頭表明它是函數(shù)名,Eval 函數(shù)就會調(diào)用該函數(shù),這與觸發(fā) 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