Nhập dữ liệu từ Form trong Sheet 1 sang Sheet 2, tìm kiếm và sửa dữ liệu

Liên hệ QC

ledoanvu

Thành viên mới
Tham gia
20/10/08
Bài viết
26
Được thích
8
Cần giúp đỡ

Em có làm 1 file tổng hợp dữ liệu sản xuất và muốn sử dụng VBA cho nó nhanh.

Hiện em chỉ mới học nên chưa viết được Code VBA. Em mới viêt được có 1 xíu.

File này tập hợp dữ liệu thời gian của các lot sản xuất. Với ID là CH mã số lot tăng dần theo thứ tự.

Các dữ liệu nhập ở Sheet Input sẽ lưu sang sheet DataTime

Trong file em tạo ra 3 nút :

  • 1. Nút save :
  • -Sau khi nhập dữ liệu ở những ô màu vàng của sheet “Input” nhấn vào đó sẽ lưu vào Sheet “DataTime” . Dữ liệu ở ô màu vàng của sheet “Input” sẽ xóa đi để nhập lot mới.
  • Điều kiện kèm:
  • +Dữ liệu các lot ở Sheet “DataTime “ Sau khi nhập sẽ sắp xếp tăng dần theo thứ tự của CH.
  • +Nếu số CH đã tồn tại thì không cho lưu và xuất hiện 1 hộp thoại yêu cầu kiểm tra lại và nhấn vào nút Edit nếu muốn ghi sửa dữ liệu
  • 2. Nút Search :
  • Sau khi đánh số CH ở ô B3 Nhấn nút này Thì dữ liệu sẽ hiện về sheet input để kiểm tra và in ấn.
  • 3. Nút Edit :
  • Sau khi search số CH xong nếu sửa dữ liệu trong đó và thay đổi ở sheet DataTime thì nhấn nút này. Sau khi lưu xong vào sheet DataTime thì xóa dữ liệu này đi.
  • Điều kiện kèm theo :
  • +Nếu dữ liệu sẽ lưu mà khác so với dữ liệu trước đó thì ô đó ở sheet “DataTime” sẽ đổi màu vàng.
  • File đính kèm em có một ít dữ liệu không biết có rõ ràng chưa anh chị góp ý giúp em ạ.
 

File đính kèm

Em đã tìm cách làm được 1 yêu cầu đầu tiên là chuyển dữ liệu từ sheet nhập liệu dang sheet data. Ai có thể giúp em hoặc gợi ý cho em các mục khác được không ạ. Em cảm ơn ạ.
 

File đính kèm

Upvote 0
Em đã tìm cách làm được 1 yêu cầu đầu tiên là chuyển dữ liệu từ sheet nhập liệu dang sheet data. Ai có thể giúp em hoặc gợi ý cho em các mục khác được không ạ. Em cảm ơn ạ.
Bạn đã chuyển nhưng chưa xử lý trường hợp LOT đã có trong Data.
Tôi chỉ làm 2 nút lệnh thôi, tùy bạn sử dụng.
 

File đính kèm

Upvote 0
Em cảm ơn @Ba Tê đã giúp đỡ em.
Thực sự em mới học VBA nên em không dịch nổi cấu trúc lệnh của anh chạy như thế nào nên em không áp dụng được.
Những gì em làm được đến giờ phút này :
+Phát hiện ra sai lầm của em cột mã LOT không phải là dạng số nguyên nên khi Sort từ lớn đến bé không được.
+Em đã làm được cách lấy User name nhập và gán giờ hiện tại của hệ thống sau khi nhập.
+Đã làm được hộp thoại yêu cầu người nhập quyết định sửa hay không sửa dữ liệu sai.

*Cố dịch ra những code của anh viết nhưng không hiểu được. Đoạn quan trọng nhât anh làm như thế nào nữa?
Vậy mong anh giúp em giải thích qua chút để em có thể hoàn thành file của mình.

Quote :
Option Explicit

Public Sub Luu_Data()
Dim sArr(), dArr(1 To 1, 1 To 28), DK, tArr() As Boolean
'Khai báo biến dạng Boolean Logic True or False
'+sArr() là vùng từ A4:E18 của sheet "Input" Trả về True or False >>> Không hiểu () có tác dụng gì?
'+dArr(1 to 1, 1 to 28) là cột từ cột 1 đến cột số 28 cua sheet "Data" >>> Không hiểu () có tác dụng gì?
'+Dk tra ve "True or False nếu số Lot đã tồn tại
Dim I As Long, J As Long, Col As Long, R As Long, Lot As Long, Rws As Long, STT As Long
'Khai báo biến dạng Long
'+I lặp từ dòng 5 đến dòng cuối R của Sheet "Data"' dùng để đánh số thứ tự của cột STT sheet "Dâta"
'+J lặp từ 1 đến 5 chưa hiểu mục đích làm gì
'+Col là số thứ tự của cột tăng dần 1 khi
'+R la dong cuoi sau dong so 5 cua Sheet "Data"
'+Lot là mã số Lot (Tại sao khi đổi số Lot ở Sheet Data sang dạng Number thì chương trình báo lỗi không chạy.
'+Rws là gì không hiêu tại sao có I rồi gán Rws = I
'+ STT là số thứ tự của cột STT


