Funkcijo Eval lahko uporabite, če želite ovrednotiti izraz, ki vrne besedilni niz ali številsko vrednost.
Ustvarite lahko niz in ga nato podate v funkcijo Eval, kot bi bil niz dejanski izraz. Funkcija Eval ovrednoti izraz niza in vrne njegovo vrednost. Na primer, Eval("1 + 1") vrne 2.
Če v funkcijo Eval podate niz, ki vsebuje ime funkcije, funkcija Eval vrne vrnjeno vrednost funkcije. Na primer, Eval("Chr$(65)") vrne »A«.
Sintaksa
Eval ( nizni izraz )
Argument nizni izraz je izraz, ki je ovrednoten kot alfanumerični besedilni niz. Na primer nizni izraz je lahko funkcija, ki vrne niz ali številsko vrednost. Ali je lahko sklic na kontrolnik v obrazcu. Argument nizni izraz mora biti ovrednoten na niz ali številsko vrednost; ne more biti ovrednoten na Microsoft Accessov predmet.
Opomba: V spodnjih primerih je prikazana uporaba te funkcije v modulu Visual Basic for Applications (VBA). Če želite več informacij o delu z modulom VBA, izberite Vsebina za razvijalce na spustnem seznamu ob možnosti Iskanje in v iskalno polje vnesite enega ali več izrazov.
Opomba: Če v funkcijo Eval podajate ime funkcije, morate za imenom funkcije v argumentu nizni izraz vključiti oklepaje. Na primer:
' ShowNames is user-defined function.
Debug.Print Eval("ShowNames()")
Debug.Print Eval("StrComp(""Joe"",""joe"", 1)")
Debug.Print Eval("Date()")
Pripombe
Funkcijo Eval lahko uporabite v izračunani kontrolnik v obrazcu ali poročilu ali v makru ali modulu. Funkcija Eval vrne podatkovni tip Variant, ki je niz ali številski tip.
Argument nizni izraz mora biti izraz, ki je shranjen v nizu. Če v funkcijo Eval podate niz, ki ne vsebuje številskih izrazov ali imen funkcij, ampak le preprost besedilni niz, se Napaka med izvajanjem niz. Če na primer Eval("Smith") prikaže sporočilo o napaki.
Funkcijo Eval lahko uporabite za določanje vrednosti, shranjene v lastnosti Value za kontrolnik. V spodnjem primeru je podan niz, ki vsebuje popoln sklic na kontrolnik v funkciji Eval. Nato se prikaže vrednost kontrolnika v pogovornem oknu.
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))
Funkcijo Eval lahko uporabite za dostop do operatorjev izraza, ki niso običajno na voljo v modulu Visual Basic for Applications (VBA). Na primer, operatorjev SQL Between...And ali In ne morete uporabiti neposredno v kodi, vendar jih lahko uporabite v izrazu, podanem v funkciji Eval.
V naslednjem primeru se ugotavlja, ali je vrednost kontrolnika ShipRegion v obrazcu »Naročila« ena od več določenih kratic držav. Če polje vsebuje eno od kratic, bo intStateTrue (–1). Pri vključevanju niza v drug niz ne pozabite uporabiti enojnih narekovajev (').
Dim intState As Integer
intState = Eval("Forms!Orders!ShipRegion In " _ & "('AK', 'CA', 'ID', 'WA', 'MT', 'NM', 'OR')")
Primeri poizvedb
Izraz |
Rezultati |
SELECT Eval("15+3") AS Expr1 FROM ProductSales GROUP BY Eval("15+3"); |
Ovrednoti vrednost niza in izračuna rezultat. Rezultat: 18. |
SELECT Eval("Date()+month(date())") AS NewDate FROM ProductSales Group by Eval("Date()+month(date())"); |
Ovrednoti vrednost niza, prepozna funkcije in jih izvede. Rezultat: trenutni sistemski datum + trenutni mesec, prikazan v stolpcu "NewDate". |
Primeri VBA
Naslednji primer predvideva, da imate niz 50 funkcij, določenih kot A1, A2 in tako naprej. Ta primer uporablja funkcijo Eval za priklic vseh funkcij v nizu.
Sub CallSeries()
Dim intI As Integer For intI = 1 To 50 Eval("A" & intI & "()") Next intI End Sub
Naslednji primer sproži dogodek Click, kot bi uporabnik kliknil gumb v obrazcu. Če se vrednost lastnosti OnClick gumba začne z enačajem (=), ki označuje, da gre za ime funkcije, funkcija Eval prikliče funkcijo, ki je enaka sproženju dogodka Click. Če se vrednost ne začne z enačajem, mora vrednost imenovati makro. Metoda RunMacro predmeta DoCmd zažene imenovani 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