Hiểu biết thêm về phương thức Evaluate - Understanding Evaluate Method

Liên hệ QC

levanduyet

Hãy để gió cuốn đi.
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,798
Được thích
4,704
Giới tính
Nam
Đôi khi các bạn gặp một đoạn mã sau:
Mã:
vRowArr = [ROW(101:200)]
Ý nghĩa của đoạn mã trên là tạo một biến mảng có 100 hàng và một cột. Mảng này chứa giá trị từ 101 đến 200.
Các bạn có thấy đoạn mã trên ngắn không?
Vâng, dĩ nhiên quá ngắn.

Các bạn tự hỏi tại sao có ngoặc vuông [] ?
Đây là phương thức Evaluate.
Phương thức Evaluate có thể được dùng để tính tóan công thức của Excel và khởi tạo sự tham chiếu đến đối tượng Range.
Phương thức Evaluate có cú pháp như sau:
Mã:
Evaluate("Expression")
Hoặc cũng có thể dùng dấu ngoặc vuông như sau:
Mã:
["Expression"]


Expression: có thể là bất kỳ biểu thức tính tóan có giá trị, có hoặc không có dấu = bên trái hoặc tham chiếu đến một vùng. Biểu thức tính tóan có thể bao gồm các hàm không tồn tại trong danh sách hiện ra khi bạn nhập vào Application.WorksheetFunction. Hoặc biểu thức bao gồm các công thức mảng.

Hai hàng mã sau cho cùng kết quả:
Mã:
MsgBox Evaluate(“=ISBLANK(A1)”)
MsgBox [ISBLANK(A1)]
Thuận lợi của câu lệnh đầu tiên là tạo một chuổi bằng code.
Câu lệnh thứ hai thì ngắn hơn nhưng bạn chỉ có thể thay đổi biểu thức bằng việc thay đổi code của bạn. Ví dụ sau đây sẽ thể hiện giá trị True hoặc False nếu ô hiện tại (ActiveCell) rỗng hoặc không rỗng.

Mã:
Sub IsActiveCellEmpty()
Dim sFunctionName As String, sCellReference As String  
sFunctionName = “ISBLANK” 
sCellReference = ActiveCell.Address  
MsgBox Evaluate(sFunctionName & “(“ & sCellReference & “)”)  
End Sub

Nó thể hiện sự linh họat mà chúng ta đã đề cập ở trên với kỹ thuật đầu tiên.
Chú ý rằng bạn không thể dùng kỹ thuật thứ hai để tính giá trị của một biểu thức như trong ví dụ trên.
Hai hàng code dưới đây, chỉ bạn hai cách dùng Evaluate để tạo tham chiếu đến đối tượng Range và gán giá trị cho biến này:
Mã:
Evaluate(“A1”).Value=10  
[A1].Value=10
Dòng lệnh đầu tiên ít khi được dùng, dòng lệnh thứ hai thì thường dùng hơn để tham chiếu đến đối tượng Range mặc dù nó không được linh họat. Bạn có thể dùng câu lệnh thứ hai ngắn hơn bằng việc bỏ đi thuộc tính Value. Vì đây là thuộc tính mặc định của đối tượng Range.
Mã:
[A1]=10
Ngòai việc dùng Evaluate như ở trên, chúng ta còn có thể dùng nó để trả về một tập hợp Names của Workbook và khởi tạo một mảng các giá trị một cách hữu hiệu. Đọan mã sau tạo một tên ẩn (hidden name) để lưu một Password. Chú ý rằng tên ẩn không thể xem được theo như cách Insert > Name > Hộp thọai Define :
Mã:
Names.Add Name:=”PassWord”, RefersTo:=”Bazonkas”, Visible:=False
Và như vậy bạn có thể dùng dữ liệu ẩn trong các biểu thức như sau:
Mã:
sUserInput = InputBox(“Enter Password”) 
If sUserInput = [PassWord] Then  
...
Phương thức Evaluate có thể được sử dụng với mảng. Ví dụ sau đây tạo một biến mảng có 100 hàng và một cột, chứa giá trị từ 101 đến 200. Cách này sử dụng nhanh hơn là dùng vòng lập For...Next:
Mã:
 vRowArray = [ROW(101:200)]
Tương tự, đọan code sau sẽ gán giá trị từ 101 đến 200 cho vùng B1:B100:
Mã:
 [B1:B100] = [ROW(101:200)]

Vậy là từ nay về sau, khi nhìn các biểu thức có ngoặc vuông [] mà các thành viên gạo cội ưa sử dụng các bạn có thể hiểu được ý nghĩa của chúng.
Chúc các bạn một ngày lễ 1/5 vui.

Lê Văn Duyệt
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom