Excel VBA ByRef và ByVal
Bạn có thể chuyển các đối số cho một thủ tục (hàm hoặc con) bằng tham chiếu hoặc theo giá trị. Theo mặc định, Excel VBA chuyển đối số theo tham chiếu. Như mọi khi, chúng tôi sẽ sử dụng một ví dụ dễ hiểu để làm cho mọi thứ rõ ràng hơn.
Đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã sau:
Dim x As Integer x = 10 MsgBox Triple(x) MsgBox x
Mã này gọi hàm Triple. Đó là kết quả của MsgBox thứ hai mà chúng tôi quan tâm. Các chức năng cần được đặt vào một mô-đun.
-
Mở Trình soạn thảo Visual Basic và nhấp vào Chèn, Mô-đun.
-
Thêm các dòng mã sau:
Function Triple(ByRef x As Integer) As Integer x = x 3 Triple = x End Function
Kết quả khi bạn bấm vào nút lệnh trên sheet:
-
Thay thế ByRef bằng ByVal.
Function Triple(ByVal x As Integer) As Integer x = x 3 Triple = x End Function
Kết quả khi bạn bấm vào nút lệnh trên sheet:
Giải thích: Khi truyền các đối số bằng tham chiếu, chúng tôi đang tham chiếu đến giá trị ban đầu. Giá trị của x (giá trị ban đầu) được thay đổi trong hàm. Kết quả là MsgBox thứ hai hiển thị giá trị là 30. Khi truyền các đối số theo giá trị, chúng ta đang truyền một bản sao cho hàm. Giá trị gốc không thay đổi. Kết quả là MsgBox thứ hai hiển thị giá trị 10 (giá trị ban đầu).