Chào tất cả mọi người, vấn đề của em như đã nói trên tiêu đề. Em có làm 1 userform hỗ trợ nhập liệu (xuất hiện khi ấn vào "tạo phiếu mới"). Trước khi e dùng office 2013 thì các định dạng từ userform chuyển sang bảng tính ổn định nhưng do office tự update giờ máy e đã là office 2019 thì bị hiện tượng tất cả dữ liệu từ userform chuyển ra điều định dạng text hết (dùng 1 thời gian thấy khá thích nên đừng bác nào gợi ý cho e cài lại office nhé). Với dữ liệu như vậy e ko thể làm báo cáo số liệu cũng như chạy ngày đc. Sau 1 hồi tìm kiếm trên google e đã tìm đc cách để giữ đc định dạng số nhưng còn định dạng ngày tháng thì ko thể khắc phục nổi. Dưới đây là file dữ liệu của e. Mong mọi người giúp đỡ ạ. Cảm ơn mọi người
Chào tất cả mọi người, vấn đề của em như đã nói trên tiêu đề. Em có làm 1 userform hỗ trợ nhập liệu (xuất hiện khi ấn vào "tạo phiếu mới"). Trước khi e dùng office 2013 thì các định dạng từ userform chuyển sang bảng tính ổn định nhưng do office tự update giờ máy e đã là office 2019 thì bị hiện tượng tất cả dữ liệu từ userform chuyển ra điều định dạng text hết (dùng 1 thời gian thấy khá thích nên đừng bác nào gợi ý cho e cài lại office nhé). Với dữ liệu như vậy e ko thể làm báo cáo số liệu cũng như chạy ngày đc. Sau 1 hồi tìm kiếm trên google e đã tìm đc cách để giữ đc định dạng số nhưng còn định dạng ngày tháng thì ko thể khắc phục nổi. Dưới đây là file dữ liệu của e. Mong mọi người giúp đỡ ạ. Cảm ơn mọi người
Vời các dữ liệu ngày-tháng-năm thì nên nhập & thử các ngày 4/13 hay 12/13 hay 13/10,. . .
Mình cũng chưa hiểu 2 TextBox bạn có nhốt ma 1 trong chúng hay không mà 2 TextBox này lại vận hành theo 2 hướng đối nghịch nhau.
Với mình thì trong Excel ta nên có dạng 'MM/DD/yyyy & ngày hệ thống cũng nên thiết lập như vậy.
Còn 1 hướng nữa bạn nên thử:
.Range("E" & EndRow) = Format(txtNgaySX.Value, "MM/DD/yyyy")
1. txtNgayPT và txtNgaySX hoạt động không như nhau.
Nhìn code thấy
Mã:
Private Sub txtNgayPT_AfterUpdate()
txtNgayPT = Format(txtNgayPT, "dd/mm/yyyy")
End Sub
Private Sub txtNgaySX_AfterUdate()
txtNgaySX = Format(txtNgaySX, "dd/mm/yyyy")
End Sub
Làm quái gì có sự kiện AfterUdate, nên sub thứ 2 không được thực hiện. Nó được coi như sub người dùng có tên là txtNgaySX_AfterUdate.
2. Nhiều người có thói quen rất xấu, nói mãi nhưng như nước đổ đầu vịt.
Làm quái gì có chuyện cứ bắt buộc định dạng ngày tháng theo 1 kiểu "dd/mm/yyyy". Nếu tôi là đối tác thì system của tôi sẽ dùng dạng yyyy-mm-dd (dạng năm tháng ngày). Bây giờ tôi nhận tập tin của đối tác B. Ngày này qua ngày khác, năm này qua năm khác, từ mấy chục năm nay tôi nhập mòn tay kiểu "yyyy-mm-dd", cả trên sheet và cả trên Form. Vậy thì theo thói quen tôi nhập 2020-06-12 (dạng năm tháng ngày). Code của ông B lập tức đổi thành 12-06-2020 (dạng ngày tháng năm). Bây giờ đập xuống sheet thì rõ ràng tôi sẽ có 2020-12-06. Rõ ràng tôi đã nhập ngày 12 tháng 6 chứ không nhập ngày 6 tháng 12.
Đề nghị:
- không Format gì cả, tức vứt vào sọt rác
Mã:
Private Sub txtNgayPT_AfterUpdate()
txtNgayPT = Format(txtNgayPT, "dd/mm/yyyy")
End Sub
Private Sub txtNgaySX_AfterUdate()
txtNgaySX = Format(txtNgaySX, "dd/mm/yyyy")
End Sub
- Hàng ngày nhập ngày tháng chuẩn trên sheet như thế nào thì cứ gõ trong TextBox đúng thứ tự như thế thôi.
1. txtNgayPT và txtNgaySX hoạt động không như nhau.
Nhìn code thấy
Mã:
Private Sub txtNgayPT_AfterUpdate()
txtNgayPT = Format(txtNgayPT, "dd/mm/yyyy")
End Sub
Private Sub txtNgaySX_AfterUdate()
txtNgaySX = Format(txtNgaySX, "dd/mm/yyyy")
End Sub
Làm quái gì có sự kiện AfterUdate, nên sub thứ 2 không được thực hiện. Nó được coi như sub người dùng có tên là txtNgaySX_AfterUdate.
2. Nhiều người có thói quen rất xấu, nói mãi nhưng như nước đổ đầu vịt.
Làm quái gì có chuyện cứ bắt buộc định dạng ngày tháng theo 1 kiểu "dd/mm/yyyy". Nếu tôi là đối tác thì system của tôi sẽ dùng dạng yyyy-mm-dd (dạng năm tháng ngày). Bây giờ tôi nhận tập tin của đối tác B. Ngày này qua ngày khác, năm này qua năm khác, từ mấy chục năm nay tôi nhập mòn tay kiểu "yyyy-mm-dd", cả trên sheet và cả trên Form. Vậy thì theo thói quen tôi nhập 2020-06-12 (dạng năm tháng ngày). Code của ông B lập tức đổi thành 12-06-2020 (dạng ngày tháng năm). Bây giờ đập xuống sheet thì rõ ràng tôi sẽ có 2020-12-06. Rõ ràng tôi đã nhập ngày 12 tháng 6 chứ không nhập ngày 6 tháng 12.
Đề nghị:
- không Format gì cả, tức vứt vào sọt rác
Mã:
Private Sub txtNgayPT_AfterUpdate()
txtNgayPT = Format(txtNgayPT, "dd/mm/yyyy")
End Sub
Private Sub txtNgaySX_AfterUdate()
txtNgaySX = Format(txtNgaySX, "dd/mm/yyyy")
End Sub
- Hàng ngày nhập ngày tháng chuẩn trên sheet như thế nào thì cứ gõ trong TextBox đúng thứ tự như thế thôi.
nếu như file này là e nhập thì e cũng ko phải khổ để phải định dạng từng ô như thế. nhưng ng nhập là ng còn ko thạo về máy tính ngoài việc gõ mổ cò từng chữ ra thì ko biết gì hết. e rất cảm ơn gợi ý của bác nhưng e ko thể bỏ đống format đấy ra đc. bác có thể chỉ cho e cách để format chúng nó hiệu quả và đơn giản hơn đc ko?
Vời các dữ liệu ngày-tháng-năm thì nên nhập & thử các ngày 4/13 hay 12/13 hay 13/10,. . .
Mình cũng chưa hiểu 2 TextBox bạn có nhốt ma 1 trong chúng hay không mà 2 TextBox này lại vận hành theo 2 hướng đối nghịch nhau.
Với mình thì trong Excel ta nên có dạng 'MM/DD/yyyy & ngày hệ thống cũng nên thiết lập như vậy.
Còn 1 hướng nữa bạn nên thử:
.Range("E" & EndRow) = Format(txtNgaySX.Value, "MM/DD/yyyy")
nếu như file này là e nhập thì e cũng ko phải khổ để phải định dạng từng ô như thế. nhưng ng nhập là ng còn ko thạo về máy tính ngoài việc gõ mổ cò từng chữ ra thì ko biết gì hết. e rất cảm ơn gợi ý của bác nhưng e ko thể bỏ đống format đấy ra đc. bác có thể chỉ cho e cách để format chúng nó hiệu quả và đơn giản hơn đc ko?
Private Sub txtNgayPT_AfterUpdate()
txtNgayPT = Format(txtNgayPT, "Short Date")
End Sub
Private Sub txtNgaySX_AfterUpdate()
txtNgaySX = Format(txtNgaySX, "Short Date")
End Sub
Về bài cuối tôi viết thiếu. Chính ra phải là
Private Sub txtNgayPT_AfterUpdate()
txtNgayPT = Format(txtNgayPT, "Short Date")
End Sub
Private Sub txtNgaySX_AfterUpdate()
txtNgaySX = Format(txtNgaySX, "Short Date")
End Sub
Về bài cuối tôi viết thiếu. Chính ra phải là
vì họ ko biết về định dạng ngày tháng chuẩn nên họ luôn luôn sử dụng định dạng ngày tháng giống như nói chuyện ngoài đời là dd/mm/yyyy đó bác. nhưng do có nhiều ng nhập nên có ng thích dấu "-", ng thích dấu "/", người lại thích dấu "." nên e mới phải cho nó hết về 1 định dạng.
E chưa có điều kiện để thử trên nhiều máy nên ko biết nếu e để định dạng short text thì có bị ảnh hưởng do định dạng ngày tháng của máy ko bác? và e sẽ để file trên dropbox và nhiều ng nhập trên nhiều máy khác nhau, nếu định dạng ngày tháng giữa các máy khác nhau thì dữ liệu đã nhập vào file có bị nhảy loạn lên ko ạ?
vì họ ko biết về định dạng ngày tháng chuẩn nên họ luôn luôn sử dụng định dạng ngày tháng giống như nói chuyện ngoài đời là dd/mm/yyyy đó bác. nhưng do có nhiều ng nhập nên có ng thích dấu "-", ng thích dấu "/", người lại thích dấu "." nên e mới phải cho nó hết về 1 định dạng.
E chưa có điều kiện để thử trên nhiều máy nên ko biết nếu e để định dạng short text thì có bị ảnh hưởng do định dạng ngày tháng của máy ko bác? và e sẽ để file trên dropbox và nhiều ng nhập trên nhiều máy khác nhau, nếu định dạng ngày tháng giữa các máy khác nhau thì dữ liệu đã nhập vào file có bị nhảy loạn lên ko ạ?
mình rất cảm ơn những góp ý về excel của bạn. nhưng mình cũng xin lỗi phải góp ý 1 chút, mỗi ng có 1 thế mạnh, họ ko rành về máy tính là vẫn bắt họ phải sử dụng có nghĩa chuyên môn của họ là những lĩnh vực khác. mình muốn dữ liệu phải có tức thời sau khi họ hoàn thành công việc chứ ko phải đợi chờ 1 đứa rành máy tính hơn họ đến nhập nên phải yêu cầu họ sử dụng. nếu đã đi làm thì ai cũng cố gắng. chả có ai chày bửa ra rồi ăn lương bạn à. đấy là chứ kể trong những ng đó có thể sẽ có những cô, chú đã lớn tuổi (hơn 40, 50 tuổi rồi) để họ có thể viết đúng định dạng thì mình phải nhắc rất nhiều lần do chả ai thay đổi thói quen mà dễ cả, và sau mỗi lần nhắc như thế mình lại phải can thiệp để sửa lại toàn bộ dữ liệu họ gõ sai (mặc dù chỉ sai những thứ rất nhỏ như dấu ngăn cách giữa ngày tháng hay 1.1 họ viết thành 1,1 nên máy tính ko nhận đc). đó là mục đích mình cố gắng làm ra 1 file nhập liệu dễ sử dụng và kiểm tra ngay khi nhập nhất để họ có thể nhập mà ít sai.
một lần nữa mình rất cảm ơn bạn, nhờ những gì bạn chỉ mà mình có thể hoàn thiện phần nào file nhập liệu cũng như học đc nhiều cái mới
mình rất cảm ơn những góp ý về excel của bạn. nhưng mình cũng xin lỗi phải góp ý 1 chút, mỗi ng có 1 thế mạnh, họ ko rành về máy tính là vẫn bắt họ phải sử dụng có nghĩa chuyên môn của họ là những lĩnh vực khác. mình muốn dữ liệu phải có tức thời sau khi họ hoàn thành công việc chứ ko phải đợi chờ 1 đứa rành máy tính hơn họ đến nhập nên phải yêu cầu họ sử dụng. nếu đã đi làm thì ai cũng cố gắng. chả có ai chày bửa ra rồi ăn lương bạn à. đấy là chứ kể trong những ng đó có thể sẽ có những cô, chú đã lớn tuổi (hơn 40, 50 tuổi rồi) để họ có thể viết đúng định dạng thì mình phải nhắc rất nhiều lần do chả ai thay đổi thói quen mà dễ cả, và sau mỗi lần nhắc như thế mình lại phải can thiệp để sửa lại toàn bộ dữ liệu họ gõ sai (mặc dù chỉ sai những thứ rất nhỏ như dấu ngăn cách giữa ngày tháng hay 1.1 họ viết thành 1,1 nên máy tính ko nhận đc). đó là mục đích mình cố gắng làm ra 1 file nhập liệu dễ sử dụng và kiểm tra ngay khi nhập nhất để họ có thể nhập mà ít sai.
một lần nữa mình rất cảm ơn bạn, nhờ những gì bạn chỉ mà mình có thể hoàn thiện phần nào file nhập liệu cũng như học đc nhiều cái mới
Bài đã được tự động gộp:
mình cảm ơn gợi ý của bạn nhưng có vẻ 2 control này ko có trong VBA. mình sẽ thử tìm hiểu và báo lại kết quả
mình rất cảm ơn những góp ý về excel của bạn. nhưng mình cũng xin lỗi phải góp ý 1 chút, mỗi ng có 1 thế mạnh, họ ko rành về máy tính là vẫn bắt họ phải sử dụng có nghĩa chuyên môn của họ là những lĩnh vực khác. mình muốn dữ liệu phải có tức thời sau khi họ hoàn thành công việc chứ ko phải đợi chờ 1 đứa rành máy tính hơn họ đến nhập nên phải yêu cầu họ sử dụng. nếu đã đi làm thì ai cũng cố gắng. chả có ai chày bửa ra rồi ăn lương bạn à. đấy là chứ kể trong những ng đó có thể sẽ có những cô, chú đã lớn tuổi (hơn 40, 50 tuổi rồi) để họ có thể viết đúng định dạng thì mình phải nhắc rất nhiều lần do chả ai thay đổi thói quen mà dễ cả, và sau mỗi lần nhắc như thế mình lại phải can thiệp để sửa lại toàn bộ dữ liệu họ gõ sai (mặc dù chỉ sai những thứ rất nhỏ như dấu ngăn cách giữa ngày tháng hay 1.1 họ viết thành 1,1 nên máy tính ko nhận đc). đó là mục đích mình cố gắng làm ra 1 file nhập liệu dễ sử dụng và kiểm tra ngay khi nhập nhất để họ có thể nhập mà ít sai.
một lần nữa mình rất cảm ơn bạn, nhờ những gì bạn chỉ mà mình có thể hoàn thiện phần nào file nhập liệu cũng như học đc nhiều cái mới
Bài đã được tự động gộp:
mình cảm ơn gợi ý của bạn nhưng có vẻ 2 control này ko có trong VBA. mình sẽ thử tìm hiểu và báo lại kết quả
Tức thói quen "làm bừa thế nào cũng được", "tôi thích thế nào thì tôi làm như thế". Làm công ăn lương mà cứ như là làm ơn.
Còn nếu bạn muốn đi theo hướng chọn từ lịch thì thiếu gì lịch, đâu cứ phải có DTpicker. Hỏi xin mọi người lịch thôi. Nhưng bạn chọn phương án "luôn đi sau người khác để sửa" nên tôi không tham gia nữa.
vì họ ko biết về định dạng ngày tháng chuẩn nên họ luôn luôn sử dụng định dạng ngày tháng giống như nói chuyện ngoài đời là dd/mm/yyyy đó bác. nhưng do có nhiều ng nhập nên có ng thích dấu "-", ng thích dấu "/", người lại thích dấu "." nên e mới phải cho nó hết về 1 định dạng.. . .
(1) Đầu câu nên viết hoa để người khác thấy bạn có lòng tự trọng
(2) Khắc phục chuyện nhập lung tung dạng ngày tháng này có thể chỉ bằng cách duy nhất sau:
Nhập dữ liệu kiểu này bỡi ComboBox thay vì TextBox
(Người nhập chỉ có thể chọn 1 giá trị ngày tháng trong 1 danh sách nhất đinh) Cụ thể sẽ còn phát sinh 1 số khó khăn cho bạn; Những khó khăn này ta bàn tiếp sau 24 giờ kể từ bài này đăng trên DĐ
... có thể sẽ có những cô, chú đã lớn tuổi (hơn 40, 50 tuổi rồi) để họ có thể viết đúng định dạng thì mình phải nhắc rất nhiều lần do chả ai thay đổi thói quen mà dễ cả, và sau mỗi lần nhắc như thế mình lại phải can thiệp để sửa lại toàn bộ dữ liệu họ gõ sai (mặc dù chỉ sai những thứ rất nhỏ như dấu ngăn cách giữa ngày tháng hay 1.1 họ viết thành 1,1 nên máy tính ko nhận đc). đó là mục đích mình cố gắng làm ra 1 file nhập liệu dễ sử dụng và kiểm tra ngay khi nhập nhất để họ có thể nhập mà ít sai.
Khi viết ứng dụng người lập trình phải bẫy tất cả các lỗi nhập liệu trước khi cho ghi dữ liệu vào hệ thống để khỏi phải tốn code kiểm tra, chỉnh sửa lại mà chưa chắc đúng.
Do đó tại sao bạn không gợi ý ngay khi nhập liệu và không cho nhập nếu sai định dạng? Người dùng không biết gì, khi lần đầu tiên nhập liệu, Excel hiện thông báo bạn nhập sai kiểu ngày tháng, kiểu đúng là ../.../..... --> họ thấy và chỉnh sửa ngay cho các lần nhập liệu sau thôi chứ có gì mất thời gian hay phiền phức mà một người 50 tuổi không làm được.
Bạn tìm hiểu về Data Validation và nhờ tư vấn code để bẫy lỗi khi nhập liệu tốt hơn là code xử lý dữ liệu lỗi đã nhập.
Nếu muốn nhập liệu nhanh, tôi nghĩ bạn dùng Userform.
Vừa thử lắp DTPicker và Monthview, cứ chọn ngày nào có 1 số như 1/4 đến 9/4, lúc nhấn xác nhận thì nó cứ nhảy ra số 43834. chọn format cell chỉnh lại dd/mm/yyyy cũng không được