Sửa giúp Code đọc ngày (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

duchuynh103

Thành viên thường trực
Tham gia
25/9/07
Bài viết
209
Được thích
146
Mình có bài tập VBA lớp "mẫu giáo". Nhờ các anh chị sửa giúp code để hoàn thiện.
Nhân đây cho minh hỏi:
- Tại sao khi minh thay " If so = 0 Then" bằng " If so = "" Then " thì kết quả trả về #Value.
Cảm ơn các bạn.
 

File đính kèm

Mình có bài tập VBA lớp "mẫu giáo". Nhờ các anh chị sửa giúp code để hoàn thiện.
Nhân đây cho minh hỏi:
- Tại sao khi minh thay " If so = 0 Then" bằng " If so = "" Then " thì kết quả trả về #Value.
Cảm ơn các bạn.
Bạn có thể tham khảo code sau:
PHP:
Function Ngay(So as Date)
If Trim(So) = "" Or So = 0 Then
    Ngay = ChrW$(212) & " r" & ChrW$(7893) & "ng!"
    Exit Function
ElseIf IsDate(So) Then
    mNgay = Day(So)
    mThang = Month(So)
    mNam = Year(So)
    Ngay = "ng" & ChrW(224) & "y " & mNgay & " th" & ChrW(225) & "ng " & mThang & " n" & ChrW(462) & "m " & mNam
    Exit Function
Else
Ngay = "Không phải dạng ngày"  ''Dò trong bảng ký tự Unicode dùm mình, mình không có bảng đó ở đây!
Exit Function
End If
End Function
Trong code của bạn:
Function NGAY(so As Date, Optional doiso As Byte = 0)
Thấy bạn có khai báo [Optional doiso As Byte = 0], nhưng sao không thấy đề cập đến trong Function gì cả?
 
Lần chỉnh sửa cuối:
Upvote 0
Trong code của bạn:
Thấy bạn có khai báo [Optional doiso As Byte = 0], nhưng sao không thấy đề cập đến trong Function gì cả?

Cảm ơn Ca_dafi.
Trong Function của mình có "doiso". Nhưng để đi vào trọng tâm vấn đề mình muốn hỏi nên mình đã bỏ bớt Optional...

Tuy nhiên khi chạy code của bạn vẫn chưa đáp ứng được yêu cầu. Theo mình nghĩ phải khai báo Format thế nào đó (mình đang bí) để nhận dạng phải ĐÚNG DẠNG "d-m-yy" chứ không nhận dạng khi "so" là 1 number. Nhờ bạn sửa giúp.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Ca_dafi.
Trong Function của mình có "doiso". Nhưng để đi vào trọng tâm vấn đề mình muốn hỏi nên mình đã bỏ bớt Optional...

Tuy nhiên khi chạy code của bạn vẫn chưa đáp ứng được yêu cầu. Theo mình nghĩ phải khai báo Format thế nào đó (mình đang bí) để nhận dạng phải ĐÚNG DẠNG "d-m-yy" chứ không nhận dạng khi "so" là 1 number. Nhờ bạn sửa giúp.

Khi nhập vào excel thì máy không phân biệt dạng number hay date (chúng là 1)

Nhập số 1 thì máy tự động coi là ngày 1-1-1900
Nhập số 2 thì máy tự động coi là ngày 2-1-1900

bạn lại muốn máy bảo rằng không phải là dạng date <=> potay.com

Nếu bạn muốn khi nhập những ngày < 1-1-2008 (hoặc 1 ngày nào đó) thì nhận được thông báo "Ngày không hợp lệ" thì có thể được
 
Upvote 0
Khi nhập vào excel thì máy không phân biệt dạng number hay date (chúng là 1)

Nhập số 1 thì máy tự động coi là ngày 1-1-1900
Nhập số 2 thì máy tự động coi là ngày 2-1-1900

bạn lại muốn máy bảo rằng không phải là dạng date <=> potay.com

Nếu bạn muốn khi nhập những ngày < 1-1-2008 (hoặc 1 ngày nào đó) thì nhận được thông báo "Ngày không hợp lệ" thì có thể được

sao lại bó tay nhỉ

Có thể kiểm tra format của ô

nếu không phải format DATE -> không phải ngày

Có được không nhỉ?
 
Upvote 0
Có thể kiểm tra format của ô

nếu không phải format DATE -> không phải ngày

Có được không nhỉ?

Cái này được, nhưng lỡ người dùng không format DATE, mà họ format là Custom = "d-m-yy" hoặc "dd/mm/yyyy" hoặc "d-mmm-yy",.... thì sao?

Vấn đề không phải chỗ này, mà vấn đề ở chỗ này:
Như vậy, cho dù ta gõ số 1 thì VBA vẫn hiểu đó là dạng ngày, nên tự động chuyển thành 01/01/1900, hoặc 1/1/1900, hoặc 1-Jan-1900, .... etc.
Hãy khai báo lại như sau:
Function Ngay(So as Variant)
Vậy là mọi chuyện giải quyết xong!
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể tham khảo code sau:
PHP:
Function Ngay(So as Date)
If Trim(So) = "" Or So = 0 Then
    Ngay = ChrW$(212) & " r" & ChrW$(7893) & "ng!"
    Exit Function
ElseIf IsDate(So) Then
    mNgay = Day(baonhieu)
    mThang = Month(baonhieu)
    mNam = Year(baonhieu)
    Ngay = "ng" & ChrW(224) & "y " & mNgay & " th" & ChrW(225) & "ng " & mThang & " n" & ChrW(462) & "m " & mNam
    Exit Function
Else
Ngay = "Không phải dạng ngày"  ''Dò trong bảng ký tự Unicode dùm mình, mình không có bảng đó ở đây!
Exit Function
End If
End Function
Trong code của bạn:
Thấy bạn có khai báo [Optional doiso As Byte = 0], nhưng sao không thấy đề cập đến trong Function gì cả?
Code này ,thay "baonhieu" bằng "so" thì khi đánh 1 sẽ cho kết quả là:
ngày 31 tháng 12 nǎm 1899
Và không phải dạng ngày thì #value
 
Upvote 0
Code này ,thay "baonhieu" bằng "so"
Đúng vậy, em chưa sửa lại code, cảm ơn anh!
thì khi đánh 1 sẽ cho kết quả là:
ngày 31 tháng 12 nǎm 1899
Và không phải dạng ngày thì #value
Cái này em đã nói trong bài tiếp theo rồi anh! Chỉ cần khai báo lại biến thôi. Code hoàn chỉnh sẽ là:

PHP:
Function Ngay(So as Variant)
If Trim(So) = "" Or So = 0 Then
    Ngay = ChrW$(212) & " r" & ChrW$(7893) & "ng!"
    Exit Function
ElseIf IsDate(So) Then
    mNgay = Day(So)
    mThang = Month(So)
    mNam = Year(So)
    Ngay = "ng" & ChrW(224) & "y " & mNgay & " th" & ChrW(225) & "ng " & mThang & " n" & ChrW(462) & "m " & mNam
    Exit Function
Else
Ngay = "Không phải dạng ngày"  ''Dò trong bảng ký tự Unicode dùm mình, mình không có bảng đó ở đây!
Exit Function
End If
End Function
 
Upvote 0
Một ý nữa ở đây là số vì sao không ra ngày 1-1-1900
mà lui 1 ngày
 
Upvote 0
Vấn đề không phải chỗ này, mà vấn đề ở chỗ này:Function Ngay(So as Date)

Hãy khai báo lại như sau:Function Ngay(So as Variant)
Vậy là mọi chuyện giải quyết xong!
Đúng rồi. Rất cảm ơn Ca_difi. Mọi yêu cầu của mình được giải quyết trọn vẹn.

Thêm nội dung mới (sau khi áp dụng thực tế):
Hôm nay phát hiện ra vẫn còn chưa hoàn thiện khi "So" là NOW hoặc 1 tham chiếu khác (như VLookup, HLookup... ). Không biết có cách nào đáp ứng được yêu cầu "kì quặc" này không? Mong các bạn chỉ giáo.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Function Ngay(So as Variant)
If Trim(So) = "" Or So = 0 Then
Ngay = ChrW$(212) & " r" & ChrW$(7893) & "ng!"
Exit Function
ElseIf IsDate(So) Then
mNgay = Day(So)
mThang = Month(So)
mNam = Year(So)
Ngay = "ng" & ChrW(224) & "y " & mNgay & " th" & ChrW(225) & "ng " & mThang & " n" & ChrW(462) & "m " & mNam Exit Function
Else
Ngay = "Không phải dạng ngày" ''Dò trong bảng ký tự Unicode dùm mình, mình không có bảng đó ở đây!
Exit Function
End If
End Function

Trong đoạn code trên em ko hiểu đoạn bôi đậm.
Các anh giúp em với???
 
Upvote 0
Trong đoạn code trên em ko hiểu đoạn bôi đậm.
Các anh giúp em với???
Ngay = ChrW$(212) & " r" & ChrW$(7893) & "ng!"
.............................
Ngay = "ng" & ChrW(224) & "y " & mNgay & " th" & ChrW(225) & "ng " & mThang & " n" & ChrW(462) & "m " & mNam
......................

Vì VBA không hỗ trợ gõ tiếrng Việt Unicode nên trong trình soạn Code, ta không thể gõ được các chữ: Ô rỗng, Ngày, tháng, năm. Nên phải thay bằng mã, cú pháp là: ChrW$(Mã), hoặc ChrW(Mã). Bạn tìm trên diễn đàn bộ Mã này nhé!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom