Là cách truyền tham số trong hàm trong VBA nói riêng và các ngôn ngữ lập trình khác.
Trong VBA (Visual Basic for Applications), ByRef và ByVal là hai cách để truyền tham số vào một hàm hoặc thủ tục (subroutine).
Chúng xác định cách tham số được truyền vào: theo tham chiếu hoặc theo giá trị. Sự khác biệt giữa chúng có thể ảnh hưởng đến cách mà giá trị của biến được thay đổi trong hàm hoặc thủ tục đó.
Khi một tham số được truyền bằng ByRef, nó sẽ truyền tham chiếu tới địa chỉ bộ nhớ của biến gốc. Điều này có nghĩa là nếu giá trị của tham số thay đổi trong hàm hoặc thủ tục, thì giá trị của biến gốc sẽ thay đổi theo.
Dùng ByRef khi bạn muốn thay đổi giá trị của biến gốc bên ngoài hàm hoặc thủ tục.
Ví dụ:
Sub ExampleByRef()
Dim x As Integer
x = 5
Call ChangeValueByRef(x)
MsgBox x ' Kết quả sẽ là 10
End Sub
Sub ChangeValueByRef(ByRef num As Integer)
num = 10 ' Thay đổi giá trị của tham số, và cũng thay đổi giá trị của x
End Sub
Khi một tham số được truyền bằng ByVal, chỉ có giá trị của biến được sao chép và truyền vào hàm hoặc thủ tục. Mọi thay đổi trong hàm hoặc thủ tục chỉ ảnh hưởng đến bản sao của tham số, không làm thay đổi giá trị của biến gốc.
Dùng ByVal khi bạn không muốn giá trị của biến gốc bị thay đổi trong hàm hoặc thủ tục.
Ví dụ:
Sub ExampleByVal()
Dim x As Integer
x = 5
Call ChangeValueByVal(x)
MsgBox x ' Kết quả vẫn là 5
End Sub
Sub ChangeValueByVal(ByVal num As Integer)
num = 10 ' Chỉ thay đổi bản sao của num, không ảnh hưởng đến x
End Sub
Private Sub Command0_Click()
Dim so As Integer
so = 50
MsgBox so ' gia tri ban dau
CongThem so
MsgBox so ' dòng *
End Sub
Sub CongThem(ByRef k As Integer)
k = k + 10
End Sub
* Thông thường thì ' dòng * sẽ in là 50, nhưng khi có byRef biến số được + 10 vì ByRef đã tham chiếu biến thay đổi giá trị
Private Sub Command0_Click()
Dim so As Integer
so = 50
MsgBox so ' gia tri ban dau
CongThem so
MsgBox so ' dòng *
End Sub
Sub CongThem(ByVal k As Integer)
k = k + 10
End Sub
Kết quả là 50 chứ không giúp ví dụ 1, suy ra là khi gọi hàm hay thủ tục cần thay đổi giá trị biến truyền vào hãy sử dụng byRef
Tìm kiếm:
Cdoe vba về ByRef và ByVal truyền tham chiếu và giá trị trong VBA