Hàm LEN trong VBA có nên chỉ việc ghi Len() sao lại thêm VBA.Len() chi ta? Tương tự hàm MID, hàm UCASE? Cho người ta biết là hàm của VBA thay vì WorksheetFunction hả ta? ẹc ... ẹc ...
Một số trường hợp (với file.xls, hoặc Excel2007) sẽ gặp lỗi nếu không ghi cái chữ VBA ở đầu. Em gặp vài lần rồi. Đây cũng là mẹo nên nhớ để xử lý nếu gặp lỗi báo với các functions trong VBA.
Bình thường thì mặc định không gian danh phận (namespace) của các hàm trong một code module là VBA.
Vì vậy, gọi hàm nằm trong đống hàm thư viện của VBA thì nó tự động nhận ra.
Người ta vẫn cố tình đưa tiền tố 'VBA' lên khi gọi hàm VBA là vì hai lý do (tôi đã có bài giải thích cái này một vài lần rồi):
1. Để tránh các Option trên đầu module làm thay đổi mặc định của hàm.
Điển hình nhất là hàm Array. Hàm này mặc định LBound là 0. Nếu đầu module đặt Option Base 1 thì các mảng dựng từ hàm này sẽ có LBound là 1. Dùng VBA.Array(...) sẽ bỏ qua Option, và bảo đảm LBound là 0.
2. Để gọi đích danh hàm khi có khả năng hàm này bị một hàm người dùng che mất (trùng tên).
Nếu tôi viết một hàm người dùng lây tên là Mid thì kể từ đó về sau, mọi lần gọin hàm Mid đều là gọi hàm UDF của tôi. Muốn gọi Mid nguyên thuỷ thì phải có tiền tố VBA.
Điểm này rất quan trọng khi vào một project lớn, code gom từ nhiều mối. Cũng giống như biến toàn cục, ai biết có một module nào đó người ta nổi hứng viết một hàm trùng tên với hàm có sẵn của VBA. (có thể vì lkys do đặc thù nào đó, hoặc chỉ đơn thuần là do hàm lạ, ít dùng nên người ta không biết tên)
Từ lúc biết về VBA đến nay đã xài 97-2003, 2007, 2010 và hiện nay 365 (xài lâu dài nhất là 2010), nhưng chưa bao giờ bị lỗi về hàm của VBA. Nó chỉ bị lỗi khi và chỉ khi có một Control hay Object nào đó mà nó không tương thích hoặc bị Missing trong file thay vì lỗi vào control hay đối tượng đó, nó lại báo lỗi ngay cái hàm mà hằng ngày mình dùng chả bị lỗi. Cứ bỏ check Missing là không còn bị lỗi này nữa.
Chưa bị gì hết là do chưa gặp những Project khủng mà phải gộp code do nhiều người viết. Mỗi người viết một vài modules hay vài phần (subs/funcs) của các modules.
Gặp lỗi này mà không biết hai điều tôi nêu trên thì debug khùng luôn.