Nói chung anh Ndu giải thích đã rõ ràng, mình muốn thêm 1 chút thôi cho cụ thể:
Việc khai báo tường minh là cần thiết để ta có thể kiểm soát toàn bộ hệ thống biến trong chương trình, phạm vi ảnh hưởng của biến và thời gian tồn tại của biến. Trong tại 1 thời điểm sẽ có code (Sub hoặc Function) được gọi cuối cùng do người dùng hay từ Code khác chạy và có 1 số code đang ở dạng chờ chứ chưa phải dừng code. Vậy là trong bộ nhớ có các biến hệ thống và mỗi đoạn code lại có 1 số biến do người dùng tạo lập. Nếu đã Option Explicit mà 1 biến nào đó trong code không khai báo mà không báo lỗi thì cầm chắc nó đã được khai báo ở đâu đó, nhất là việc khai báo trong code không có Private thì cầm chắc giá trị của nó bị thay đổi từ đoạn code đang chạy. Việc thay đổi này ngoài chủ định của người viết Code. Khi chạy code mặc dù không sai về cú pháp, không sai về phép tính, không lỗi code nhưng kết quả sai. Việc dò tìm với chương trình lớn thật là mò kim đáy bể.
Riêng Private nó xác định phạm vi hoạt động của Code, ngoài phạm vi không thể gọi nó. Ví dụ Excel VBA có code của Application, Workbook, Worksheet theo trình tự của nó:
Application là code trong vùng các Module và Module Class.
Workbook là code trong vùng ThisWorkbook
WorkSheet là code trong vùng VBA của từng Sheet.
Theo trình tự thằng sau gọi được thằng trước chứ thằng trước không gọi được thằng sau.
Mình hiểu như vậy và viết ra khó quá, có gì sai sót thông cảm.