Dấu :=
Tùy theo bạn muốn hiểu theo thực hành hay lý thuyết.
Nếu muốn hiểu để thực hành thì từ bài #2 đến #4 giải thích đủ rồi. Nếu muốn lý thuyết thì đọc tiếp. Tôi chỉ giải thích cho các bạn thích nghiên cứu về lý thuyết. Đối với các bạn chỉ thích thực hành thì các giải thích sau đây hoàn toàn vô bổ:
Cái tên đi trước dấu := được gọi là tham khai báo (formal parameter) và cái tên đi sau := được gọi là tham được truyền (actual parameter)
VBA cho phép truyền tham số theo hai kiểu, kiểu măc định và kiểu đích danh.
(1) Trong kiểu mặc định, tham được truyền đúng theo dạng và thứ tự vị trí được định lúc khai báo hàm. Ví dụ hàm được khai báo là Function HamA( a, b, c ) thì lúc gọi hàm HamA( x, y, z ) các biến được kết nối theo vị trí; tức là x ứng với a (x truyền vào a), y ứng với b, z ứng với c. Các tham optional nếu đi sau cùng thì có thể miễn nhưng nếu đi trước thì phải chừa chỗ trống để compiler biết vị trí mà gán.
Theo ngôn ngữ chuyên môn, dạng khai báo hàm được gọi là mẫu (prototype). (Xem chú thích 1 và 2)
(2) Trong kiểu nêu đích danh, code gọi hàm nêu đích danh trị nào cần gán vào tham nào. Và phương pháp này dùng dấu := làm toán tử gán tham. Cùng ví dụ trên thì cách gọi đích danh tham sẽ là HamA( a:=x, b:=y, c:=z ).
Vì cách này gán tham đích danh cho nên nó không cần theo thứ tự khai báo. Tức là HamA( a:=x, b:=y, c:=z ) hoàn toàn tương đương với HamA(b:=y, a:=x, c:=z ). Lưu ý rằng nếu x, y là biểu thức thì biểu thức gán cho a luôn luôn được tính trước, vì a đươc khai báo trước trong mẫu hàm, bất luận lúc gọi hàm thì a được xếp chỗ nào.
Vậy thì nên dùng kiểu nào? Đối với hàm của bạn viết ra, và số tham của hàm ngắn thì dùng kiểu mặc định cho nhanh, và về sau bạn có nổi hứng muốn đổi tên tham thì cũng không cần phải vào tất cả những chỗ gọi hàm để đổi. Đối với hàm có số tham dài, hoặc hàm của hệ thống (của VBA,…) thì dùng kiểu đích danh dễ kiểm soát hơn. Về sau đọc lại code cũng dễ hiểu.
Chú thích 1: Đối với một số ngôn ngữ dùng dạng trình dịch 1 lượt (1-pass compiler), cái prototype rất quan trọng bởi vì hàm không thể được gọi trước khi compiler biết dạng tham của hàm. Nếu code có lệnh gọi hàm trước khi khia báo hàm thì compiler sẽ báo lỗi. Điển hình của loại này là C. VBA không phải loại này, bạn muốn khai báo hàm lúc nào cũng được, miễn là có khai báo.
Chú thích 2: Đối với một số ngôn ngữ cho phép viết hàm chồng nhau, tức là ta có thể khai nhiều hàm trùng tên nhau, thì compiler coi cái danh sách khai báo tham là chữ ký (signature) của hàm. Lúc gọi một trong những hàm cùng tên này thì compiler dựa vào chữ ký để biết cái nào mà kết nối. Ví dụ điển hình của loại ngôn ngữ này là C++.