- Tham gia
- 30/5/06
- Bài viết
- 1,798
- Được thích
- 4,706
- Giới tính
- Nam
Dịch từ Chip Peason Website
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
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ã:
Dim Res As Double
Res = Application.WorksheetFunction.VLookup("f", Range("A1:B5"), 2, False)
Nó tương đương với việc sử dụng công thức sau trong Excel
Mã:
=VLOOKUP("f",A1:B5,2,FALSE)
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ã:
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
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ã:
Dim Res As Variant
Res = Application.VLookup("c", Range("A1:B5"), 2, False)
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ụ
Mã:
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
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.
PhanTuHuong;8364 đã viết:Một số hàm trong Worksheet có tên giống như trong hàm trong VBA nhưng chúng có thể làm việc khác nhau. Ví dụ như: Application.WorksheetFunction.Log và Log cho kết quả khác nhau như ở dưới đây (ô D2 có giá trị là 2).
Mã:Sub Log_in_Excel() Answer=Application.WorksheetFunction.Log(Worksheets("Sheet3").Range("D2")) MsgBox "Excel: Gia tri Log(" & Range("D2").Value & ") = " & Answer End Sub
và
Mã:Sub Log_in_VBA() Dim myRange As Range Set myRange = Worksheets("Sheet3").Range("D2") MsgBox "VBA: Gia tri Log(" & myRange & ") =" & Log(myRange) End Sub
Lê Văn Duyệt
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote
0