Một điều khá quan trọng trong VBA đó là truyền tham chiếu và giá trị vào một Sub hoặc Function.
Từ khóa ByRef được sử dụng để truyền tham chiếu và từ khóa ByVal được sử dụng để truyền giá trị. Trong trường hợp bạn không sử dụng từ khóa nào thì đó là trường hợp truyền giá trị.
Truyền tham chiếu là truyền địa chỉ ô nhớ của biến, do đó khi thay đổi giá trị của biến bên trong thủ tục thì giá trị của biến cũng bị thay đổi bên ngoài thủ tục.
Truyền giá trị là truyền giá trị của biến (không phải là địa chỉ ô nhớ), thủ tục sẽ tự động tạo ra một địa chỉ ô nhớ mới để lưu trữ giá trị này, do đó khi thay đổi giá trị của biến truyền vào thủ tục thì giá trị của biến không bị thay đổi bên ngoài thủ tục.
Nội dung chính
Ví dụ truyền tham chiếu và giá trị
Dưới đây là ví dụ truyền tham chiếu và giá trị trong VBA.
Sub PassTypeExample() Dim test As Integer test = 50 Call PassByValue(test) ' hien thi 50 MsgBox "test = " & test Call PassByReference(test) ' hien thi 100 MsgBox "test = " & test Call PassByReference(test) ' hien thi 100 MsgBox "test = " & test End Sub Sub PassByValue(ByVal test As Integer) ' value chi bi thay doi ben trong thu tuc test = 100 End Sub Sub PassByReference(ByRef test As Integer) ' value cung bi thay doi ben ngoai thu tuc test = 100 End Sub Sub PassByValue2(test As Integer) ' value chi bi thay doi ben trong thu tuc test = 200 End Sub
Kết quả:
test = 50 test = 100 test = 100