Khi kiểm tra bạn sẽ thấy những ngày nào mà ngày lớn hơn 12 sẽ cho kết quả đúng. Ngược lại những ngày nhỏ hơn hoặc bằng 12 sẽ cho kết quả sai. Nguyên nhân như sau:
Trong hàm lunar của bạn có 1 dòng lệnh
DiffADate = DateDiff("d", #1/31/1900#, CDate(d & "-" & m & "-" & y))
Phần bôi đỏ gây ra lỗi, vì với hàm CDate mặc định chuyển theo định dạng tháng-ngày-năm, do đó ở đây d sẽ được hiểu là tháng nên gây ra lỗi. Nhưng với những ngày lớn hơn 12, tức là d lớn hơn 12 thì hàm CDate lại tự động đổi d thành ngày cho bạn nên vẫn sẽ cho kết quả đúng.
Bạn có thể sửa dòng lệnh bên trên bằng dòng lệnh sau:
DiffADate = DateDiff("d", DateSerial(1900, 1, 31), DateSerial(y, m, d))
Tôi khuyên bạn nên sử dụng hàm DateSerial khi cần nhập vào 1 ngày cụ thể.