Funkce Eval slouží k vyhodnocení výrazu (Výraz: Kombinace operátorů, názvů polí, funkcí, literálů a konstant, která poskytuje jednu výslednou hodnotu. Pomocí výrazů lze zadávat kritéria (například Množství objednávky >10000) nebo provádět výpočty s hodnotami polí (například Cena*Množství).). Výsledkem je textový řetězec nebo číselná hodnota.
Lze vytvořit řetězec a ten potom předat funkci Eval, jako by šlo o skutečný výraz. Funkce Eval řetězcový výraz (Řetězcový výraz: Výraz, který je vyhodnocen jako posloupnost sousedících znaků. Prvky výrazu mohou zahrnovat: funkce vracející řetězec nebo řetězec typu Variant (VarType 8), řetězcový literál, konstantu, proměnnou nebo řetězec typu Variant</.) vyhodnotí a vrátí jeho hodnotu. Například řetězec Eval("1 + 1") vrátí hodnotu 2.
Pokud předáte funkci Eval řetězec, který obsahuje název funkce, vrátí funkce Eval vrácenou hodnotu dané funkce. Například řetězec Eval("Chr$(65)") vrátí hodnotu A.
Syntaxe
Eval(řetězcový výraz)
Argument řetězcový výraz je výraz, jehož výsledkem je alfanumerický textový řetězec. Argument řetězcový výraz může být například funkce, která vrátí řetězec nebo číselnou hodnotu. Může se také jednat o ovládací prvek (Ovládací prvek: Objekt grafického uživatelského rozhraní, jako jsou např. textové pole, zaškrtávací políčko, posuvník nebo příkazové tlačítko, který uživatelům umožňuje ovládat daný program. Pomocí ovládacích prvků lze zobrazit data nebo volby, provést určitou akci nebo zpřehlednit zobrazení uživatelského rozhraní.) ve formuláři. Výsledkem argumentu řetězcový výraz musí být řetězec nebo číselná hodnota, nikoli objekt aplikace Microsoft Access (Objekt aplikace Microsoft Access: Objekt definovaný aplikací Access, který se vztahuje k aplikaci Access, jejímu rozhraní nebo formulářům, sestavám a datovým stránkám aplikace, a pomocí něhož lze programovat prvky rozhraní sloužící k zadání a zobrazení dat.).
Poznámka: Následující příklady uvádějí použití této funkce v modulu jazyka Visual Basic for Applications (VBA). Další informace o práci s jazykem VBA získáte tak, že klepnete na položku Referenční informace pro vývojáře v rozevíracím seznamu vedle pole Hledat a do pole pro hledání zadáte jeden nebo více pojmů.
Poznámka: Předáte-li funkci Eval název funkce, je nutné jej v argumentu řetězcový výraz uzavřít do závorek. Například:
' ShowNames is user-defined function.
Debug.Print Eval("ShowNames()")
Debug.Print Eval("StrComp(""Joe"",""joe"", 1)")
Debug.Print Eval("Date()")
Poznámky
Funkci Eval lze použít ve vypočítaném ovládacím prvku (Výpočtový ovládací prvek: Ovládací prvek používaný ve formuláři, sestavě nebo na datové stránce k zobrazení výsledku výrazu. Výsledek je přepočítán při každé změně hodnot použitých ve výrazu.) ve formuláři nebo v sestavě, v makru nebo v modulu. Funkce Eval vrátí hodnotu Variant (Typ dat Variant: Výchozí typ dat pro proměnné, které neobsahují znaky deklarace typu, není-li aktivní příkaz Deftyp. V proměnné typu Variant mohou být uložena čísla, řetězce, datum a čas nebo hodnoty Null či Empty.), která je buď řetězec nebo číselná hodnota.
Argument řetězcový výraz musí být výraz uložený v řetězci. Předáte-li funkci Eval řetězec, který neobsahuje číselný výraz nebo název funkce, ale pouze jednoduchý textový řetězec, dojde k chybě při běhu programu (Chyba za běhu: Chyba, kterou lze zjistit, pouze pokud je aplikace spuštěna.). Například řetězec Eval("Smith") vrátí chybu.
Funkci Eval lze použít k určení hodnoty, která je uložena ve vlastnosti Hodnota
ovládacího prvku. V následujícím příkladu je funkci Eval předán řetězec obsahující úplný odkaz na ovládací prvek. Funkce potom zobrazí aktuální hodnotu daného ovládacího prvku v dialogovém okně.
Dim ctl As Control
Dim strCtl As String
Set ctl = Forms!Zaměstnanci!Příjmení
strCtl = "Forms!Zaměstnanci!Příjmení"
MsgBox ("Aktuální hodnota" & ctl.Name & _
" is " & Eval(strCtl))
Pomocí funkce Eval lze získat přístup k operátorům výrazů, které nejsou v modulu Visual Basic for Applications (VBA) běžně k dispozici. Například operátory jazyka SQL Between...And nebo In nelze použít přímo v kódu, ale lze je použít ve výrazu předaném funkci Eval.
Následující příklad určuje, zda je hodnota ovládacího prvku RegionPříjemce ve formuláři Objednávky jednou z několika zadaných zkratek států. Pokud pole některou ze zkratek obsahuje, bude pro řetězec intState vrácena hodnota True (–1). Nezapomeňte, že řetězec vložený do jiného řetězce musí být uzavřen v jednoduchých uvozovkách (').
Dim intState As Integer
intState = Eval("Forms!Objednávky!RegionPříjemce v " _
& "('AK', 'CA', 'ID', 'WA', 'MT', 'NM', 'OR')")
Příklad
Následující příklad předpokládá, že je k dispozici řada funkcí definovaných jako funkce A1, A2 atd. V tomto příkladu je funkce Eval použita k volání jednotlivých funkcí v dané řadě.
Sub CallSeries()
Dim intI As Integer
For intI = 1 To 50
Eval("A" & intI & "()")
Next intI
End Sub
V dalším příkladu je spuštěna událost Click, jako by uživatel klepnul na tlačítko ve formuláři. Pokud hodnota vlastnosti OnClick tlačítka začíná znaménkem rovná se (=), které označuje, že se jedná o název funkce, volá funkce Eval danou funkci, což je ekvivalentem spuštění události Click. Pokud hodnota nezačíná znaménkem rovná se, musí být hodnota názvem makra. Metoda RunMacro objektu DoCmd spustí makro s daným názvem.
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