- Tham gia
- 30/5/06
- Bài viết
- 1,798
- Được thích
- 4,706
- Giới tính
- Nam
Sử dụng Worksheet Function trong VBA
(Dịch từ Chip Peason Website)
www.giaiphapexcel.com
Từ khi ngôn ngữ VBA được dùng cho nhiều ứng dụng khác nhau, các hàm Excel (Excel worksheet functions) không chỉ còn là của nó. Tuy bạn có thể gọi các hàm Excel từ VBA thông qua đối tượng Application nhưng không phải tất cả các hàm đều sử dụng được trong VBA. Một số hàm nếu trong VBA đã có (chức năng giống nhau như hàm Month chẳng hạn) thì bạn không thể dùng được các hàm Excel tương tự.
Bạn có thể sử dụng các hàm VBA với hai cách như sau: Ví dụ như hàm Vlookup
Nó tương đương với việc sử dụng công thức sau trong Excel
Nếu "f" không tìm thấy thì lỗi sẽ xảy ra và bạn sẽ nhận được thông báo lỗi lúc thực thi ( run-time error message) Unable to get the VLookup property of the WorksheetFunction class. Vì vậy bạn cần phải bẫy lỗi như sau:
Bạn cũng có thể dùng hàm VLOOKUP (hay bất kỳ hàm Excel nào khác) bỏ qua thuộc tính WorksheetFunction property. Ví dụ,
Bạn sẽ dễ dàng nhận ra sự khác nhau của hai đoạn mã trên. Ở đoạn mã thứ hai không dùng đến thuộc tính WorksheetFunction.
Trong ví dụ thứ hai không dùng thuộc tính WorksheetFunction, không có lỗi xãy ra khi thực thi. Thay vào đó, lỗi sẽ được lưu vào biến. Trong trường hợp này biến phải được khai báo là kiểu Variant. Nếu không bạn sẽ nhận được thông báo “type mismatch error”. Để xác định lỗi xãy ra bạn dùng hàm IsError. Ví dụ
Chú ý rằng phương pháp này không dùng cho các hàm trong Analysis ToolPak.
Hy vọng rằng phần trên sẽ cho các bạn thêm một ít kiến thức nữa về việc dùng WorksheetFunction.
Lê Văn Duyệt
(Dịch từ Chip Peason Website)
www.giaiphapexcel.com
Từ khi ngôn ngữ VBA được dùng cho nhiều ứng dụng khác nhau, các hàm Excel (Excel worksheet functions) không chỉ còn là của nó. Tuy bạn có thể gọi các hàm Excel từ VBA thông qua đối tượng Application nhưng không phải tất cả các hàm đều sử dụng được trong VBA. Một số hàm nếu trong VBA đã có (chức năng giống nhau như hàm Month chẳng hạn) thì bạn không thể dùng được các hàm Excel tương tự.
Bạn có thể sử dụng các hàm VBA với hai cách như sau: Ví dụ như hàm Vlookup
Mã:
[FONT="Courier New"]Dim Res As Double
Res = Application.WorksheetFunction.VLookup("f", Range("A1:B5"), 2, False)[/FONT]
Nó tương đương với việc sử dụng công thức sau trong Excel
Mã:
[COLOR="Blue"]=VLOOKUP("f",A1:B5,2,FALSE)[/COLOR]
Nếu "f" không tìm thấy thì lỗi sẽ xảy ra và bạn sẽ nhận được thông báo lỗi lúc thực thi ( run-time error message) Unable to get the VLookup property of the WorksheetFunction class. Vì vậy bạn cần phải bẫy lỗi như sau:
Mã:
[COLOR="Blue"][FONT="Courier New"]Dim Res As Double
On Error Resume Next
Err.Clear
Res = Application.WorksheetFunction.VLookup("f", Range("A1:B5"), 2, False)
If Err.Number <> 0 Then
Debug.Print "Data Not Found."
Else
Debug.Print "Value Found: " & CStr(Res)
End If[/FONT][/COLOR]
Bạn cũng có thể dùng hàm VLOOKUP (hay bất kỳ hàm Excel nào khác) bỏ qua thuộc tính WorksheetFunction property. Ví dụ,
Mã:
[FONT="Courier New"][COLOR="Blue"]Dim Res As Variant
Res = Application.VLookup("c", Range("A1:B5"), 2, False)[/COLOR][/FONT]
Trong ví dụ thứ hai không dùng thuộc tính WorksheetFunction, không có lỗi xãy ra khi thực thi. Thay vào đó, lỗi sẽ được lưu vào biến. Trong trường hợp này biến phải được khai báo là kiểu Variant. Nếu không bạn sẽ nhận được thông báo “type mismatch error”. Để xác định lỗi xãy ra bạn dùng hàm IsError. Ví dụ
Mã:
[COLOR="Blue"][FONT="Courier New"]Dim Res As Variant
Res = Application.VLookup("f", Range("A1:B5"), 2, False)
If IsError(Res) = True Then
Debug.Print "Data Not Found."
Else
Debug.Print "Value Found: " & CStr(Res)
End If[/FONT][/COLOR]
Chú ý rằng phương pháp này không dùng cho các hàm trong Analysis ToolPak.
Hy vọng rằng phần trên sẽ cho các bạn thêm một ít kiến thức nữa về việc dùng WorksheetFunction.
Lê Văn Duyệt
Lần chỉnh sửa cuối: