Nhờ anh, chị xem code giúp em bị sai chỗ nào mà không chạy được theo ý muốn.

Lê Bá Nhẫn

Yêu THVBA nhất
@thuthuy2000 Mã học sinh này, tôi tự tạo theo tên trường, tên lớp, stt của học sinh lớp đó. Chỉ áp dụng cho lớp đó. Năm sau, thì tạo cái mới. Mã học sinh này chỉ dùng để điểm danh,...
 
T

thuthuy2000

Guest
Tạo mã để dùng được cho cả 3 năm học thì khó quá ah bác?
Ví dụ:
HDA6-2021-01 trong đó quy định 2021 là năm các em nhập học vô trường.
Như vậy người lập trình hoàn toàn tách ra được A6 là lớp.
2021 là năm vào trường.
Nếu thời điểm thống kê là 2021 : Year(Now())-2021 = 2021-2021 = 0 thì sẽ tính ra được em này đang học lớp 10 và thế là suy ra đây là lớp 10A6.
Nếu là thời điểm 2022 người lập trình tính ra được là đang học lớp 11 dựa vào Year(Now())-2021 = 2022-2021 = 1
Nếu là thời điểm 2023 khi đó người lập trình tính ra được đang học lớp 12 dựa vào Year(Now())-2021 = 2.

Học sinh chuyển lớp không cần đổi lại mã.
Giả sử lớp có 40 học sinh.
Trong đó có một em từ lớp khác chuyển sang có mã là HDA7-2021-01.
Dựa vào số lượng thống kê A6 có tới 39 em, A7 có 1 em, nên lập trình vẫn có thể cho chương trình phán đoán đây là lớp A6. Và như vậy kết quả thống kê của toàn bộ lớp đó sẽ được ghi vào sheet A6.
 

PTHhn

Yêu THVBA như điếu đổ
Ý tưởng của bạn thuthuy2000 rất khoa học đó.
Một năm học thường kéo dài từ tháng 9 tới tháng 5 năm sau.
Nên có thể viết kiểm tra thêm cả tháng:
Mã:
b1= (Year(Now())-2021 =0)
b2 = (Year(Now())-2021 =1)
b3 = Month(Now())<=9

if b1 or (b2 and b3) : Lớp 10
Tương tự cho các trường hợp 11, 12.

Đã xây dựng mã thì xây dựng như vậy, chứ ai lại năm sau tạo lại mã. Quyền lực thầy lớn quá, cứ sai khiến tùm lum dễ quá ah. Trên quan điểm lập trình, tôi cho rằng xây dựng mã mà từ đó thuận tiện cho người lập trình tính toán ra các thông tin khác, không gây thêm phiền hà cho các em học sinh cho các năm học sau thì hay hơn đấy.
 

phuonghong1997

Yêu THVBA như điếu đổ
@thuthuy2000 Năm sau, thì tạo cái mới
Năm sau tạo cái mới theo quy tắc mới hay vẫn quy tắc cũ vậy thầy?
Nếu coi quy tắc là thứ bất biến. Thì quy tắc của thầy không ổn.

Năm 2021 lớp 10A6 của quý trường có em tên là Tran Van An. Theo quy tắc của thầy em này có mã : HD10A6-01-Tran Van An
Năm 2022 lớp 10A6 của quý trường lại có em học sinh mới vào trường cũng có tên là Tran van An. Theo quy tắc của thầy em này cũng có mã HD10A6-01-Tran Van An.
Tuy nhiên không bao giờ có hai gmail trùng nhau. Em học sinh của năm 2022 không thể đặt gmail theo quy định của thầy được nữa. Vì xảy ra hiện tượng trùng lặp với học sinh khóa trước.
Như vậy thầy phải cho các em một quy tắc mới.

Nói như vậy chẳng khác nào thừa nhận quy tắc tạo mã của thầy đang có vấn đề. Và chẳng ai dám chắc là vì việc thay đổi quy tắc tạo mã có khi độ dài mã lại dài ra hay ngắn đi theo óc sáng tạo của thầy, rồi khi code không chạy được nữa, thầy thì không biết sửa, lại lên đây nhờ sửa code.

Quy tắc nên là bất biến và bằng quy tắc ấy nó phải tạo ra mã duy nhất để không xảy ra trùng lặp khi tạo gmail không chỉ cho năm học này mà còn cho cả các năm học sau.
Quy tắc bất biến là để thuận lợi cho người lập trình. Độ dài ký tự. Ý nghĩa của từng ký tự trong chuỗi ký tự.

Nếu quy tắc thay đổi mỗi hôm một kiểu, người lập trình phải sửa code, đó cũng là việc phiền hà không cần thiết do làm việc chưa khoa học đó thầy.
 
Có rất nhiều cách giúp.
Thiên lôi chỉ đâu đánh đấy, code theo ý bạn, bạn cho là giúp bạn.

Nhưng xây nhà thường phải có bản vẽ thiết kế. Nếu không, nay phát sinh vấn đề này thì sửa, mai nhà sập thì xây lại. Lập trình cũng vậy thôi. Căn nguyên của vấn đề là việc tạo mã phải khoa học.
Tại làm sao topic trước bạn tạo ra, cho tới topic này, về thuật toán đâu có khác nhau gì, vẫn là so sánh mã, nhưng bạn vẫn phải đi hỏi lại. Bởi vì mã thay đổi có xíu, bạn đã không tự xoay sở được.

Người phản biện để bạn nhìn ra tạo mã chưa khoa học, cần xem xét lại, thì bạn có khi lại tự ái mà không tiếp thu. Giải quyết vấn đề này mới là căn cơ của vấn đề.

Một số người nói không thích cái này, hay không thích cái kia, mà không nêu lý do, tôi thực sự thấy rất khó hiểu. Hoặc là cái mình chưa thạo nên ít dùng. Chứ nói không thích thì thường phải có lý do, nó không tiện lợi chỗ nào, nó bất tiện ra sao. Chứ tôi thấy dùng ADO giải quyết là tốt đâu có sao đâu.
Tôi cho rằng VBA đủ sức giải quyết bài toán này, vì VBA sinh ra là để xử lý các file văn bản, đâu có lý gì lại phải cài thêm python để chạy code.
 
T

thuthuy2000

Guest
Thì đó, năm 2022 để điểm danh em Tran Van An 10A6 thì tạo mã theo quy tắc cũ hay mới
Hay là năm 2022 thầy nghĩ không còn dạy online nữa ha
 

giaiphapvba

Administrator
Thành viên BQT
Các bạn có thể tham khảo bài viết sau để xử lý CSV UTF-8 :
 
Top