ฟังก์ชัน Eval

นำไปใช้กับ
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

คุณสามารถใช้ฟังก์ชัน 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("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 ระหว่าง... 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

ตัวอย่างถัดไปจะทริกเกอร์เหตุการณ์ Click เหมือนกับว่าผู้ใช้ได้คลิกปุ่มบนฟอร์ม ถ้าค่าของคุณสมบัติ 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