VBA ByRef | Truyền đối số bằng hàm ByRef trong Excel VBA

Đối số hàm ByRef trong Excel VBA

ByRef trong VBA là một hàm được gọi dưới dạng tham chiếu trong đó chúng tôi cung cấp tham chiếu đến bất kỳ đối số nào trong mã của chúng tôi, khi chúng tôi tạo các hàm tùy chỉnh và chúng tôi muốn sử dụng giá trị của bất kỳ biến nào được xác định trước đó trước hàm mà chúng tôi sử dụng hàm ByRef, cú pháp để sử dụng rất đơn giản như Chức năng Tên-Tên (Biến ByRef làm Kiểu dữ liệu).

Bằng cách sử dụng Byref, chúng ta có thể trỏ đến giá trị biến ban đầu mà không làm thay đổi giá trị biến. Điều này giống như việc truyền trực tiếp giá trị biến đến quy trình con VBA hoặc hàm VBA.

Làm thế nào để vượt qua đối số bằng VBA ByRef Argument?

Bạn có thể tải xuống Mẫu VBA ByRef Excel này tại đây - Mẫu VBA ByRef Excel

Ví dụ 1

Để có ví dụ, hãy xem mã VBA bên dưới.

Mã 1:

 Thủ tục con 1 () Dim k As Integer k = 50 Thủ tục2 k MsgBox k End Sub 

Mã 2:

 Thủ tục con 2 (ByRef k As Integer) k = k + 10 End Sub 

Trong thủ tục đầu tiên, tôi đã khai báo biến “k” là Số nguyên.

Sau đó, tôi đã gán giá trị cho biến này là 50.

Sau đó tôi đã thêm một dòng mới tức là

Thủ tục2 k

Đây là tên thủ tục thứ hai. Trong quy trình này, tôi đã khai báo biến trong ngoặc đơn là Chuỗi trong VBA nhưng tôi đã sử dụng từ “ByRef”.

 ByRef k As Integer 

Ở đây tôi đã gán giá trị của biến “k” là

k = k + 10

Ok, bây giờ tôi sẽ chạy mã từng bước bằng cách nhấn phím F8.

Nhấn phím F8 thêm hai lần nữa và đặt con trỏ vào biến “k” để xem giá trị của biến “k”.

Vì chúng ta đã gán giá trị là 50 nên nó đang hiển thị giá trị là 50. Bây giờ nó đã tô sáng dòng Thủ tục2 k là tên thủ tục thứ hai.

Nếu tôi nhấn phím F8 bây giờ, nó sẽ nhảy ra khỏi quy trình hiện tại và chuyển sang quy trình thứ hai.

Bây giờ vì chúng ta đã sử dụng từ ByRef nên nó đã mang giá trị biến “k” từ quy trình trên.

Nhấn phím F8 hai lần, nó sẽ quay lại quy trình con trước đó. Nếu bạn nhận thấy trong quy trình thứ hai, tôi đã áp dụng công thức là k = k + 10. tức là giá trị “k” là 50 thì thêm 10 nữa vào đó tức là tổng cộng là 60.

Bây giờ mã đang chạy trong thủ tục đầu tiên và trong thủ tục này giá trị “k” là 50. Nhưng nhấn phím F8 và xem kết quả trong hộp thông báo.

Chúng tôi nhận được kết quả là 60 thay vì giá trị mặc định là 50 trong quy trình này.

Lý do tại sao chúng tôi nhận được 60 bởi vì trong quy trình thứ hai, chúng tôi đã áp dụng "ByRef", do đó, nó mang kết quả phương trình (k = k + 10) cho quy trình hiện tại.

Ở đây giá trị “k” của biến đầu tiên là 50 và trong biến thủ tục thứ hai, giá trị “k” là k + 10 tức là 60 được chuyển đến thủ tục đầu tiên.

Trong quy trình đầu tiên, giá trị ban đầu của biến “k” là 50, vì vậy By Ref đã thay đổi giá trị ban đầu từ 50 thành 60 bằng cách thực hiện phương trình k = k + 10 tức là k = 50 +10 = 60.

Ví dụ số 2

Bây giờ hãy xem thêm một ví dụ.

Mã 1:

 Sub P1 () Dim MyNumber As Long MyNumber = 1 Call Change_ByRef (MyNumber) 'MyNumber được thay đổi bằng thủ tục Change_ByRef MsgBox "My Number is now:" & MyNumber End Sub 

Mã 2:

 Sub Change_ByRef (ByRef NewNumber As Long) NewNumber = 14 End Sub 

Điều này hoạt động chính xác giống như mã trước đó.

Ban đầu, giá trị của biến “MyNumber” là 1. Sau đó, chúng tôi gọi thủ tục dưới đây bằng tên của nó

 Gọi Change_ByRef (MyNumber)

Trong thủ tục đó, giá trị của biến là 14.

Vì vậy, khi quay lại quy trình trước đó, nó sẽ gán giá trị mới cho biến là 14.


$config[zx-auto] not found$config[zx-overlay] not found