Xin giúp đỡ Code kiểm tra và copy dữ liệu từ sheet 1 sang sheet 2

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

conan1

Thành viên mới
Tham gia
12/12/14
Bài viết
17
Được thích
3
Xin chào mọi người.
Em có file excel copy dữ liệu từ sheet 1 sang sheet 2. Hiện tại code em đã chạy rồi. Tuy nhiên có 1 vấn đề là:
- Khi em nhập dữ liệu vào dòng 12 đủ dữ liệu. Dòng 13 e nhập thiếu dữ liệu ở cột D (Tên hàng) hoặc cột F (Số lượng) dữ liệu dòng 12 vẫn được ghi vào sheet 2. Và sẽ có thông báo hiện ra để em nhập dữ liệu cho ô dữ liệu còn thiếu đó.
- Sau đó em bấm ghi dữ liệu thì phần mềm sẽ ghi dòng 12 và 13 vào sheet 2.
- Như vậy ở sheet 2 của e sẽ có 3 dòng dữ liệu: 2 dòng đầu sẽ có cùng nội dung như nhau do ở lần bấm Ghi đầu tiên thì dòng 12 đã được ghi vào sheet 2. Khi bấm ghi lần nữa (sau khi đã sửa lại dữ liệu cho đầy đủ) thì dữ liệu sẽ bị trùng

Code em đang viết đây:

Sub CL_Save()
'Khai bao bien
'Dong cuoi data

Dim lr_data As Long
lr_data = Sheet2.Range("D" & Rows.Count).End(xlUp).Row

'Dong cuoi CL

Dim lr_cl As Long
lr_cl1 = Sheet1.Range("D" & Rows.Count).End(xlUp).Row

'Bien so luong

Dim lr_SoLuong As Long
lr_SoLuong = Sheet1.Range("F" & Rows.Count).End(xlUp).Row

'Bien luan cac truong hop khong luu

Dim ThongBao As Long
ThongBao = MsgBox("Save data", vbOKCancel + vbInformation + vbDefaultButton1, "Thong Bao")
Select Case ThongBao
Case vbOK


If lr_cl <= 11 Then
MsgBox "Khong co ten hang hoa"
Exit Sub
ElseIf lr_SoLuong <= 11 Then
MsgBox "Khong co so luong"
Exit Sub
Else
'Lenh luu
Dim i As Long
For i = 12 To lr_cl
If Sheet1.Range("D" & i).Value <> "" And Sheet1.Range("F" & i).Value <> "" And Sheet1.Range("I1").Value <> "" And Sheet1.Range("I2").Value <> "" Then
Sheet2.Range("B" & lr_data + 1 & ":I" & lr_data + 1).Value = _
Sheet1.Range("B" & i & ":I" & i).Value
Sheet2.Range("A" & lr_data + 1).Value = Sheet1.Range("C7").Value
Sheet2.Range("J" & lr_data + 1).Value = Sheet1.Range("I2").Value
Sheet2.Range("K" & lr_data + 1).Value = Sheet1.Range("I1").Value
lr_data = lr_data + 1
Else
MsgBox "Kiem tra Ten hang, So luong, Khu vuc hoac Loai khong duoc de trong"
Exit Sub
End If
Next i
MsgBox "Luu thanh cong"
End If

End Select

End Sub


Nhờ các bác chỉnh lại giúp em code để có thể kiểm tra toàn bộ dữ liệu ở sheet 1 đủ thì mới ghi qua sheet 2. Chứ không phải đang kiểm tra từng dòng như em ạ

Em mới lọ mọ xem youtube được vài bữa nên chưa biết cách làm. Mong các bác thông cảm ạ.

Em có đính kèm file em đang code

Ah có bác nào bonus giúp em cái code sắp xếp dữ liệu lại "Giảm dần" theo ngày sau mỗi lần ghi dữ liệu luôn thì càng tốt ạ.

Em cảm ơn các bác trước!
 

File đính kèm

  • Book1.xlsb
    19.4 KB · Đọc: 5
