-
RE: Một số hàm liên quan đến ngày tháng và tính toán
Xuân Thanh > 09-02-20, 09:25 AM
(09-02-20, 08:29 AM)tracanhtam Đã viết: Cám ơn bạn ongke0711 rất nhiều, tôi đã chạy được code như bạn hướng dẫn. Còn cột tuần là cố định theo năm từ 1 đến 37, vậy nếu muốn đánh số từ 1 đến 37 bằng code trên access thì làm thế nào vậy bạn, xin cám ơn (Table gồm Tuannamhoc(khóa chính),tungay,denngay)
Đây mới là yêu cầu cụ thể của bài toán. Nếu chủ topic nói rõ ngay từ đầu thì dễ cho người hỗ trợ. Nên rút kinh nghiệm cho những lần sau
Với bài toán này có nhiều cách giải. Dưới đây là một cách
Tạo hai table
1/ Table tblNamHoc gồm 2 trường NamHoc(Khóa chính), NgayKhaiGiang
2/ Table tblTuanNamHoc gồm 3 trường như của bạn : Tuan(Khóa chính), NgayDauTuan, NgayCuoiTuan
Chạy code sau để cập nhật toàn bộ 37 Record vào tblTuanNamHoc
Mã PHP:Sub TaoLichTuan()
Dim i As Integer, Ngay As Date
Dim NamHoc As DAO.Recordset
Dim Tuan As DAO.Recordset
Set NamHoc = CurrentDb.OpenRecordset("tblNamHoc", dbOpenDynaset)
Set Tuan = CurrentDb.OpenRecordset("tblTuanNamHoc", dbOpenDynaset)
If Tuan.RecordCount > 0 Then CurrentDb.Execute "Delete From tblTuanNamHoc"
If NamHoc!NgayKhaiGiang = "" Then
MsgBox "Chua nhap ngay khai giang"
Exit Sub
Else
Ngay = NamHoc!NgayKhaiGiang
End If
For i = 1 To 37
Tuan.AddNew
Tuan!TuanNamHoc = i
If i = 1 Then Tuan!NgayDauTuan = Ngay Else Tuan!NgayDauTuan = Ngay + (i - 1) * 7
Tuan!NgayCuoiTuan = Tuan!NgayDauTuan + 5
Tuan.Update
Next
End Sub
Nói rõ thêm code trên chỉ chạy được khi tblNamHoc chỉ có duy nhất một record. Nếu muốn sử dụng cho nhiều năm học thì phải dùng form và cấu trúc lại Table tblTuannamHoc thêm một trường NamHoc nữa -
RE: Một số hàm liên quan đến ngày tháng và tính toán
ongke0711 > 09-02-20, 10:21 AM
(09-02-20, 09:25 AM)Xuân Thanh Đã viết:
Mã PHP:Sub TaoLichTuan()
Dim i As Integer, Ngay As Date
Dim NamHoc As DAO.Recordset
Dim Tuan As DAO.Recordset
Set NamHoc = CurrentDb.OpenRecordset("tblNamHoc", dbOpenDynaset)
Set Tuan = CurrentDb.OpenRecordset("tblTuanNamHoc", dbOpenDynaset)
If Tuan.RecordCount > 0 Then CurrentDb.Execute "Delete From tblTuanNamHoc"
If NamHoc!NgayKhaiGiang = "" Then
MsgBox "Chua nhap ngay khai giang"
Exit Sub
Else
Ngay = NamHoc!NgayKhaiGiang
End If
For i = 1 To 37
Tuan.AddNew
Tuan!TuanNamHoc = i
If i = 1 Then Tuan!NgayDauTuan = Ngay Else Tuan!NgayDauTuan = Ngay + (i - 1) * 7
Tuan!NgayCuoiTuan = Tuan!NgayDauTuan + 5
Tuan.Update
Next
End Sub
Tôi nghĩ code của bác Xuân Thanh chưa đáp ứng đúng yêu cầu của chủ thớt đâu. Vì số tuần 1 -37 là liền mạch nhưng trong đó sẽ có đoạn [Từ Ngày] [Đến Ngày] sẽ bị nhảy cóc, không liền mạch. Phải loại bỏ những ngày được nghỉ ra rồi tạo tuần. -
RE: Một số hàm liên quan đến ngày tháng và tính toán
tracanhtam > 09-02-20, 10:42 AM
(09-02-20, 10:21 AM)ongke0711 Đã viết:
Bạn ongke0711 nói rất đúng ý của tôi, cách làm của bạn Xuân Thanh rất hay, chỉ 1 cái clich chuột. Nhưng nếu các tuần nó không liên tục, tôi muốn nhập từ tuần a đến tuần b, ví dụ : 1->18,19->21, 22 đến 37. Rất cám ơn mọi người đã giúp đở.(09-02-20, 09:25 AM)Xuân Thanh Đã viết:
Mã PHP:Sub TaoLichTuan()
Dim i As Integer, Ngay As Date
Dim NamHoc As DAO.Recordset
Dim Tuan As DAO.Recordset
Set NamHoc = CurrentDb.OpenRecordset("tblNamHoc", dbOpenDynaset)
Set Tuan = CurrentDb.OpenRecordset("tblTuanNamHoc", dbOpenDynaset)
If Tuan.RecordCount > 0 Then CurrentDb.Execute "Delete From tblTuanNamHoc"
If NamHoc!NgayKhaiGiang = "" Then
MsgBox "Chua nhap ngay khai giang"
Exit Sub
Else
Ngay = NamHoc!NgayKhaiGiang
End If
For i = 1 To 37
Tuan.AddNew
Tuan!TuanNamHoc = i
If i = 1 Then Tuan!NgayDauTuan = Ngay Else Tuan!NgayDauTuan = Ngay + (i - 1) * 7
Tuan!NgayCuoiTuan = Tuan!NgayDauTuan + 5
Tuan.Update
Next
End Sub
Tôi nghĩ code của bác Xuân Thanh chưa đáp ứng đúng yêu cầu của chủ thớt đâu. Vì số tuần 1 -37 là liền mạch nhưng trong đó sẽ có đoạn [Từ Ngày] [Đến Ngày] sẽ bị nhảy cóc, không liền mạch. Phải loại bỏ những ngày được nghỉ ra rồi tạo tuần. -
RE: Một số hàm liên quan đến ngày tháng và tính toán
Xuân Thanh > 09-02-20, 10:54 AM
Như tôi đã nói ở bài trước, việc tạo lịch tuần cho cả năm học là việc đương nhiên phải như thế, không thể bỏ cách tuần được.
Còn việc sử dụng thời gian của tuần đó vào việc gì thì lại là chuyện khác. Dựa vào cái tblTuanNamHoc này muốn làm cái gì trong đó chả được. Ví dụ muốn trích xuất tư tuần 21 đến 35 thì lấy trong đó ra sử dụng vào mục đích khác như ongke0711 đã nói ở trên
Nói chung là yêu cầu của chủ thớt không rõ ràng thì không thể giải quyết được cái gì hết. Xem lại câu hỏi của chủ thớt sẽ rõ tại sao tôi nói như vậy
(09-02-20, 08:29 AM)tracanhtam Đã viết: Cám ơn bạn ongke0711 rất nhiều, tôi đã chạy được code như bạn hướng dẫn. Còn cột tuần là cố định theo năm từ 1 đến 37, vậy nếu muốn thêm số tuần từ 1 đến 37 (37 record cho cột tuần) bằng code trên access thì làm thế nào vậy bạn, xin cám ơn (Table gồm Tuannamhoc(khóa chính),tungay,denngay)
-
RE: Một số hàm liên quan đến ngày tháng và tính toán
ongke0711 > 09-02-20, 02:23 PM
Bạn xem file demo này.
Link: http://www.mediafire.com/file/lb2sjh64xp...accdb/file
- Bạn phải cập nhật ngay từ đầu các tuần nghỉ học vào table "tblNgayNghiLe" khi qua năm học mới.
- Các tuần nghỉ phải là chẳn tuần thì code mới chạy đúng. Tức là nghỉ nguyên tuần chứ không nghĩ lẻ mấy ngày giữa tuần.
Bạn test các trường hợp xem có chạy đúng không.
@XuanThanh: có thể bạn chủ thớt muốn tạo sẳn table Tuần học theo qui ước riêng để dễ xử lý hơn cho các truy vấn sau đó chứ thực ra dùng thẳng luôn số tuần của hệ thống cũng được nhưng cách tổ chức xử lý dữ liệu phải khác đi mà bạn chủ thớt chưa làm được. -
RE: Một số hàm liên quan đến ngày tháng và tính toán
Xuân Thanh > 09-02-20, 03:48 PM
(09-02-20, 02:23 PM)ongke0711 Đã viết: Bạn xem file demo này.
Link: http://www.mediafire.com/file/lb2sjh64xp...accdb/file
- Bạn phải cập nhật ngay từ đầu các tuần nghỉ học vào table "tblNgayNghiLe" khi qua năm học mới.
- Các tuần nghỉ phải là chẳn tuần thì code mới chạy đúng. Tức là nghỉ nguyên tuần chứ không nghĩ lẻ mấy ngày giữa tuần.
Bạn test các trường hợp xem có chạy đúng không.
@XuanThanh: có thể bạn chủ thớt muốn tạo sẳn table Tuần học theo qui ước riêng để dễ xử lý hơn cho các truy vấn sau đó chứ thực ra dùng thẳng luôn số tuần của hệ thống cũng được nhưng cách tổ chức xử lý dữ liệu phải khác đi mà bạn chủ thớt chưa làm được.
1/ Nếu nói rõ ngay từ đầu thì hướng giải quyết sẽ dễ hơn, đâu phải mò mẫm?
2/ Không thể nghỉ nguyên tuần được đâu ongke0711 vì luật giáo dục không cho phép -
RE: Một số hàm liên quan đến ngày tháng và tính toán
tracanhtam > 09-02-20, 05:23 PM
(09-02-20, 02:23 PM)ongke0711 Đã viết: Bạn xem file demo này.
Cám ơn bạn ongke0711 rất nhiều, cách làm của bạn rất hay, tôi đã test thấy đúng hết. Nhưng nếu xảy ra trường hợp có 1 tuần nào đó mà nghỉ không trọn 1 tuần thì mình nhập thủ công cho tuần đó, vậy sang tuần sau nữa nó trở lại như cũ thì mình có giải quyết được không, xin cám ơn.
Link: http://www.mediafire.com/file/lb2sjh64xp...accdb/file
- Bạn phải cập nhật ngay từ đầu các tuần nghỉ học vào table "tblNgayNghiLe" khi qua năm học mới.
- Các tuần nghỉ phải là chẳn tuần thì code mới chạy đúng. Tức là nghỉ nguyên tuần chứ không nghĩ lẻ mấy ngày giữa tuần.
Bạn test các trường hợp xem có chạy đúng không.
@XuanThanh: có thể bạn chủ thớt muốn tạo sẳn table Tuần học theo qui ước riêng để dễ xử lý hơn cho các truy vấn sau đó chứ thực ra dùng thẳng luôn số tuần của hệ thống cũng được nhưng cách tổ chức xử lý dữ liệu phải khác đi mà bạn chủ thớt chưa làm được. -
RE: Một số hàm liên quan đến ngày tháng và tính toán
ongke0711 > 09-02-20, 05:33 PM
(09-02-20, 05:23 PM)tracanhtam Đã viết: Cám ơn bạn ongke0711 rất nhiều, cách làm của bạn rất hay, tôi đã test thấy đúng hết. Nhưng nếu xảy ra trường hợp có 1 tuần nào đó mà nghỉ không trọn 1 tuần thì mình nhập thủ công cho tuần đó, vậy sang tuần sau nữa nó trở lại như cũ thì mình có giải quyết được không, xin cám ơn.
Bạn nên đưa ra (dự kiến trước) tất cả các trường hợp có thể phát sinh, dùng file Excel cũng được.
Liệt kê từng trường hợp một với ví dụ mình hoạ. -
RE: Một số hàm liên quan đến ngày tháng và tính toán
Xuân Thanh > 09-02-20, 06:53 PM
(09-02-20, 05:23 PM)tracanhtam Đã viết: Cám ơn bạn ongke0711 rất nhiều, cách làm của bạn rất hay, tôi đã test thấy đúng hết. Nhưng nếu xảy ra trường hợp có 1 tuần nào đó mà nghỉ không trọn 1 tuần thì mình nhập thủ công cho tuần đó, vậy sang tuần sau nữa nó trở lại như cũ thì mình có giải quyết được không, xin cám ơn.
Một cách khác để nhập là nhập theo thứ tự tuần chỉ định. Ví dụ nhập từ tuần 3 đến tuần 8. Xác định ngày đâu tiên và ngày kết thúc cần nhập, VBA sẽ tự tính toán số ngày trong tuần để nhập, không sót một ngày nào
Ví dụ : Dữ liệu đầu vào gồm
Từ tuần 3, ngày đầu tiên 04/02/2020(Thứ ba) đến tuần 7, ngày cuối cùng 05/03/2020(Thứ 5). Kết Quả là
Tuan TuNgay DenNgay
3 04/02/2020 08/02/2020
4 10/02/2020 15/02/2020
5 17/02/2020 22/02/2020
6 24/02/2020 29/02/2020
7 02/03/2020 05/03/2020
Số lượng tuần phải tương đương số ngày trong khoảng ngày đầu tiên và ngày kết thúc nếu không sẽ sót(Xem trong khoảng thời gian chỉ định có bao nhiêu tuần để đưa dữ liệu đầu vào cho đúng). Làm như thế thì không phải nghỉ nguyên tuần, chỉ cần chọn khoảng thời gian làm việc tương ứng theo tuần là được. Với cách làm này không thể tạo nguyên năm được
Xem file đính kèm -
RE: Một số hàm liên quan đến ngày tháng và tính toán
tracanhtam > 09-02-20, 11:54 PM
(09-02-20, 05:33 PM)ongke0711 Đã viết:
1/ Bạn xem file này có những tình huống không trọn một tuần(09-02-20, 05:23 PM)tracanhtam Đã viết: Cám ơn bạn ongke0711 rất nhiều, cách làm của bạn rất hay, tôi đã test thấy đúng hết. Nhưng nếu xảy ra trường hợp có 1 tuần nào đó mà nghỉ không trọn 1 tuần thì mình nhập thủ công cho tuần đó, vậy sang tuần sau nữa nó trở lại như cũ thì mình có giải quyết được không, xin cám ơn.
Bạn nên đưa ra (dự kiến trước) tất cả các trường hợp có thể phát sinh, dùng file Excel cũng được.
Liệt kê từng trường hợp một với ví dụ mình hoạ.
https://drive.google.com/open?id=1qAODKg...fIkTtHaHHO
2/ File bạn gởi bị lổi khi table tblNgayNghiLe rỗng
3/ Sau khi làm lịch tuần rồi thì có cách nào gộp 2 table tblNgayNghiLe và table tblTuanHoc thành một được không.
Xin cám ơn bạn rất nhiều