hungvinhhao
Thành viên mới

- Tham gia
- 19/1/08
- Bài viết
- 28
- Được thích
- 1
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
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
. . . .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)
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.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.
@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.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.
Mình đã kết hợp lung tung code và thành 1 file theo đúng ý mình.thử này xem nha bạn
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ứ?. . . . .
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ó 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ì ạ.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?
@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.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 Nếu làm đúng thì chỉ có đúng ngày 24/04 thôi còn các ngày khác khi lưu lại nó không ghi đè lên chỗ mình cần lưu mà nó ghi đè lên những ngày trước. Em đã thử chọn 1 ô tăng ca 200% rồi test thử kết quả là nó lưu ngày nhỏ đến lớn OK nếu mình sửa như thứ tự. Cơ mà đến ngày bất kỳ thì nó sẽ ghi đè lên hàng ngày phía trên. Giúp em với nhé.Mình thao tác trên file của bạn thấy thường mà!
Bạn thử ghi chép lại cái anh chàng hay cô nàng nào không cập nhật xem nào?
Nên thử các ngày từ nhỏ (5/12) cho đến ngày lớn nhất.
Riêng cột bạn vừa thêm thì sẽ chưa thể vô hay sửa số liệu trong cột nớ được.
Để có thể kiểm tra trên ListBox có cập nhật không, bạn fải chịu khó nhập lại ngày & nhấn nút lệnh 'Tìm DL Ngày"
< Kể ra cũng khá khen bạn chịu khó từ hôm qua đến giờ í nhì!>
Private Sub CmdSave_Click()
Dim Rng As Range, sRng As Range
Dim MyColor As Long
Dim MyAdd As String '*'
On Error GoTo LoiCT
1 'Luu Du Liêu Truóc Thay Doi: '
With Sheets("Record").Range("A65500").End(xlUp)
.Offset(1).Value = .Value + 1
.Offset(1, 1).Resize(, 16).Value = Arr0()
Erase Arr0()
End With
2 ' Luu Du Lieu Mói Thay Doi: '
Set Rng = Range([B2], [B2].End(xlDown))
Set sRng = Rng.Find(Me!tbCode.Value, , xlFormulas, xlWhole)
If sRng Is Nothing Then
MsgBox "Nothing"
Else
MyAdd = sRng.Address '*'
Do '*'
If Cells(sRng.Row, "H").Value = TxtToDate(Me!tbDate.Text) Then '*'
With sRng.Interior
MyColor = .ColorIndex
If MyColor < 30 Or MyColor = 43 Then
.ColorIndex = 34
Else
.ColorIndex = MyColor + 1
End If
End With
Cells(sRng.Row, 4).Value = Me!tbG.Value
Cells(sRng.Row, 5).Value = Me!tbGr.Text
Cells(sRng.Row, 6).Value = Me!tbPos.Text
Cells(sRng.Row, 7).Value = Me!tbShift.Text
Cells(sRng.Row, 8).Value = Me!tbDate.Value
Cells(sRng.Row, 9).Value = Me!tbjob.Text
Cells(sRng.Row, 10).Value = Me!tb150.Value
Cells(sRng.Row, 11).Value = Me!tb175.Value
Cells(sRng.Row, 12).Value = Me!tb200.Value
Cells(sRng.Row, 13).Value = Me!tb215.Value
Cells(sRng.Row, 14).Value = Me!tb300.Value
Cells(sRng.Row, 15).Value = Me!tbTre.Value
Cells(sRng.Row, 16).Value = Me!tbSom.Value
Cells(sRng.Row, 17).Value = Me!cbFep.Value
End If
Set sRng = Rng.FindNext(sRng) '*'
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd '*'
End If
Me!tbCode.Value = "": Me!tbName.Value = ""
MsgBox "Luu Xong Ròi!", , "GPE.COM Xin Thông Báo!"
Err_: Exit Sub
LoiCT:
If Err = 13 Then
MsgBox "GPE.COM Tam Biet!": Resume Err_
Else
MsgBox Err, , Error()
End If
End Sub]/php]
Em buồn quá vì chưa hiểu hết ý nghĩa các câu lệnh của bác làm cho mình. Nhất định em sẽ tìm hiểu thêmÔi mình thật sự xin lỗi bạn, Macro còn thiếu nhiều dòng lệnh để tìm đúng ngày cần chép!
Bạn lấy toàn bộ macro này chép đè hết lên cái cũ là được:
(Các dòng lệnh mới thêm mình có đánh dấu bỡi '*')
PHP:Private Sub CmdSave_Click() Dim Rng As Range, sRng As Range Dim MyColor As Long Dim MyAdd As String '*' On Error GoTo LoiCT 1 'Luu Du Liêu Truóc Thay Doi: ' With Sheets("Record").Range("A65500").End(xlUp) .Offset(1).Value = .Value + 1 .Offset(1, 1).Resize(, 16).Value = Arr0() Erase Arr0() End With 2 ' Luu Du Lieu Mói Thay Doi: ' Set Rng = Range([B2], [B2].End(xlDown)) Set sRng = Rng.Find(Me!tbCode.Value, , xlFormulas, xlWhole) If sRng Is Nothing Then MsgBox "Nothing" Else MyAdd = sRng.Address '*' Do '*' If Cells(sRng.Row, "H").Value = TxtToDate(Me!tbDate.Text) Then '*' With sRng.Interior MyColor = .ColorIndex If MyColor < 30 Or MyColor = 43 Then .ColorIndex = 34 Else .ColorIndex = MyColor + 1 End If End With Cells(sRng.Row, 4).Value = Me!tbG.Value Cells(sRng.Row, 5).Value = Me!tbGr.Text Cells(sRng.Row, 6).Value = Me!tbPos.Text Cells(sRng.Row, 7).Value = Me!tbShift.Text Cells(sRng.Row, 8).Value = Me!tbDate.Value Cells(sRng.Row, 9).Value = Me!tbjob.Text Cells(sRng.Row, 10).Value = Me!tb150.Value Cells(sRng.Row, 11).Value = Me!tb175.Value Cells(sRng.Row, 12).Value = Me!tb200.Value Cells(sRng.Row, 13).Value = Me!tb215.Value Cells(sRng.Row, 14).Value = Me!tb300.Value Cells(sRng.Row, 15).Value = Me!tbTre.Value Cells(sRng.Row, 16).Value = Me!tbSom.Value Cells(sRng.Row, 17).Value = Me!cbFep.Value End If Set sRng = Rng.FindNext(sRng) '*' Loop While Not sRng Is Nothing And sRng.Address <> MyAdd '*' End If Me!tbCode.Value = "": Me!tbName.Value = "" MsgBox "Luu Xong Ròi!", , "GPE.COM Xin Thông Báo!" Err_: Exit Sub LoiCT: If Err = 13 Then MsgBox "GPE.COM Tam Biet!": Resume Err_ Else MsgBox Err, , Error() End If End Sub]/php]
Close vấn đề của em ở đây.
'
MÃ TÊN '
Dn Dandori
Ht Heat up,Down
Ks Kanshi
Kr Kiriko
Mt Meeting
Ot Operator
Or Other
Rt Report
ST Safety training
SI Scrap+Ingot
Sp Shipping
Tn Tonyu
TO Traning other
TM Truoble machine
. . . . . .
@ChanhTQ@Có hơn sớm quá không?
Bạn còn những hơn 24 giờ nữa để cùng diễn đàn thảo luận các vấn đề liên quan đếN file như dưới đây, mà:
(1) Bạn có thể nhờ cộng đồng này diễn dịch ngôn ngữ VBA trong các macro bạn chưa rõ nghĩa
(2) Mình thấy ở trang 'List' có danh mục loại nghỉ fép Sao bạn không thiết lập thêm danh mục này: [/QUOTE đã viết:2.Phần này là lý do tăng ca nếu đặt code cũng được nhưng em thấy chưa cần thiết. File trên em sửa lại Form trong phần sửa mục Reason thành Combox list rồi. Khi sửa chỉ cần chọn là OK.
Sau khi xem sơ qua File của bạn còn nhiều vấn đề phải làm như sau:Em buồn quá vì chưa hiểu hết ý nghĩa các câu lệnh của bác làm cho mình. Nhất định em sẽ tìm hiểu thêm
Cảm ơn rất nhiều vì đã nhiệt tình giúp đỡ em.
Em đã kết thúc file theo ý của mình và giờ thì OK trơn chu rồi. File đính kèm
Close vấn đề của em ở đây.
Cảm ơn góp ý của bạn rất nhiều. Thực ra code quà hay code nhân viên mình tạo tự động để bẫy lỗi nhập liệu thôi. Đây là file mình làm cho vk mình nên muốn đơn giản và dễ hiểu nhất. Còn đúng nguyên tắc thì khi nhập dữ liệu ta thường xuất phát từ việc nhập code mới chuẩn đc.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] 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
Cảm ơn bạn rất nhiều!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.