Cảm ơn bạn nhiều nhé. Bữa giờ mình có việc cá nhân nên chưa vào coi và sử dụng. Nay mới vào lại được. Có đọc qua code của bạn thì cũng cũng hiểu tạm tạm. Chỉ có phần Function TT là chưa hiểu hết được.
Còn lại file thì chạy ổn hết rồi.
Tuy nhiên có một chỗ này bị lỗi nhưng vẫn dùng được. Bạn có thể giải thích giùm mình nó bị lỗi gì với không?
Tình trạng là: Nếu mới mở file mà mình xóa hết dữ liệu
- Trường hợp 1: dùng nút delete để xóa dữ liệu bên sheet data thì 2 ô mã phiếu bên sheet CL sẽ báo lỗi #Value
- Trường hợp 2: dùng chức năng xóa dòng dữ liệu (xóa hết) thì 2 ô mã phiếu bên sheet CL cũng sẽ báo lỗi #Value
- Trường hợp 3: mình ghi dữ liệu mới vào trước. Sau đó dùng nút delete để xóa cá dòng dữ liệu cũ thì 2 ô mã phiếu bên sheet CL cũng sẽ báo lỗi #Value
- Trường hợp 4: Mình ghi dữ liệu mới vào trước. Sau đó dùng chức năng xóa dòng để xóa các dữ liệu mẫu đang có thì chạy bình thường
Tóm lại là bên sheet data phải có dữ liệu trước thì 2 ô mã phiếu bên sheet CL mới không báo lỗi
Hiện tại mình thêm dữ liệu vào rồi mới xóa mấy dòng dữ liệu test. Nên là đang dùng ổn rồi. Nếu được bạn giải thích giúp mình lỗi này là do vấn đề ở đâu được không? Cảm ơn bạn nhiều
Các trường hợp 1,2,3,4 tôi tạm hiểu thế này : Do sh (Sheet) không có dữ liệu dẫn đến mảng để tính toán số phiếu không tìm thấy và gây lỗi.
Để không còn bị nữa bạn dùng hàm IFERROR để xử lý: Cụ thể : I3=IFERROR(SOPHIEU();""), tương tự với I4. Thay dấu ";" trong công thức theo máy của bạn.
Còn về Function TT : đó là hàm để tính ra số TT của Phiếu: Mã số Phiếu Gồm 3 Phần:
X241006.15
1/ phần 1 (Ký tự đầu tiên bên trái) là Loại phiếu Xuất hoặc Nhập (X hoặc N)
2/ 6 số tiếp theo là năm tháng ngày xuất phiếu. 241006 (Ngày 6/10/2024)
3/ Số sau dấu chấm: là số phiếu xuất hoặc số phiếu nhập đã xuất ra trong ngày (phiếu Xuất thứ 15 trong ngày ở 2/)===> cái hàm UDF TT chính là để tính cho phần thứ 3 này.
 
Upvote 0
Các trường hợp 1,2,3,4 tôi tạm hiểu thế này : Do sh (Sheet) không có dữ liệu dẫn đến mảng để tính toán số phiếu không tìm thấy và gây lỗi.
Để không còn bị nữa bạn dùng hàm IFERROR để xử lý: Cụ thể : I3=IFERROR(SOPHIEU();""), tương tự với I4. Thay dấu ";" trong công thức theo máy của bạn.
Còn về Function TT : đó là hàm để tính ra số TT của Phiếu: Mã số Phiếu Gồm 3 Phần:
X241006.15
1/ phần 1 (Ký tự đầu tiên bên trái) là Loại phiếu Xuất hoặc Nhập (X hoặc N)
2/ 6 số tiếp theo là năm tháng ngày xuất phiếu. 241006 (Ngày 6/10/2024)
3/ Số sau dấu chấm: là số phiếu xuất hoặc số phiếu nhập đã xuất ra trong ngày (phiếu Xuất thứ 15 trong ngày ở 2/)===> cái hàm UDF TT chính là để tính cho phần thứ 3 này.
Cảm ơn bạn! Để mình chỉnh lại phần I3 và I4
Còn 2 cái mã phiếu mình đọc code hiểu code được 2 phần đầu. Còn phần 3 - phần thứ tự đọc code do không biết các hàm này nên đọc không biết code chạy như nào. Để mình tìm hiểu thêm
Nói chung là cảm ơn bạn rất nhiều, đã hỗ trợ mình thời gian qua.
 
Upvote 0
Web KT

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

Back
Top Bottom