Tự động chạy macro khi thay đổi giá trị Cell

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

pham ha 94

Thành viên chính thức
Tham gia
13/12/22
Bài viết
86
Được thích
6
Mình có file đính kèm. Tại sheet “Thong tin chung”, khi sửa nội dung của ô D4 hoặc D12 thì macro tự chạy xóa nội dung tại vùng D33+D34.
Mình sử dụng nhưng khi chạy vẫn thấy báo lỗi “user defined type not defined vba”
Nhờ các bác xem giúp lý do vì sao báo lỗi và cách khắc phục.
Em cảm ơn
 
Mình có file đính kèm. Tại sheet “Thong tin chung”, khi sửa nội dung của ô D4 hoặc D12 thì macro tự chạy xóa nội dung tại vùng D33+D34.
Mình sử dụng nhưng khi chạy vẫn thấy báo lỗi “user defined type not defined vba”
Nhờ các bác xem giúp lý do vì sao báo lỗi và cách khắc phục.
Em cảm ơn
Bạn thử thay
Private Sub XoaND()
thành
Sub XoaND()
tức là bỏ "Private" đi xem được không nhé
 
Upvote 0
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.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom