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
11
Được thích
1
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: 2
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!
1/Bạn nên đưa code vào trong thẻ
Mã:
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_cl =
để người khác dễ xem hơn.
2/ Nên khai báo các biến 1 cách tường minh (thói quen tốt cho tương lai). Code nên để dòng Option Explicit lên trên đầu để dễ kiểm soát các biến hơn. Ví dụ : bạn khai báo biến lr_cl as long nhưng khi tính dòng cuối thì lại là lr_cll==> tất nhiên là khi chạy sẽ vấp lỗi.
3/ Nên khai báo các biến ngay từ đầu chứ không phải là khai báo rải rác.
4/ Nên đưa dữ liệu vào mảng để phân tích, kết quả thu được cũng đưa vào mảng kết quả để gán 1 lần xuống sheet => tốc độ chạy code sẽ nhanh hơn.
5/"... Ah có bác nào bonus giúp em cái code sắp xếp ...".KHÔNG NÊN dùng ngôn ngữ chát chít, tây bồi, phim chưởng,.... thì sẽ nhận được nhiều sự hỗ trợ tốt hơn.
Đôi điều khuyên bạn thế thôi, tiếp thu được hay không là ở bạn.
Chào.
 
Upvote 0
Web KT

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

Back
Top Bottom