Можете да използвате функцията 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, която е низ или числов тип.
Аргументът низexpr трябва да е израз, който се съхранява в низ. Ако предадете на функцията 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 , за да получите достъп до оператори за изрази, които обикновено не са налични във Visual Basic for Applications (VBA). Например не можете да използвате SQL операторите Between... And или In директно във вашия код, но можете да ги използвате в израз, подаден към функцията Eval .
Следващият пример определя дали стойността на контролата ShipRegion във формуляр "Поръчки" е една от няколкото указани съкращения на състоянието. Ако полето съдържа една от съкращенията, intState ще бъде "Истина " (–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())"); | Оценява стойността на низа, идентифицира функциите и ги изпълнява. Резултат: текуща системна дата + текущия месец, показан в колоната "НоваДата". |
Примери на VBA
Следващият пример предполага, че имате последователност от 50 функции, дефинирани като A1, A2 и т.н. Този пример използва функцията Eval , за да извика всяка функция в серията.
Sub CallSeries()
Dim intI As Integer
For intI = 1 To 50
Eval("A" & intI & "()")
Next intI
End Sub
Следващият пример задейства събитие за щракване , все едно че потребителят е щракнал върху бутон във формуляр. Ако стойността на свойството OnClick на бутона започва със знак за равенство (=), което означава, че това е името на функция, функцията Eval извиква функцията, което е еквивалентно на задействане на събитието Click . Ако стойността не започва със знак за равенство, стойността трябва да има име на макрос. Методът RunMacro на обекта DoCmd изпълнява именувания макрос.
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