Funktsiooni Eval abil saate väärtustada avaldise, mis annab tulemiks tekstistringi või arvväärtuse.
Soovi korral saate koostada stringi ja seejärel edastada funktsioonile Eval stringi tegeliku avaldisena. Funktsioon Eval väärtustab stringavaldise ja tagastab selle väärtuse. Näiteks Eval("1 + 1") tagastab 2.
Kui edastate funktsioonile Eval funktsiooni nime sisaldava stringi, tagastab funktsioon Eval funktsiooni tagastusväärtuse. Näiteks Eval("Chr$(65)") tagastab "A".
Süntaks
Eval ( stringexpr )
Argument stringexpr on avaldis, mis annab tulemiks tärgilise tekstistringi. Stringexpr võib olla näiteks funktsioon, mis tagastab stringi või arvväärtuse. Samuti võib see olla viide vormi juhtelement. Argument stringexpr peab olema väärtustatav stringi- või arvväärtusena; ei saa hinnata Microsoft Accessi objekt.
Märkus.: Järgmised näited kujutavad selle funktsiooni kasutamist rakenduse Visual Basic for Applications (VBA) moodulis. Lisateabe saamiseks VBA-ga töötamise kohta valige välja Otsing kõrval kuvatavast ripploendist väärtus Tootearendusmaterjal ja sisestage otsinguväljale üks või mitu sõna.
Märkus.: Kui edastate funktsioonile Eval funktsiooni nime, peate stringexpr argumendis lisama funktsiooni nime järele sulud. Siin on näide.
' ShowNames is user-defined function.
Debug.Print Eval("ShowNames()")
Debug.Print Eval("StrComp(""Joe"",""joe"", 1)")
Debug.Print Eval("Date()")
Kommentaarid
Funktsiooni Eval saate kasutada vormi või aruande arvutatud juhtelement või makros või moodulis. Funktsioon Eval tagastab variandi, mis on string või arvutüüp.
Argument stringexpr peab olema stringis talletatud avaldis. Kui edastate funktsioonile Eval stringi, mis ei sisalda arvavaldist ega funktsiooni nime, vaid ainult lihttekstistringi, ilmneb käitustõrge. Näiteks Eval("Smith") annab tulemuseks vea.
Funktsiooni Eval abil saate määratleda juhtelemendi atribuudis Value talletatud väärtuse. Järgnevas näites edastatakse funktsioonile Eval juhtelemendi täielikku viidet sisaldav string. Selle tulemusel kuvatakse dialoogiboksis juhtelemendi praegune väärtus.
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))
Funktsiooni Eval abil pääsete juurde ka nendele avaldise tehtemärkidele, mis muidu pole VBA-moodulis saadaval. Näiteks SQL-tehtemärke Between...And ja In ei saa kasutada koodis, kuid soovi korral saate neid kasutada funktsioonile Eval edastatavas avaldises.
Järgmises näites tehakse kindlaks, kas vormi Tellimused juhtelemendi väärtus Tarnepiirkond on üks määratud riikide lühenditest. Kui väli sisaldab ühte lühenditest, siis intState on True (–1). Ärge unustage stringis sisalduvat stringi panna ühekordsetesse jutumärkidesse (').
Dim intState As Integer
intState = Eval("Forms!Orders!ShipRegion In " _ & "('AK', 'CA', 'ID', 'WA', 'MT', 'NM', 'OR')")
Päringu näited
Avaldis |
Tulemid |
SELECT Eval("15+3") AS Avaldis1 FROM ProductSales GROUP BY Eval("15+3"); |
Hindab stringi väärtust ja arvutab tulemi. Tulem: 18. |
SELECT Eval("Date()+month(date())") AS NewDate FROM ProductSales Group by Eval("Date()+month(date())"); |
Hindab stringi väärtust, tuvastab funktsioonid ja käivitab need. Tulem: praegune süsteemikuupäev + praegune kuu, mis kuvatakse veerus "Uuskuupäev". |
VBA näited
Järgmises näites eeldatakse, et teil on 50 funktsioonist koosnev sari, kus funktsioonide tähistused on A1, A2 jne. Näites kasutatakse funktsiooni Eval kõigi sarja kuuluvate funktsioonide kutsumiseks.
Sub CallSeries()
Dim intI As Integer For intI = 1 To 50 Eval("A" & intI & "()") Next intI End Sub
Järgmises näites käivitatakse klõpsamissündmus, justnagu kasutaja oleks klõpsanud vormil mõnda nuppu. Kui nupu atribuudi OnClick väärtus algab võrdusmärgiga (=), viidates, et tegemist on funktsiooni nimega, kutsub Eval funktsioon klõpsamissündmusele vastava funktsiooni. Kui väärtus ei alga võrdusmärgiga, peab väärtus sisaldama makro nime. Objekti DoCmd meetod RunMacro käivitab nimetatud 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