Truyền tham chiếu (byRef) và truyền giá trị(byVal) trong VBA Excel

Hướng dẫn code truyền tham chiếu (byRef) và truyền giá trị(byVal) trong VBA Excel và những điều tuyệt với nhất từ VBA mang lại

Nếu lập trình viên hiểu rõ byVal và byRef trong VBA Excel thì nó giúp họ giải quyết được những nghiệp vụ khó khi làm phần mềm một cách nhanh chóng.

Trước tiên đi từ dễ tới khó, thì byVal sẽ dễ hơn.

Ví dụ code VBA như sau:
Sub tong(ByVal a As Integer,ByVal b As Integer)
 MsgBox a+b
End Sub
Đoạn code trên giống với code VBA bên dưới vì, mặc định không viết trước tên biến thì nó hiển nhiên là byVal
Byval là chỉ truyền giá trị
Sub test(a As Integer,b As Integer)
  Msgbox a+b
   a=6
   b=4
End Sub
- Nếu gói sub:
a=2,b=5
test a,b thì số 2 được truyền vào biến a, số 5 được truyền vào biến b
Sau khi lệnh chạy qua test chúng ta in
Msgbox a, Msgbox b thì giá trị là 2 và 5

Như vậy nó khác thế nào với byRef , Ref viết tắt từ reference

Cũng ví dụ trên ta biết lại kiểu byRef

Sub tong(byRef a As Integer,byRef b As Integer)
   Msgbox a+b
   a=6
   b=4
End Sub
- Nếu gói sub:
a=2,b=5
test a,b thì số 2 được truyền vào biến a, số 5 được truyền vào biến b
Sau khi lệnh chạy qua test chúng ta in
Msgbox a, Msgbox b thì giá trị là 6 và 4  (phía trên sử dụng byVal là 2,5) đó là cái khác của byRef và byVal

- Lập trình viên đã dựa vào đặc điểm này mà giải quyết được nhiều bài toán khó trong phần mềm.

Tôi ví dụ: nếu bạn viết 1 function giải phương trình bậc 2 mà không sử dụng byRef thì không thể nào được.

Bởi vì 1 function chỉ trả lại 1 giá trị duy nhất (dễ hiểu hơn gọi lại trả về 1 biến duy nhất)

Nếu ta áp dụng function kết hợp bởi byRef thì giải quyết được

function giaiptb2(a,b,c,byRef x1,byRef x2) as string
  /// code
   giaiptb2= " vo nghiem / co nghiem / nghiem kep"
   x1=...
   x2=...
end function

Nhưng vậy function trên trả về được 3 giá trị
1. Giá trị kiểu string từ hàm gptb2 trả về
2. nghiệm x1
3. nghiệm x2