Chào các bạn,
Tôi mới làm xong một sheet nhập dữ liệu để tạo ra hai Văn bản theo yêu cầu. Bây giờ tôi muốn thêm 2 nút chọn (kiểu như previou và next )để hiển thị lại các văn bản cũ dựa trên dữ liệu trong sheet Data đã nhập.
Xin hỏi các bạn có ý tưởng nào thực hiện hiệu quả, code cần viết sẽ ngắn không ?
Nếu mọi người có góp ý chỉnh sửa gì thì tôi rất sẵn lòng tiếp thu và cám ơn.
Các sheet protect chỉ cần chọn unprotect.
Chào bạn
tuanqnbd,
Mình xin góp ý một chút nhé:
1. Sheet("Data") của bạn không chứa dữ liệu của một số Range trong sheet nhập dữ liệu (ví dụ: Range("SoHDTD"), Range("TriGiaHDTD"), Range("NGayKYHDTD"), v.v...); vậy làm sao lấy dữ liệu từ sheet("Data") để ghi ngược lại vào sheet("Nhap du lieu") ??
2. Nút
tạo mới của bạn: thực hiện thao tác copy dòng cuối cùng trong sheet("Data") xuống dòng kế dưới, lúc đó số BCRR không thay đổi? Như vậy Key để xem xét dòng dữ liệu này khác với dòng dữ liệu kia là không có!
3. Đề nghị:
- Số BCRR là kiểu dữ liệu số và sẽ tự động nhảy kế tiếp khi ta tạo mới dữ liệu và phải đảm bảo là số BCRR bên sheet("Data") là duy nhất (gọi là
Primary Key);
- Dữ liệu mới cần lưu vào sheet("Data") phải là dữ liệu từ bên sheet("Nhap du lieu");
- Tất cả các ô nhập liệu bên sheet("Nhap du lieu") phải được lưu vào sheet("Data").
Với đề nghị trên, nếu bạn đồng ý, có thể chúng ta sẽ phải thiết kế lại cấu trúc sheet("Data") của bạn và cũng có lẽ sẽ phải chỉnh hầu như toàn bộ code của bạn.
Riêng yêu cầu cho hai nút Previous và Next record để xem lại dữ liệu đã lưu bên sheet("Data"), thực sự không khó! Cách làm tuần tự như sau:
A. Previous Record:
1. Từ vị trí hiện tại của số BCRR bên sheet("Nhap du lieu"), tạo một biến
MySoBCRR = Range("SoBCRR")-1
2. Tìm giá trị của MyBCRR bên cột A của sheet("Data"), dùng phương thức Find (xem sơ lượt về phương thức Find
tại đây)
3. Nếu không tìm thấy thì cho ra thông báo "không có dữ liệu trước đó để xem!, nếu có thì tại vị trí dòng của ô tìm được, gán lần lượt giá trị các ô tại các cột từ trái qua phải trên cùng dòng dữ liệu đó tương ứng với từng Range nhập liệu tại sheet("Nhap du lieu") - Dùng
Offset.
B. Next Record:
1. Từ vị trí hiện tại của số BCRR bên sheet("Nhap du lieu"), tạo một biến
MySoBCRR = Range("SoBCRR")+1
2. Tìm giá trị của MyBCRR bên cột A của sheet("Data"), dùng phương thức Find (xem sơ lượt về phương thức Find
tại đây)
3. Nếu không tìm thấy thì cho ra thông báo "không có dữ liệu kế tiếp để xem!, nếu có thì tại vị trí dòng của ô tìm được, gán lần lượt giá trị các ô tại các cột từ trái qua phải trên cùng dòng dữ liệu đó tương ứng với từng Range nhập liệu tại sheet("Nhap du lieu") - Dùng
Offset.
Bạn có thể tham khảo file mình đính kèm (mình cũng đang viết dở dang chưa xong, nhưng phần Edit dữ liệu thì cũng tương đối hoàn chỉnh).
Từ sheet("Entry"), bạn click vào nút Edit, sau đó chọn chứng từ cần xem lại/chỉnh sửa. Đây là một trong những cách xem lại dữ liệu và chỉnh sửa trực quan. bạn có thể sort theo từng tiêu chí khác nhau cho từng record khác nhau!
Ban tham khảo code mình viết trong file đính kèm nhé!
Thân.