+ Byval: là từ viết tắt của By Value, nghĩa là truyền bằng trị. Phương pháp này không làm thay đổi giá trị của nội dung của biến khai báo bởi từ khóa Byval
+ Byref: là từ viết tắt của By Reference, nghĩa là truyền bằng tham khảo. Phương pháp này cho phép thay đổi nội dung của biến được khai báo bởi từ khóa Byref. Mục đích là nếu ta muốn trả về nhiều giá trị chứ không phải 1 thì ta dùng cách này. Nếu chỉ trả về 1 giá trị thì ta trả về giá trị của hàm thôi. Các bạn cứ xem ví dụ dưới đây sẽ hiểu rõ ah:
VD phân biệt 2 từ khóa Byval và Byref
Public Function GetDateFromString(ByVal sDate As String, ByRef iDay As Integer, ByRef iMonth As Integer, ByRef iYear As Integer) As Long
On Error GoTo Loi
Dim aDate As Date
aDate = Format(sDate, "dd/mm/yyyy")
iDay = Day(aDate) ' Trả về ngày cho biến iDay
iMonth = Month(aDate) ' Trả về tháng cho biến iMonth
iYear = Year(aDate) ' Trả về năm cho biến iYear
GetDateFromString = 1
Exit Function
Loi:
GetDateFromString = 0
End Function
Khi đó, muốn sử dụng hàm GetDateFromString thì ta làm như sau
Dim a As Integer, b As Integer, c As Integer ' Khai báo các biến trả về cho iDate, iMonth, iYear
If GetDateFromString("29/06/2006", a, b, c) = 1 Then ' Nếu không xảy ra lỗi
MsgBox a & "," & b & "," & c ' Khi này các biến a,b,c đã được hàm trả về giá trị của nó
End If