באפשרותך להשתמש בפונקציה 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 מחזירה משתנה שהוא מחרוזת או סוג מספרי.
הארגומנט stringexpr חייב להיות ביטוי המאוחסן במחרוזת. אם תעביר לפונקציה Eval מחרוזת שאינה מכילה ביטוי מספרי או שם פונקציה אלא רק מחרוזת טקסט פשוטה, מתרחשת שגיאת זמן ריצה. לדוגמה, Eval("Smith") התוצאה היא שגיאה.
באפשרותך להשתמש בפונקציה Eval כדי לקבוע את הערך המאוחסן במאפיין ערך של פקד. הדוגמה הבאה מעבירה מחרוזת המכילה הפניה מלאה לפקד של הפונקציה 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 בין... AND או IN ישירות בקוד שלך, אך באפשרותך להשתמש בהם בביטוי שמועבר לפונקציה Eval .
הדוגמה הבאה קובעת אם הערך של פקד ShipRegion בטופס Orders הוא אחד מכמה קיצורי מדינה שצוינו. אם השדה מכיל את אחד הקיצורים, intState יהיה True (–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())"); | מעריך את ערך המחרוזת, מזהה את הפונקציות ומבצע אותן. תוצאה: תאריך המערכת הנוכחי + חודש נוכחי, מוצג בעמודה "NewDate". |
דוגמאות 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