Sự khác biệt giữa một function và một sub trong Excel VBA là: một function có thể trả về một giá trị, trong khi một Sub thì không, nó thực hiện các công việc nào đó do người lập trình mong muốn bằng các đoạn code. Function và sub rất hữu ích khi chương trình VBA bạn viết có kích thước lớn, xử lý nhiều công việc.
Function
Nếu bạn muốn Excel VBA thực hiện một nhiệm vụ mà trả về một giá trị, ta dùng function. Đặt một function vào một module (Trong Visual Basic Editor, nhấn Insert, Module). Ví dụ, chức năng với tên Area.
Function Area(x AsDouble, y AsDouble) AsDouble
Area = x * y
EndFunction
Giải thích: Hàm này có hai tham số (argument) kiểu Double và trả về giá trị kiểu Double. Bạn có thể gọi hàm trong code của bạn để lấy kết quả trả về như mong muốn (ở đây là x * y).
Bây giờ ta có thể tham khảo chức năng này (gọi hàm này) trong đoạn code của bạn bằng cách sử dụng tên hàm và truyền giá trị cho các đối số.
Đặt command button vào worksheet của bạn và paste đoạn code bên dưới:
Dim z AsDouble
z = Area(3, 5) + 2
MsgBox z
Giải thích: Hàm Area trả về một giá trị, bạn có để dùng giá trị này trong code của bạn. Ta dùng một biến khác (z) để làm điều đó: Lấy giá trị của hàm Area(3, 5) cộng thêm 2, và hiển thị giá trị của biểu thức (z) bằng MsgBox.
Kết quả khi click vào command button:
Sub
Nếu bạn muốn Excel VBA thực hiện một số hành động nào đó, bạn có thể sử dụng Sub. Đặt một Sub vào một module (Trong Visual Basic Editor, nhấn Insert, Module). Ví dụ Sub Area.
Sub Area(x AsDouble, y AsDouble)
MsgBox x * y
EndSub
Giải thích: sub này có hai đối số (kiểu Double ). Nó không trả về một giá trị cụ thể, bạn có thể tham chiếu Sub này (gọi sub) từ các nơi khác trong code của bạn bằng cách sử dụng tên của Sub và truyền vào giá trị cho các đối số.
Đặt command button vào worksheet của bạn và paste đoạn code bên dưới:
Area 3, 5
Kết quả khi click vào command button:
Bạn có thể thấy sự khác biệt giữa các function và Sub? Function trả về giá trị 15. Ta có thể cộng thêm 2 cho kết quả này và hiển thị giá trị cuối cùng. Còn khi gọi sub chúng ta không sử dụng kết quả (15) để xử lý được, bởi vì Sub không trả về một giá trị! Sub thực hiện hành động mà người lập trình yêu cầu.
Để lại một bình luận