Phạm Phúc Thịnh
Phạm Phúc Thịnh
Thảo luận 4 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 622 lượt xem

Tại sao thì dữ liệu copy vào file kết quả lại có thứ tự là bảng lương

Tại sao em làm thì dữ liệu copy vào file kết quả lại có thứ tự là bảng lương tháng 4 đầu tiên xong rồi đến các bảng lương tháng 1,2,3 ạ?
Đây là code của em ạ.

Sub nhap_du_lieu_luong_2()
'Cach 2: Su dung vong lap Do While
'Mo thu muc chua du lieu de nhap
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = True 'cho phep chon nhieu file
If .Show = -1 Then 'co thuc hien chon noi dung
Dim duongdan As String 'khai bao duong dan thu muc
duongdan = .SelectedItems(1) & "\"
Dim ten_file As String 'khai bao ten file
ten_file = "*BangLuong*.xls*" 'chon cac file co ten chua tu khoa "Bangluong" va duoi co chua xls
Dim file_duoc_chon As String
file_duoc_chon = Dir(duongdan & ten_file)

'Thuc hien vong lap Do while
Do While file_duoc_chon <> ""

Dim wb_kq As Workbook 'Gan bien wb_kq cho workbook ket qua
Dim wbi As Workbook 'Gan bien wbi cho workbook duoc chon
Set wb_kq = ThisWorkbook
Set wbi = Workbooks.Open(Filename:=duongdan & file_duoc_chon)

'Xac dinh dong cuoi cua workbook ket qua
Dim dongcuoi_kq As Long
dongcuoi_kq = wb_kq.Sheets("Data_Tienluong").Range("A" & Rows.Count).End(xlUp).Row

'Xac dinh dong dau cua workbook duoc chon
Dim dongdau_wbi As Long
dongdau_wbi = 8

'Xac dinh dong cuoi cua workbook duoc chon
Dim dongcuoi_wbi As Long
dongcuoi_wbi = wbi.Sheets(1).Range("F" & Rows.Count).End(xlUp).Row

'Xac dinh khoang cach cua workbook duoc chon
Dim khoangcach As Long
khoangcach = dongcuoi_wbi - dongdau_wbi + 1

'Copy du lieu tu workbook duoc chon vao workbook ket qua
'Kiem tra du lieu co bi trung khong
Dim test_trung As Integer
test_trung = WorksheetFunction.CountIfs(wb_kq.Sheets(2).Range("A6:A" & dongcuoi_kq), wbi.Sheets(1).Range("E2"), _
wb_kq.Sheets(2).Range("C6:C" & dongcuoi_kq), wbi.Sheets(1).Range("G2"))
If test_trung >= 1 Then
MsgBox "Du lieu bi trung"
Exit Sub
Else
wb_kq.Sheets("Data_Tienluong").Range("A" & dongcuoi_kq + 1 & ":BM" & dongcuoi_kq + khoangcach) = _
wbi.Sheets(1).Range("A" & dongdau_wbi & ":BM" & dongcuoi_wbi).Value
End If

'Dong workbook
wbi.Close savechanges:=False

'Xac dinh lai file khac duoc mo
file_duoc_chon = Dir

Loop

End If
End With

End Sub
Thảo luận 4 câu trả lời
Lượt xem 622 lượt xem
Vỗ tay vỗ tay
Phạm Phúc Thịnh 14:06 - Jun 05, 2020
Việc workbooks nào lấy trước, hoặc sheet nào copy trước thì bạn chú ý ở các vị trí biến wbi và wbi.Sheets(1)
Set wbi = Workbooks.Open(Filename:=duongdan & file_duoc_chon) chính là gán wbi cho workbook được chọn khi mở cửa sổ chọn file.
wbi.Sheets(1) là sheet thứ 1 trong wbi (sheet đầu tiên bên trái)
Như vậy tùy theo bạn chọn file nào trước thì sẽ lấy dữ liệu file đó nạp trước.
Việc này thực ra không quá quan trọng, bởi bạn hoàn toàn có thể sắp xếp lại thứ tự bảng kết quả sau quá trình lấy dữ liệu. Thêm 1 macro sắp xếp bảng kết quả nữa là được, phạm vi sắp xếp từ dòng tiêu đề tới dòng cuối.
Vỗ tay vỗ tay
Phạm Phúc Thịnh 17:06 - Jun 05, 2020
Ở đây là em chọn cả folder nên em không hiểu sao VBA lại chọn file "BangLuong_T4" trước các file 1,2,3. Trong khi thứ tự các file trong folder em chọn thì vẫn là theo thứ tự 1,2,3,4
Vỗ tay vỗ tay
Phạm Phúc Thịnh 09:06 - Jun 08, 2020
Việc này có thể do cách bạn đặt tên file thôi. Nếu chọn theo folder thì cơ chế chọn file sẽ tự động theo thứ tự các file trong folder đang sắp xếp thế nào thôi. Khi chọn theo folder thì không nên quan tâm file nào trước, mà chỉ nên xác định phương pháp sắp xếp lại kết quả theo trật tự mà thôi.
Vỗ tay vỗ tay
Phạm Phúc Thịnh 10:06 - Jun 08, 2020
Dạ vâng, em cảm ơn ạ!
Vỗ tay vỗ tay
Câu hỏi liên quan
© 2020 - Bản quyền của Công Ty Cổ Phần Công Nghệ Giáo Dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở Kế hoạch và Đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ Thông tin và Truyền thông