NHờ tạo US FORM nhập dữ liệu có gợi ý từ danh sách có sẵn. (2 người xem)

Liên hệ QC

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

hungvinhhao

Thành viên mới
Tham gia
19/1/08
Bài viết
28
Được thích
1
em có 1 file muốn dùng US FORM nhập dữ liệu có gợi ý từ danh sách có sẵn. nội dung cụ thể em viết ở sheet " nhờ giúp đỡ" trong file đính kèm. Rất mong các cao thủ làm giúp em. Em cảm ơn rất nhiều
 

File đính kèm

Xin góp í với bạn, trước tiên là những cấu trúc dữ liệu trong các trang tính, như sau:
1./ Tên trang tính của bạn gán quá dài & không cần thiết.
Ví dụ thay ví "DS-KHACHHANG", ta nên là 'DSKHg'
1.1./ Trong tên trang tính ta không nên xài "-" mà nên là "_"
2./ Cũng tại trang này, bạn chỉ có mã khách hàng (KH) là 'KH0003'; Như vậy ngầm hiểu bạn có mỗi 1 loại KH là những cá nhân thôi. Bạn có khách hàng là những CQ hai XN (tập thể) hay không?

3./ Ở trang 'DSQua': Nếu là mình thì trường [Code Quà] nên có độ dài là như nhau; Những Code quà nào ngắn ta nên thêm kí tự "_" cho đủ (độ dài)
Trong cột [Code Quà] ta không nên có tiếng Việt có dấu, như 'Đ' hay 'Ă',. . . .
Chuyện này cũng nên áp dụng ở cột [Code NV] của trang 'DSNV', Ta không nên để trong [Code NV' có chứa những '09-VTHỒNG' hay '07_VTĐÀO',. . . .
Cột [Index Code] với mình là thừa, nên bỏ đi là vừa.

4./ Ở trang 'NhapData' ở cột [D:D] nên xài mã nhân viên thay vì tên nhân viên; Vì 1 đơn giản nhất là các trường tương tự fía sau nó như [Code KH] & [Code Quà]. ( Có nghĩa là đang dư trường [Tên NV], cột [D:d] này.)

5./ Khuyến cáo bạn xem xét quy luật tạo mã sau:
PHP:
Mã NV      Họ Tên    '
NTN00  Nguyễn Thị Nguyệt
NTN01  Ngô Thành Nam
PPA00  Phạm Phương Anh
NAT00  Ngô Thị Ánh Tuyết
VBF00  Vũ Thị Bích Đào
JJH00  Hảo
VTH00  Vũ thị Hồng
DCF00  Dương công Định
HFT00  Hoang đạo thuý
NVN00  Nguyễn văn Nam
FTT00  Đào Thị Thắm
TVM00  Trần Văn Minh
PHA00  Phạm Thị Hồng Anh
NJD00  Nguyễn Du
 
Upvote 0
Mình lười tạo userform để nhập liệu vì nó chậm hơn so với thao tác trực tiếp trên bảng tính nên mình tạo userform trực tiếp trên bảng tính NHAPDATA luôn, bạn xem thử xài được không. Hướng dẫn:
Nhập dữ liệu ngày, chọn ô Nội Dung, userform sẽ hiện ra danh sách Nội Dung,nếu danh sách trong listbox ngắn và có sẵn cái bạn cần,bạn dùng phím keydown để chọn nội dung cần nhập liệu,nếu danh sách dài hoặc chưa thấy nội dung bạn cần nhập liệu, bạn nhấn "tab"(hoặc click chuột) để vào textbox, gõ từ khóa cần tra, listbox sẽ hiển thị các nội dung có từ khóa, dùng phím keydown (hoặc click chuột) để chọn nội dung trong listbox,bảng tính sẽ tự động chuyển tới ô bên phải tiếp theo là tên nhân viên, bạn làm tương tự giống ô Nội Dung, và làm vậy cho đến mã khách hàng.
 

File đính kèm

Upvote 0
@gttrongvn Cảm ơn file của bạn rất hợp ý của mình.
Mình mới học VBA và mò ra được 1 cái Form như file đính kèm. Nhưng hiện tại Form mình đang bị thiếu 2 yêu cầu.
Mình đã ghi trong file mong bạn giúp mình với.
Yêu cầu 1 : Tìm lại dữ liệu đã được lưu lại ở sheet data
Yêu cầu 2 : Chỉnh sửa dữ liệu rồi cập nhập lại ở sheet data đồng thời dữ liệu cũ sẽ lưu vào sheet record.
Cảm ơn rất nhiều mình đang định xây dựng ý tưởng nhập liệu mới cho bộ phận mình cái này sẽ giúp mình rất nhiều.
 

File đính kèm

Upvote 0
Macro này thỏa iêu cầu I của bạn đây & xin mời:
PHP:
Sub TimDuLieu1Ngay()
 Dim Rws As Long, J As Long, W As Long, Ngay As Date, Dm As Integer
 Dim Arr()
  
 Ngay = Format([H4].Value, "MM/dd/yyyy")
 [B4].CurrentRegion.Offset(1).ClearContents:
 With Sheets("Data")
    Rws = .[H3].CurrentRegion.Rows.Count
    Arr() = .[b3].Resize(Rws, 16).Value
    ReDim dArr(1 To Rws, 1 To 17)
 End With
 For J = 1 To UBound(Arr())
    If Arr(J, 7) = Ngay Then
        W = W + 1:                                  dArr(W, 1) = W
        For Dm = 1 To 16
            dArr(W, Dm + 1) = Arr(J, Dm)
        Next Dm
    End If
 Next J
 If W Then
    [A4].Resize(W, 17).Value = dArr()
 Else
    [H4].Value = "Nothing"
 End If
End Sub
 
Upvote 0
Mình chưa hiểu Yêu cầu 2 của bạn lắm, dữ liệu được sửa là dữ liệu của những cột nào trong sheet form? và dữ liệu được ghi lại trong record là dữ liệu theo dòng có dữ liệu được chỉnh sửa hay chỉ là những cell được chỉnh sửa trong sheet form?
 
Upvote 0
Theo cung cách viết như vầy:
. . . .Mình đã ghi trong file mong bạn giúp mình với.
Yêu cầu 1 : Tìm lại dữ liệu đã được lưu lại ở sheet data
Yêu cầu 2 : Chỉnh sửa dữ liệu rồi cập nhập lại ở sheet data đồng thời dữ liệu cũ sẽ lưu vào sheet record.
Cảm ơn rất nhiều mình đang định xây dựng ý tưởng nhập liệu mới cho bộ phận mình cái này sẽ giúp mình rất nhiều.
Cụ thể của iêu cầu 2 :
+Bước 1 :Làm theo yêu cầu 1
+Bước 2 : Người nhập liệu sửa dữ liệu
+Bước 3 : Nhấn vào nút "Cập nhập dữ liệu ".
Kết quả :
1.dữ liệu ngày ở H4 sẽ cập nhập sang Sheet Data đúng vị trí.
2.Dữ liệu sửa cũ sẽ lưu lại ở sheet "Record" (Sheet này kiểm tra người nhập có sửa dữ liệu hay không)

(+) Làm theo bước 1 có nghĩa lả cho hiện thị dữ liệu nguyên 1 ngày nào đó cần sửa; Tiến hành sửa & kế tiếp là lưu lại (Dữ liệu cũ lưu 1 nơi khác; dữ liệu mới được chỉnh sửa ghi lại vô bảng cũ)

Nhưng thực ra, mình nghĩ không fải tác giả sẽ sửa chữa hết các dòng trong dữ liệu đâu; Chỉ vài dòng hay thậm chí 1 dòng hay 1 ô dữ liệu nào đó thôi.
Nếu đúng như mình đoán thì nên đưa lên ListBox dữ liệu 1 ngày thì hay hơn;
Chọn dòng cần sửa trên ListBox; Dữ liệu (của dòng đã chọn) sẽ hiện trên các TextBox để chỉnh sửa
Quá trình lưu sẽ nhẹ nhàng hơn.
 
Upvote 0
@Hoang2013 Cảm ơn vì đoạn code của bạn. Mình mới tìm hiểu VBA nên chưa biết được đoạn Code bạn viết ý nghĩa như thế nào.
Mới chỉ copy code vào và chạy thôi cũng OK được 90% ý mình muốn. Mình mò mãi từ tối tới giờ để có thể làm được yêu cầu 2 mà chưa ra.
Kế hoạch của mình là :
1.Kiếm đoạn code nào đó copy ngày trước chỉnh sửa trong file Data copy ra sheet Record trước.
2.Tìm đoạn code nào tìm dữ liệu sheet form paste để đè lên dữ liệu trùng ngày của sheet data.
Mình sẽ cố gắng làm file mới nếu không làm được gởi cho bạn gợi ý giúp.
 
Upvote 0
Theo cung cách viết như vầy:


(+) Làm theo bước 1 có nghĩa lả cho hiện thị dữ liệu nguyên 1 ngày nào đó cần sửa; Tiến hành sửa & kế tiếp là lưu lại (Dữ liệu cũ lưu 1 nơi khác; dữ liệu mới được chỉnh sửa ghi lại vô bảng cũ)

Nhưng thực ra, mình nghĩ không fải tác giả sẽ sửa chữa hết các dòng trong dữ liệu đâu; Chỉ vài dòng hay thậm chí 1 dòng hay 1 ô dữ liệu nào đó thôi.
Nếu đúng như mình đoán thì nên đưa lên ListBox dữ liệu 1 ngày thì hay hơn;
Chọn dòng cần sửa trên ListBox; Dữ liệu (của dòng đã chọn) sẽ hiện trên các TextBox để chỉnh sửa
Quá trình lưu sẽ nhẹ nhàng hơn.
Bạn đoán trúng ý mình quá mình chỉ cần chỉnh sửa khi có phát hiện sai so với dữ liệu máy chấm vân tay thôi. Trên cơ bản cái này ít xảy ra trừ khi người nhập họ sai xót nên chỉ chỉnh sửa vài dòng thôi.
@gttrongvn Mình chỉ cần chỉnh sửa những chỗ bị nhập sai thôi. Ghi lưu trữ lại dữ liệu đã sửa trước đó vào 1 sheet riêng cho từng dòng chỉnh sửa
 
Upvote 0
Mình chỉnh xong rồi, mình làm thao tác khác bạn tý.Yêu cầu 1 thay vì click vào shape, mình cho chỉnh sửa trực tiếp trên ô D2, bạn thay đổi ngày thì dữ liệu sẽ tự thay đổi theo. Yêu cầu 2 thì như cách mình hiểu, sau khi mở bước 1, nếu có chỉnh sửa dòng nào thì sẽ tự copy sang sheet record dòng có dữ liệu được chỉnh sửa, sau đó copy và paste vào sheet data khối dữ liệu mới.
Trong file mình có sử dụng hàm simplefilter của tác giả Hoàng Trọng Nghĩa, bạn có thể tham khảo trên diễn đàn, có thể áp dụng cho nhiều trường hợp sau này.
 
Upvote 0
Mình chỉnh xong rồi, mình làm thao tác khác bạn tý.Yêu cầu 1 thay vì click vào shape, mình cho chỉnh sửa trực tiếp trên ô D2, bạn thay đổi ngày thì dữ liệu sẽ tự thay đổi theo. Yêu cầu 2 thì như cách mình hiểu, sau khi mở bước 1, nếu có chỉnh sửa dòng nào thì sẽ tự copy sang sheet record dòng có dữ liệu được chỉnh sửa, sau đó copy và paste vào sheet data khối dữ liệu mới.
Trong file mình có sử dụng hàm simplefilter của tác giả Hoàng Trọng Nghĩa, bạn có thể tham khảo trên diễn đàn, có thể áp dụng cho nhiều trường hợp sau này.
 

File đính kèm

Upvote 0
Mình chỉnh xong rồi, mình làm thao tác khác bạn tý.Yêu cầu 1 thay vì click vào shape, mình cho chỉnh sửa trực tiếp trên ô D2, bạn thay đổi ngày thì dữ liệu sẽ tự thay đổi theo. Yêu cầu 2 thì như cách mình hiểu, sau khi mở bước 1, nếu có chỉnh sửa dòng nào thì sẽ tự copy sang sheet record dòng có dữ liệu được chỉnh sửa, sau đó copy và paste vào sheet data khối dữ liệu mới.
Trong file mình có sử dụng hàm simplefilter của tác giả Hoàng Trọng Nghĩa, bạn có thể tham khảo trên diễn đàn, có thể áp dụng cho nhiều trường hợp sau này.
@gttrongvn Mình không hiểu được code bạn cho mình vì mình mới học được Record Marco thôi, nhưng mình có thể sử dụng được khi copy giống ý chang file cảu bạn.
Làm theo cách của @Hoang2013 thì phù hợp hơn vì có thể in báo cáo, dễ cho người nhập khi muốn nhập ngày mới chỉ cần gọi ngày trước đó rồi chỉnh chút là nhập liệu ok.
Mình copy lên file mình đã làm theo ý tưởng của @Hoang2013 .
Còn yêu cầu 2 mình vẫn chưa làm được mình ghi rõ lại yêu cầu nhé.
Yêu cầu 2 :
+Bước 1 :Làm theo yêu cầu 1 TÌM DỮ LIỆU CỦA 1 NGÀY BẤT KỲ
+Bước 2 : Người nhập liệu sửa dữ liệu
+Bước 3 : Nhấn vào nút "Cập nhập dữ liệu ".
Kết quả :
1.Dữ liệu TRƯỚC KHI SỬA ở SHEET DATA sẽ lưu lại ở sheet "Record"
(Sheet này kiểm tra người nhập có sửa dữ liệu hay không)
2.Dữ liệu MỚI SAU KHI SỬA Ngày ở H4 ở sheet Form sẽ cập nhập sang Sheet Data THAY THẾ vị trí DỮ LIỆU CŨ.
@gttrongvn ở Sheet Record mình muốn lưu lại dữ liệu trước khi chỉnh sửa chứ không phải sau khi đã chỉnh.
Cảm ơn 2 người đã giúp đỡ nhiệt tình. Mình sẽ cố gắng học VBA để có thể đóng góp cho diễn đàn một ngày nào gần nhất.01:30 rồi mình phải đi ngủ đây.
 

File đính kèm

Upvote 0
Thêm 1 file tham khảo cho chủ bài đăng;

Bạn thao tác thử sáng nay, Chiều ta tiếp!
 

File đính kèm

Upvote 0
Mình đã kết hợp lung tung code và thành 1 file theo đúng ý mình.
Khá tâm đắc cho thành quả đầu tiên VBA.
THỰC HIỆN YÊU CẦU 2
1.Chọn ngày ở ô D2.
2.Tìm dữ liệu ngày sửa Shape "Tìm dữ liệu sửa"
3.Cập nhập dữ liệu vị trí cần sửa.
4.Kết thức nhấn nút "Cập nhập dữ liệu sửa"
@Hoang2013 Mình sẽ cố gắng học code của bạn. Cái này thì chuyên nghiệp quá rồi. Để tối nay chỉnh sửa lại chút.
 

File đính kèm

Upvote 0
Sry bạn, file hồi sáng mình gửi bạn code mình viết bị một số lỗi, mình gửi lại bạn tham khảo và chỉnh lại bên file của bạn, file này mình đã sửa hết các lỗi mình phát hiện ra, mình tạo thêm nút in dữ liệu, khi bạn muốn in sẽ ra form in theo định dạng, số thứ tự trong form in sẽ được đánh dấu lại từ 1 tới cuối.Bạn tham khảo nha.
File của bạn mình tham khảo rồi,máy bên mình định dạng ngày hệ thống là dd/mm/yyyy nên khi sử dụng không xuất ra được dữ liệu
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
. . . . .
Khá tâm đắc cho thành quả đầu tiên VBA.
THỰC HIỆN YÊU CẦU 2
1..
2.Tìm dữ liệu ngày sửa Shape "Tìm dữ liệu sửa"
3.Cập nhập dữ liệu vị trí cần sửa.
4.Kết thức nhấn nút "Cập nhập dữ liệu sửa"
. . . Cái này thì chuyên nghiệp quá rồi. Để tối nay chỉnh sửa lại chút.
Có khi nào 1 dòng dữ liệu fải sửa vài ba lân hơn không? Nếu có thì sẽ lưu hết các lần sửa chứ?

Có những cột dữ liệu sẽ không thể hay không cần sửa, fải không? Nếu có thì sẽ là những cột nào?
 
Upvote 0
Có khi nào 1 dòng dữ liệu fải sửa vài ba lân hơn không? Nếu có thì sẽ lưu hết các lần sửa chứ?

Có những cột dữ liệu sẽ không thể hay không cần sửa, fải không? Nếu có thì sẽ là những cột nào?
Có thể 1 dòng phải sửa 2 hoặc 3 lần hơn, nên lưu lại để biết trước đó là gì ạ.
Về cột thì cơ bản là Name và Code thì khong cần sửa còn các cột khác cần phải sửa.
Em có chỉnh lại file của anh làm hôm qua nhưng nút lưu vẫn chưa OK ạ.
 

File đính kèm

Upvote 0
Em có chỉnh lại file của anh làm hôm qua nhưng nút lưu vẫn chưa OK ạ.
Nút lưu trên Form xong rồi đây; Mời bạn thao tác để tìm thêm khiếm khuyết.
 

File đính kèm

Upvote 0
Nút lưu trên Form xong rồi đây; Mời bạn thao tác để tìm thêm khiếm khuyết.
@Hoang2013 Em tìm mãi mà không biết em sai cái chỗ nào nữa. Báo lưu xong rồi , sheet record ok.
Nhưng không sửa dữ liệu ở sheet data. Kiểm tra giúp em.
Hay là do em làm thêm 1 cột tổng giờ tăng ca cộng lại phải không ạ?
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom