Funkci Eval můžete použít k vyhodnocení Výraz, která má za následek textový řetězec nebo číselnou hodnotu.
Můžete vytvořit řetězec a pak ho předat funkci Eval , jako kdyby byl řetězec skutečným výrazem. Funkce Eval vyhodnotí Řetězcový výraz a vrátí jeho hodnotu. Například Eval("1 + 1") vrátí hodnotu 2.
Pokud funkci Eval předáte řetězec, který obsahuje název funkce, vrátí funkce Eval návratovou hodnotu funkce. Například Eval("Chr$(65)") vrátí "A".
Syntaxe
Eval ( stringexpr )
Argument stringexpr je výraz, který se vyhodnocuje jako alfanumerický textový řetězec. Například stringexpr může být funkce, která vrací řetězec nebo číselnou hodnotu. Nebo to může být odkaz na Ovládací prvek ve formuláři. Argument stringexpr musí být vyhodnocen jako řetězec nebo číselná hodnota; nemůže se vyhodnotit jako Objekt Microsoft Access.
Poznámka: Následující příklady ukazují použití této funkce v modulu VBA (Visual Basic pro Applications). Pokud chcete další informace o práci s modulem VBA, vyberte Referenční informace pro vývojáře, které najdete v rozevíracím seznamu vedle položky Hledat a do vyhledávacího pole napište požadované pojmy.
Poznámka: Pokud předáváte název funkce funkci Eval , musíte do argumentu stringexpr zahrnout závorky za názvem funkce. Příklady:
' ShowNames is user-defined function.
Debug.Print Eval("ShowNames()")
Debug.Print Eval("StrComp(""Joe"",""joe"", 1)")
Debug.Print Eval("Date()")
Poznámky
Funkci Eval můžete použít v Vypočítaný ovládací prvek ve formuláři nebo sestavě nebo v makrech nebo modulu. Funkce Eval vrátí variantu , která je buď řetězec, nebo číselný typ.
Argument stringexpr musí být výraz, který je uložený v řetězci. Pokud funkci Eval předáte řetězec, který neobsahuje číselný výraz nebo název funkce, ale pouze jednoduchý textový řetězec, dojde k Chyba za běhu. Například Eval("Smith") způsobí chybu.
Funkci Eval můžete použít k určení hodnoty uložené ve vlastnosti Value ovládacího prvku. Následující příklad předá řetězec obsahující úplný odkaz na ovládací prvek funkci Eval . Pak zobrazí aktuální hodnotu ovládacího prvku v dialogovém okně.
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))
Funkci Eval můžete použít pro přístup k operátorům výrazů, které nejsou běžně dostupné v modulu jazyka Visual Basic for Applications (VBA). Nemůžete například použít operátory SQL Between... A nebo In přímo v kódu, ale můžete je použít ve výrazu předaném funkci Eval .
Následující příklad určuje, zda hodnota ovládacího prvku ShipRegion ve formuláři Objednávky je jednou z několika zadaných zkratek států. Pokud pole obsahuje jednu ze zkratek, intState bude True (-1). Všimněte si, že k zahrnutí řetězce do jiného řetězce používáte jednoduché uvozovky (').
Dim intState As Integer
intState = Eval("Forms!Orders!ShipRegion In " _ & "('AK', 'CA', 'ID', 'WA', 'MT', 'NM', 'OR')")
Příklady dotazů
Výraz |
Výsledky |
SELECT Eval("15+3") AS Expr1 FROM ProductSales GROUP BY Eval("15+3"); |
Vyhodnotí řetězcovou hodnotu a vypočítá výsledek. Výsledek: 18. |
SELECT Eval("Date()+month(date())") AS NewDate FROM ProductSales Group by Eval("Date()+month(date())"); |
Vyhodnotí řetězcovou hodnotu, identifikuje funkce a spustí je. Výsledek: aktuální systémové datum + aktuální měsíc, zobrazený ve sloupci NewDate. |
Příklady jazyka VBA
Následující příklad předpokládá, že máte řadu 50 funkcí definovaných jako A1, A2 atd. V tomto příkladu se funkce Eval používá k volání každé funkce v řadě.
Sub CallSeries()
Dim intI As Integer For intI = 1 To 50 Eval("A" & intI & "()") Next intI End Sub
Následující příklad aktivuje událost Click , jako kdyby uživatel klikl na tlačítko ve formuláři. Pokud hodnota vlastnosti OnClick tlačítka začíná znaménkem rovná se (=), což znamená, že se jedná o název funkce, volá funkce Eval funkci, což je ekvivalentní aktivaci události Click . Pokud hodnota nezačíná znaménkem rovná se, musí mít název makra. Metoda RunMacro objektu DoCmd spustí pojmenované makro.
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