Bài 7 gợi ý hàm Instr, nhưng bài 8 ứ chịu
Bài #8 có nói: "dùng hàm có sẵn của
Excel"
Tuy tôi không tin là thớt hoàn toàn hiểu mình muốn gì, và hậu quả của nó, nhưng tôi nghĩ sẵn tiện ở đây mình có thể thử phân biệt mấy thứ này.
Điểm khác nhau là hàm InStr chỉ giản dị tìm chuỗi, và có thể dùng phân biệt hoa/thường hoặc không phân biệt. Trong khi đó, hàm Search của Excel không phân biệt hoa/thường và đặc biệt là có thể dò với wildcards (điểm này nên để ý vì InStr không làm được).
Phần sau đây đòi hỏi kiến thức kha khá về lý thuyết. Người mới học nên bỏ qua.
Nói Gọn: Hàm InStr là hàm căn bản của VBA (và nhiều phiên bản Basic). Hàm Search là hàm của Worksheetfunction, và vì vậy, nếu VBA chạy trong Access thì không thể sử dụng nó.
Nói chi tiết:
Không kể các hàm người dùng viết ra, ở đây chúng ta có hai loại hàm: hàm cung cấp từ VBA và hàm cung cấp từ ứng dụng tức Application, trong ngữ cảnh Excel thì là nhóm hàm Worksheetfunction.
Để gọi hàm Wotksheetfunction, ta dùng tiền tố Wotksheetfunction, tức là lôi cổ đối tượng (object) Wotksheetfunction lên mà gọi hàm của nó.
Như đã nói ở những bài trước đây, hầu hết các hàm Worksheetfunction đều có phiên bản được ứng dụng gói trong các lớp giao diện rộng hơn để dễ sử dụng. Những phiên bản này được gọi qua đối tượng Application.
Để gọi hàm VBA, ta dùng thẳng tên hàm, không nhất thiết phải qua tiền tố VBA. Lý do là VBA là không gian chủ mặc định, trình dịch tự động biết các hàm không được người dùng viết ra là hàm VBA.
Chú thêm về hàm VBA:
Thỉnh thoảng, ta thấy có người viết code vẫn dùng tiền tố VBA khi gọi hàm. Giả sử ta đang nói về tay code xịn, biết rõ mình đang làm gì thì câu hỏi là: tại sao vậy?
Có hai lý do:
1. người viết nghĩ rằng có khả năng bị chạm têm hàm. Tức là trong một cái code module nào đó có một cái hàm trùng tên với hàm VBA.
Khi xảy ra việc trùng tên thì hàm người dùng sẽ che mất hàm VBA. Cách duy nhất để trình dịch biết là dùng tiền tố VBA.
2. nhiều hàm VBA chịu ảnh hưởng của môi trường (tức các Options). Tức là chúng có thể hoạt động hơi khác một chút, tuỳ theo các options được nêu ra ở đầu module (cũng có khi option được định cho cả application - tự tìm hiểu lấy). Để buộc hàm hoạt động đúng theo căn bản của chúng, ta thêm tiền tố VBA.
Ví dụ điển hình:
Nếu ta đặt Option Base 1 ở đầu module thì hàm Array sẽ trả về mảng bắt đầu với chỉ số 1. Để bảo đảm mảng trả về phải bắt đầu bằng chỉ số 0, ta gọi hàm VBA.Array