With Sheets("Input")
If .Range("A4") <> Empty Then 'Nếu ô A4 khác rỗng thì sẽ thực thi
sArr = .Range("A4:E18").Value 'sArr la Vung tu A4:E18 thanh gia tri
Lot = .Range("A4").Value 'Lot lalà mã Lot tại ô A4 sheet "Input"
R = Sheets("Data").Range("A100000").End(xlUp).Row 'R là dòng cuối sheet Data dò ngược từ dòng 100000 cột A dò lên.
If R > 5 Then 'Nếu R lớn hơn 5 sheet Data sẽ dẫn tới kết quả
STT = Sheets("Data").Range("A" & R).Value 'STT la gia tri Cua o tai cot A hang cuoi R
tArr = Sheets("Data").Range("A1:B" & R).Value 'tArr là vùng từ ô A1đến ô B dòng cuối R
For I = 5 To R 'Quet vong lam tu 5 den dong cuoi R
If Val(tArr(I, 2)) = Lot Then ' Từ đây xuống đáy không hiểu gì???
Rws = I
STT = tArr(I, 1)
End If
Next I
Else
STT = 1
End If
Col = Col + 1
dArr(1, Col) = STT
'===============================================
For J = 1 To 5
Col = Col + 1
dArr(1, Col) = sArr(1, J)
Next J
'----------------------------------------------
For I = 4 To 15
Col = Col + 1
dArr(1, Col) = sArr(I, 3)
Next I
'----------------------------------------------
For I = 4 To 13
Col = Col + 1
dArr(1, Col) = sArr(I, 5)
Next I
'===============================================
If Rws Then
DK = MsgBox("Lot da ton tai, Luu lai cac thay doi?", vbOKCancel, "GPE")
'Hiện thông báo Lot đã tồn tại
If DK = True Then
Sheets("Data").Range("A" & Rws).Resize(, 28) = dArr
End If
Else
STT = STT + 1
dArr(1, 1) = STT

With Sheets("Data")
.Range("A" & R + 1).Resize(, 28) = dArr ' dArr là vùng sẽ ghi dữ liệu ô A dòng cuối R đến cột số 28 trong sheet Data
.Range("A5", .Range("A100000").End(xlUp)).Resize(, 27). _
Sort Key1:=.Range("B5"), Order1:=xlAscending
'Sort dữ liệu của vùng từ A5 đến doang cuối R tới cột số 27, _(dùng để nối câu lệnh) sắp xếp tăng dần của cột B số Lot
End With
MsgBox "Da Luu Vao Data", , "GPE"
'hộp thoại thông báo đã lưu DAta
End If
End If
.Range("A4:E4,C7:C18").ClearContents
' xóa vùng dữ liệu nhập
End With
End Sub
 

File đính kèm

Upvote 0
*Cố dịch ra những code của anh viết nhưng không hiểu được. Đoạn quan trọng nhât anh làm như thế nào nữa?
Vậy mong anh giúp em giải thích qua chút để em có thể hoàn thành file của mình.
Tôi hiểu sao viết vậy, không qua trường lớp lý thuyết nào nên không thể giải thích rõ được. Nhiều khi chưa tóm gọn được vấn đề nên code viết còn lu bu, lòng vòng...
Bạn xem file này. chỉ cần 2 nút lệnh có thể giải quyết được các ý muốn của bạn. Tùy bạn chỉnh sửa, thêm bớt gì đó tùy ý.
Phải chuyển LOT cot B sheet Data thành Number mới Sort được.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Tôi tạm phụ bạn Ba Tê giải thích:
'+sArr() là vùng từ A4:E18 của sheet "Input" Trả về True or False >>> Không hiểu () có tác dụng gì?
'+dArr(1 to 1, 1 to 28) là cột từ cột 1 đến cột số 28 cua sheet "Data" >>> Không hiểu () có tác dụng gì?
'+J lặp từ 1 đến 5 chưa hiểu mục đích làm gì
'+Rws là gì không hiêu tại sao có I rồi gán Rws = I
...
() trong hai câu hỏi đầu có tác dụng buộc hai biến này phải là array. Nếu bạn đặt sArr = 1 thì sẽ thấy lỗi
Không có () thì vẫn chạy như thường, nhưng nếu bạn đặt sArr = 1 thì sẽ không thấy lỗi.

J trong câu hỏi kế chỉ là thói quen của ngừoi code, dùng I cho dòng và J cho cột.

Rws trong câu kế là trị đếm vị trí của Lot cuối cùng. Trị I đếm tất cả các vị tí từ 5 đến R. Rws chỉ được gán bằng I khi ở đó có một Lot.
 
Upvote 0
Web KT

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

Back
Top Bottom