Không cần gọi Sub XoaND nữa, đưa thẳng "Sheet2.Range("D33: D34").ClearContents" thay cho "Call XoaND:
Cách đưa các thông số có thể chỉnh sửa vào Module chính là cách đúng đắn của lập trình cấu trúc (Structured Programming)
Khi cần đổi thông số, người ta biết Module nào có thể chỉnh được. Các Modules khác chứa những hàm/phương thức làm việc thường xuyên và gần như không cần chỉnh sửa.
Chỉ là trên nguyên tắc, một module phải có tối thiểu 1 Sub/Function Public. Nếu không thì cái module ấy chứa toàn private, chơi với ai?
Lý thuyết: một module là một gói kín. Các phương thức và thuộc tính (các biến khai báo bên ngoài sub/function) có tính chất sau:
1. Nếu khai bào là Private thì chúng không thể "nhìn thấy được" từ bên ngoài.
2. Nếu khai báo Public thì chúng là chỗ liên lạc với các module khác. Tiếng chuyên môn gọi là giao diện (interface)
Vì vậy, những phương thức và thuộc tính cần thiết để các Modules khác sờ tới thì khai là Public, Chỗ còn lại chỉ dùng bên trong Module thì nên đặt Private.
Theo kinh nghiệm thì giao diện (mớ Public) càng giản dị càng tốt. Nhưng bắt buộc một Modukle phải có tói thiểu 1 cái gì đó trong giao diện. Nếu không thì nó gói kín mit luôn, hết xài.
Kết luận theo đề bài này:
Hình như trước đó cái Sub XoaND được đặt bên trong Module nào đó, và được một hàm trong Module ấy gọi. Sau này thớt lập Module1, lấy nó ra cho vào mà quên rằng Module1 chưa có giao diện.