-
Giúp dùm phương án
tranthanhan1962 > 29-11-21, 12:01 PM
Mình đang thử làm form âm lịch nhưng bị vướng 1 việc. Trong âm lịch có ngày 29-30 tháng 2 nên khi xử lý gặp lỗi. Tìm cách để chuyển nó thành text đẻ xử lý nhưng nghĩ hoài không ra có vị cao thủ nào có phương pháp giúp dùm -
RE: Giúp dùm phương án
ongke0711 > 29-11-21, 07:22 PM
Anh tạo cái Form nguyên lịch tháng hay cái Form để gõ ngày DL sẽ chuyển sang AL?
Có bộ code VBA lâu rồi của tác giả Hồ Ngọc Đức chạy tốt đó anh. -
RE: Giúp dùm phương án
tranthanhan1962 > 29-11-21, 07:44 PM
(29-11-21, 07:22 PM)ongke0711 Đã viết: Anh tạo cái Form nguyên lịch tháng hay cái Form để gõ ngày DL sẽ chuyển sang AL?
Mình đang sử dụng bộ code của bác này chuyển từ ngày dương sang ngày âm. Nhưng làm lich không chỉ có vậy còn tính can-chi năm, can chi tháng, can chi ngày. Can - chi năm, và can chi ngày dễ dàng xử lý. Nhưng code can chi tháng dính đên ngày âm lịch là 29/2 và 30/2 sẽ bị lỗi. Mình tính chuyển 2 ngày này ra chuỗi để dùng hàm IIF xử lý riêng nhưng không tìm ra cách.
Có bộ code VBA lâu rồi của tác giả Hồ Ngọc Đức chạy tốt đó anh. -
RE: Giúp dùm phương án
ongke0711 > 29-11-21, 10:12 PM
(29-11-21, 07:44 PM)tranthanhan1962 Đã viết: Nhưng code can chi tháng dính đên ngày âm lịch là 29/2 và 30/2 sẽ bị lỗi. Mình tính chuyển 2 ngày này ra chuỗi để dùng hàm IIF xử lý riêng nhưng không tìm ra cách.
Anh tính can chi ngày dựa trên ngày Dương lịch cho dễ. Đã tính ngày Dương sang Âm rồi thì đổi lại Âm sang Dương để tính Can Chi ngày:
Mã PHP:Public Function CanChiNgayAL(ByVal DDate As Date) As String ' DDate là ngày duong lich
Dim Can, Chi
Can = Array("Nhâm", "Quý", "Giáp", ChrW(7844) & "t", "Bính", ChrW(272) & "inh", "M" & ChrW(7853) & "u", "K" & ChrW(7927), "Canh", "Tân")
Chi = Array("Thân", "D" & ChrW(7853) & "u", "Tu" & ChrW(7845) & "t", "H" & ChrW(7907) & "i", "Tý", "S" & ChrW(7917) & "u", "D" & ChrW(7847) & "n", "M" & ChrW(227) & "o", _
"Thìn", "T" & ChrW(7925), "Ng" & ChrW(7885), "Mùi")
CanChiNgayAL = Can(DDate Mod 10) & " " & Chi(DDate Mod 12)
End Function -
RE: Giúp dùm phương án
tranthanhan1962 > 29-11-21, 11:33 PM
Mình đã tính được can chi của ngày, năm xử dụng mod 10 cho can và mode 12 cho chi như bạn. Ngày thì tính thẳng Dương lich, nhưng năm thì phải tính năm âm lich, năm cũng dễ chỉ cần dùng Val(Year(ngayAmLich)). Nhưng khi xử lý tháng thì phải xư lý can chi tháng 1 rỏi mới tính cho các tháng tiếp theo trong năm. cái này mình tính được vì cũng có quy luật Year(ngayAmLich) mod 5, Cac tháng giêng: 0=Mậu, 1=Canh, 2=Nhân, 3=Giáp, sao đó + month(ngayAmLich) sẽ ra các can của tháng kế tiếp. Nhưng nếu gặp ngày 29/2 hoăc 30/2 thì month(ngayAmLich) sẽ báo lỗi, Phương pháp chung vẫn xử dung array Can, chi để tính. Nhưng nếu gặp 2 ngay này phải xử lý khác, mình muốn đưa nó sang dạng text để xử lý ngoại lệ hoăc chuyển tất cả các ngày âm lịch sang một ngày duy nhất để không lỗi hàm month -
RE: Giúp dùm phương án
ongke0711 > 30-11-21, 12:33 AM
-
RE: Giúp dùm phương án
tranthanhan1962 > 30-11-21, 10:11 AM
Thank! Cực kỳ hay. cách tính ngày âm lịch cũng sử dụng các hàm mình lấy của Hồ Ngọc Đức nhưng giải quyết được hàm can chi tháng bằng cach dùng hàm Split, để cắt tháng trong chuỗi âm lịch, mình cứ tìm cách đổi ngay âm sang dạng chuỗi mà không thấy hàm nên cứ loay quay mãi. Cám ơn đ/c nhiều.Làm xong mình sẽ post lên. Thank -
RE: Giúp dùm phương án
tranthanhan1962 > 03-12-21, 12:56 AM
Đã phát hiện lỗi
Bỏ qua vấn đề lỗi font. Nhưng code chỉ xử lý đúng ngày âm lịch (dd/mm/yyyy), can chi năm, can chi ngày. Nhưng can chi tháng sai bét (mình cũng đang vướng vụ này đây).
Ở đây. ngày 4/11/2021 (DL) thì âm lịch phải là: 30/9/2021 [Ngày Bính Thìn/Tháng Mậu Tuất/Năm Tân Sửu]
ngày 5/11/2021 (DL) thì âm lịch phải là: 1/10/2021 [Ngày Đinh Tỵ /Tháng Kỷ Hợi /Năm Tân Sửu]
Nhưng ở đây đều ra kết quả là tháng Tân Mão. Nhìn vảo là biết sai ngay, 2 tháng 9-10 đều có cùng can chi là Tân Mão. Code mình thì giải quyết đươc tháng 9 [Mậu Tuất], Tháng 10 [Kỷ Hợi]. Nhưng bị lỗi ở ngày AL 29/2 và 30/2 (Date VBA không có 2 ngày này vì dương lịch tháng 2 ngày cuối cùng phải là 28). Chắc phải nghiên cứu thêm -
RE: Giúp dùm phương án
Minh Tiên > 03-12-21, 11:58 AM
(03-12-21, 12:56 AM)tranthanhan1962 Đã viết: Đã phát hiện lỗi
Bỏ qua vấn đề lỗi font. Nhưng code chỉ xử lý đúng ngày âm lịch (dd/mm/yyyy), can chi năm, can chi ngày. Nhưng can chi tháng sai bét (mình cũng đang vướng vụ này đây).
Ở đây. ngày 4/11/2021 (DL) thì âm lịch phải là: 30/9/2021 [Ngày Bính Thìn/Tháng Mậu Tuất/Năm Tân Sửu]
ngày 5/11/2021 (DL) thì âm lịch phải là: 1/10/2021 [Ngày Đinh Tỵ /Tháng Kỷ Hợi /Năm Tân Sửu]
Nhưng ở đây đều ra kết quả là tháng Tân Mão. Nhìn vảo là biết sai ngay, 2 tháng 9-10 đều có cùng can chi là Tân Mão. Code mình thì giải quyết đươc tháng 9 [Mậu Tuất], Tháng 10 [Kỷ Hợi]. Nhưng bị lỗi ở ngày AL 29/2 và 30/2 (Date VBA không có 2 ngày này vì dương lịch tháng 2 ngày cuối cùng phải là 28). Chắc phải nghiên cứu thêm
Trong đoạn code hiển thị của Ho ngoc Duc trên form (File theo link trên)
Private Sub cmdChuyenAL_Click()
Dim ngayCanChi As String, thangCanChi As String, namCanChi As String
Me.txtNgayAL = TransLu(Me.txtNgay, Me.txtThang, Me.txtNam)
ngayCanChi = CanChiNgayAL(DateSerial(Me.txtNam, Me.txtThang, Me.txtNgay))
thangCanChi = CanChiThangAL(CInt(Mid(Me.txtNgayAL, 4, 2)), CLng(Right(Me.txtNgayAL, 4)))
thangCanChi = CanChiThangAL(2, CLng(Right(Me.txtNgayAL, 4))) 'Dòng thừa
namCanChi = CanChiNamAL(CLng(Right(Me.txtNgayAL, 4)))
Me.lblCanChi.Caption = "Ngày " & ngayCanChi & ", Tháng " & thangCanChi & ", N" & ChrW(259) & "m " & namCanChi
End Sub
Do thừa dòng: thangCanChi = CanChiThangAL(2, CLng(Right(Me.txtNgayAL, 4)))
Nên chạy chưa đúng.
Tiên bỏ dòng code này và kiểm tra, so sánh với các trang lịch trên web thấy chạy khớp.
A Ân kiểm tra lại thử có đúng ko nhé !
Thân./. -
RE: Giúp dùm phương án
tranthanhan1962 > 03-12-21, 12:05 PM
Xử lý lại như Minh Tiên thì đúng như vậy thật. Thank