Bạn có thể sử dụng hàm Eval để đánh giá biểu thức trả về chuỗi văn bản hoặc giá trị số.
Bạn có thể tạo một chuỗi, rồi chuyển chuỗi đó đến hàm Eval như thể chuỗi đó là một biểu thức thực sự. Hàm Eval đánh giá biểu thức chuỗi và trả về giá trị của nó. Ví dụ, trả Eval("1 + 1") về 2.
Nếu bạn truyền cho hàm Eval một chuỗi có chứa tên hàm, hàm Eval trả về giá trị trả về của hàm. Ví dụ, trả Eval("Chr$(65)") về "A".
Cú pháp
Eval(stringexpr)
Đối số stringexpr là một biểu thức định trị thành một chuỗi văn bản dạng chữ và số. Ví dụ: stringexpr có thể là một hàm trả về một chuỗi hoặc một giá trị số. Hoặc có thể là tham chiếu đến một điều khiển trên biểu mẫu. Đối số stringexpr phải định trị thành một chuỗi hoặc giá trị số; nó không thể đánh giá đối với một đối tượng Microsoft Access.
Lưu ý
Các ví dụ sau thể hiện cách sử dụng hàm này trong mô-đun Visual Basic for Applications (VBA). Để biết thêm thông tin về cách làm việc với VBA, chọn Tham khảo dành cho Nhà phát triển trong danh sách thả xuống cạnh Tìm kiếm, rồi nhập một hoặc nhiều từ vào hộp tìm kiếm.
Lưu ý
Nếu bạn đang chuyển tên của một hàm cho hàm Eval , bạn phải đưa tên của hàm vào trong đối số stringexpr sau tên của hàm. Ví dụ:
' ShowNames is user-defined function.
Debug.Print Eval("ShowNames()")
Debug.Print Eval("StrComp(""Joe"",""joe"", 1)")
Debug.Print Eval("Date()")
Chú thích
Bạn có thể sử dụng hàm Eval trong một điều khiển được tính toán trên một biểu mẫu hoặc báo cáo, hoặc trong một macro hoặc mô-đun. Hàm Eval trả về một Variant thuộc loại chuỗi hoặc số.
Đối số stringexpr phải là một biểu thức được lưu trữ trong một chuỗi. Nếu bạn truyền cho hàm Eval một chuỗi không chứa biểu thức số hay tên hàm mà chỉ chứa một chuỗi văn bản đơn giản thì lỗi thời gian chạy sẽ xảy ra. Ví dụ, dẫn Eval("Smith") đến lỗi.
Bạn có thể sử dụng hàm Eval để xác định giá trị được lưu trữ trong thuộc tính Giá trị của một điều khiển. Ví dụ sau đây truyền một chuỗi chứa tham chiếu đầy đủ đến điều khiển tới hàm Eval . Sau đó hiển thị giá trị hiện tại của điều khiển trong một hộp thoại.
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))
Bạn có thể sử dụng hàm Eval để truy nhập các toán tử biểu thức thường không sẵn dùng trong mô-đun Visual Basic for Applications (VBA). Ví dụ: bạn không thể sử dụng toán tử SQL Between... And hoặc In trực tiếp trong mã của bạn, nhưng bạn có thể sử dụng chúng trong biểu thức được chuyển đến hàm Eval .
Ví dụ tiếp theo sẽ xác định xem giá trị của điều khiển ShipRegion trên biểu mẫu Orders có phải là một trong vài từ viết tắt được chỉ định của tiểu bang hay không. Nếu trường chứa một trong các từ viết tắt, intState sẽ là True (–1). Lưu ý rằng bạn sử dụng dấu nháy đơn (') để đưa một chuỗi vào trong một chuỗi khác.
Dim intState As Integer
intState = Eval("Forms!Orders!ShipRegion In " _
& "('AK', 'CA', 'ID', 'WA', 'MT', 'NM', 'OR')")
Ví dụ về truy vấn
| Biểu thức | Kết quả |
|---|---|
| SELECT Eval("15+3") AS Expr1 FROM ProductSales GROUP BY Eval("15+3"); | Đánh giá giá trị chuỗi và tính toán kết quả. Kết quả: 18. |
| SELECT Eval("Date()+month(date())") AS NewDate FROM ProductSales Group by Eval("Date()+month(date())"); | Đánh giá giá trị chuỗi, xác định hàm và thực thi hàm. Kết quả: ngày hệ thống hiện tại + tháng hiện tại, được hiển thị trong cột "NewDate". |
Ví dụ về VBA
Ví dụ sau đây giả định rằng bạn có một chuỗi 50 hàm được xác định là A1, A2, v.v. Ví dụ này sử dụng hàm Eval để gọi từng hàm trong chuỗi.
Sub CallSeries()
Dim intI As Integer
For intI = 1 To 50
Eval("A" & intI & "()")
Next intI
End Sub
Ví dụ tiếp theo kích hoạt sự kiện Click giống như người dùng đã bấm vào một nút trên biểu mẫu. Nếu giá trị thuộc tính OnClick của nút bắt đầu bằng dấu bằng (=), biểu thị rằng đó là tên của hàm, thì hàm Eval sẽ gọi hàm đó, tương đương với việc kích hoạt sự kiện Click . Nếu giá trị không bắt đầu bằng ký hiệu dấu bằng thì giá trị đó phải đặt tên macro. Phương thức RunMacro của đối tượng DoCmd sẽ chạy macro đã được đặt tên.
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