mình viết câu lệnh như bên dưới, nhưng khi import dữ liệu cả 4 file chi tiết thì bảng tổng hợp chỉ có dữ liệu của file tháng 1. dù có import thêm bất kì file nào thì cũng chỉ có dữ liệu file tháng 1. Nhờ chuyên gia xem giúp lỗi sai ạ.
-----------------------------------------
Sub import_du_lieu_3()
'b1: chon file
With Application.FileDialog(msoFileDialogFilePicker) 'thu muc cho file cung cho voi file dang viet code vba
.AllowMultiSelect = True 'cho phep chon nhieu file
.Show 'hien cua so chon file
' khai bao so file dem duoc
Dim i As Integer
For i = 1 To .SelectedItems.Count 'dem so file duoc chon
'b2: xet file duoc chon
Dim wb_1 As Workbook ' khai baobien wb_1 o file cac thang
Dim wb_TH As Workbook 'khai bao bien wb ket qua o file Bang tong hop tien luong
Set wb_TH = ThisWorkbook 'chinh la wb dang viet code
Set wb_1 = Workbooks.Open(.SelectedItems(i)) 'file duoc chon chinh la file duoc mo len => lan luot mo so luong i file do len
'b3: xac dinh dong dau, dong cuoi, khoang cach trong bang chi tiet va dongcuoi trong bang TH
Dim dongcuoi_TH As Long
dongcuoi_TH = wb_TH.Sheets("Data_TienLuong").Range("f" & Rows.Count).End(xlUp).Row
'b3.2: xac dinh dong dau, dong cuoi, khoang cach trong bang chi tiet
Dim dongdau_ct As Long
dongdau_ct = 8
Dim dongcuoi_ct As Long
dongcuoi_ct = wb_1.Sheets(1).Range("f" & Rows.Count).End(xlUp).Row
Dim khoangcach_ct As Long
khoangcach_ct = dongcuoi_ct - dongdau_ct + 1
'b3.3: check trung import du lieu
Dim file As Integer
file = Application.WorksheetFunction.CountIf(Range("a6:a" & dongcuoi_TH), wb_1.Sheets(1).Range("e2").Value)
If (file = 0) Then
'b4: luu vung du lieu o file chi tiet sang file tong hop
wb_TH.Sheets("Data_TienLuong").Range("a" & dongcuoi_TH + 1 & ":BM" & dongcuoi_TH + khoangcach_ct).Value = _
wb_1.Sheets(1).Range("a" & dongdau_ct & ":BM" & dongcuoi_ct + khoangcach_ct).Value
End If
'b5: dong file chi tiet
wb_1.Close savechanges:=False
next i
End With
End Sub
1. Bạn xem lại đoạn code này:
file = Application.WorksheetFunction.CountIf(Range("a6:a" & dongcuoi_TH), wb_1.Sheets(1).Range("e2").Value)
Mục đích của bước này là kiểm tra xem dữ liệu bị trùng không. Nhưng Range("A6:A" & dongcuoi_TH) bạn chưa ghi kèm tên sheet, tên workbook.
2. Đoạn code cho nhận giữa 2 vùng ở 2 workbook: Phần nơi cho
wb_1.Sheets(1).Range("a" & dongdau_ct & ":BM" & dongcuoi_ct + khoangcach_ct).Value
vùng này tính từ dòng đầu tới dòng cuối thôi bạn nhé, không bao gồm khoảng cách.
3. Bạn kiểm tra lại toàn bộ Sheet nhận dữ liệu. Có thể ở các dòng bên dưới đã có dữ liệu rồi nhưng bạn không nhìn thấy. Lý do có thể do code cho nhận không đúng vùng nên bị khoảng trống thừa => khiến bạn thấy dòng trống tưởng là không có dữ liệu.
Dear Chuyên gia,
mình đã sửa lại đoạn code theo gợi ý của chuyên gia thì đã chạy được phần check trùng dữ liệu.
Tuy nhiên, khi import đồng thời cả 4 file vào thì chỉ có dữ liệu của file tháng 2,3,4. nếu import lần lượt từng file thì được.
Hoặc nếu sửa dữ liệu ô A5 (xem hình minh hoạ ) thành kí tự khác 1 thì import được đồng thời cả 4 file vào (code chạy như mong muốn)
trong khi vùng dữ liệu để xét biến file là từ A6:A & dòngcuối hoàn toàn không bị ảnh hưởng bởi ô A5?
-------------------------------------
Sub import_du_lieu_2()
'b1: chon file
With Application.FileDialog(msoFileDialogFilePicker) 'thu muc cho file cung cho voi file dang viet code vba
.AllowMultiSelect = True 'cho phep chon nhieu file
.Show 'hien cua so chon file
' khai bao so file dem duoc
Dim i As Integer
For i = 1 To .SelectedItems.Count 'dem so file duoc chon
'b2: xet file duoc chon
Dim wb_1 As Workbook ' khai baobien wb_1 o file cac thang
Dim wb_TH As Workbook 'khai bao bien wb ket qua o file Bang tong hop tien luong
Set wb_TH = ThisWorkbook 'chinh la wb dang viet code
Set wb_1 = Workbooks.Open(.SelectedItems(i)) 'file duoc chon chinh la file duoc mo len => lan luot mo so luong i file do len
'b3: xac dinh dong dau, dong cuoi, khoang cach trong bang chi tiet va dongcuoi trong bang TH
Dim dongcuoi_TH As Long
dongcuoi_TH = wb_TH.Sheets("Data_TienLuong").Range("f" & Rows.Count).End(xlUp).Row
'b3.2: xac dinh dong dau, dong cuoi, khoang cach trong bang chi tiet
Dim dongdau_ct As Long
dongdau_ct = 8
Dim dongcuoi_ct As Long
dongcuoi_ct = wb_1.Sheets(1).Range("f" & Rows.Count).End(xlUp).Row
Dim khoangcach_ct As Long
khoangcach_ct = dongcuoi_ct - dongdau_ct + 1
Dim file As Integer
file = Application.WorksheetFunction.CountIf(wb_TH.Sheets("Data_TienLuong").Range("A6:A" & dongcuoi_TH), wb_1.Sheets(1).Range("e2").Value)
If file = 0 Then
'b4: luu vung du lieu o file chi tiet sang file tong hop
wb_TH.Sheets("Data_TienLuong").Range("a" & dongcuoi_TH + 1 & ":BM" & dongcuoi_TH + khoangcach_ct).Value = _
wb_1.Sheets(1).Range("a" & dongdau_ct & ":BM" & dongcuoi_ct).Value
End If
'b5: dong file chi tiet
wb_1.Close savechanges:=False
Next i
End With
End Sub
Chào bạn bạn xem lại code mẫu nhé