Thầy ơi ! Hướng dẫn em chặn lấy dữ liệu từ một file đã lấy rồi với ạ.
Chào bạn bạn làm như sau
cần tạo ra biến file để check xem dữ liệu để phân biệt đã có chưa, ở đây mình lấy theo cột A nếu dữ liệu đã có thì bạn import còn không có sẽ thoát file.
Dim file As Integer file = Application.WorksheetFunction.CountIf(Range("A6:A" & DongCuoi_KQ), wb_1.Sheets(1).Range("E2").Value) If (file = 0) Then 'B4: luu wb_KQ.Sheets("Data_TienLuong").Range("A" & DongCuoi_KQ + 1 & ":BM" & DongCuoi_KQ + KhoangCach).Value = _ wb_1.Sheets(1).Range("A" & DongDau_CT & ":BM" & DongCuoi_CT).Value End If
Dim file As Integer
file = Application.WorksheetFunction.CountIf(Range("A6:A" & DongCuoi_KQ), wb_1.Sheets(1).Range("E2").Value)
If (file = 0) Then
'B4: luu
wb_KQ.Sheets("Data_TienLuong").Range("A" & DongCuoi_KQ + 1 & ":BM" & DongCuoi_KQ + KhoangCach).Value = _
wb_1.Sheets(1).Range("A" & DongDau_CT & ":BM" & DongCuoi_CT).Value
End If
Dạ cám ơn Thầy
Dạ em làm theo Thầy hướng dẫn rồi. Nhưng kết quả chỉ lấy dữ liệu một file duy nhất, còn lại mấy file khác không lấy được chỉ mở lên rồi đóng lại. Em nghiên cứu rồi mà không biết bị lỗi gì ạ, nhờ Thấy giúp cho ạ,
Sub ImportData_02()
'Error
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
If .Show = -1 Then
Dim i As Integer
For i = 1 To .SelectedItems.Count
Dim Wbdata As Workbook, Wbsource As Workbook
Set Wbdata = ThisWorkbook
Set Wbsource = Workbooks.Open(.SelectedItems(i))
Dim DD As Long
DD = 8
Dim DCsource As Long
DCsource = Wbsource.Sheets(1).Range("E" & Rows.Count).End(xlUp).Row
Dim KC As Integer
KC = DCsource - DD + 1
Dim DCdata As Long
DCdata = Wbdata.Sheets("Sheet1").Range("E" & Rows.Count).End(xlUp).Row
Dim file As Integer
file = Application.WorksheetFunction.CountIf(Range("A6:A" & DCdata), Wbsource.Sheets(1).Range("E2").Value)
If file = 0 Then
Wbdata.Sheets("Sheet1").Range("A" & DCdata + 1 & ":MB" & DCdata + KC).Value = _
Wbsource.Sheets(1).Range("A" & DD & ":MB" & DCsource).Value
End If
Wbsource.Close SaveChanges:=False
Next i
End If
End With
End Sub
Chào bạn bạn debug xem vòng lặp chạy như thế nào nhé.
Dạ Thầy, em thấy i =1 thì file = 0, còn i = 2,3,4 thì file = 18 không Thầy, nên nó bỏ qua code gán dữ liệu luôn.
Bạn debug xem code chạy thế nào, mỗi lần lặp xem kết quả thế nào mới biết được nguyên nhân khi file =0 thì sẽ thêm
Dạ lấy file đã gán dữ liệu trừ cho 2 mới đúng ạ
file = Application.WorksheetFunction.CountIf(Range("A6:A" & DongCuoi_KQ), wb_1.Sheets(1).Range("E2").Value)
Phần này thực chất là so sánh xem cái trị tháng đã có chưa, nếu có rồi nghĩa là >0 thì sẽ không thêm nữa còn lại vẫn thêm bình thường
Dạ Thầy ! Dạ cứ file nào mở đầu tiên thì i = 1 và file = 0, nhưng những file còn lại đều > 0 và giá trị bằng sồ hàng đã được gán dữ liệu trừ 2. VD ; trong trường hợp mở 4 file, thì file đầu tiên có i = 1, file = 0, còn file 2,3,4 thì i =2,3,4 nhưng file đều = 18 (do lúc đó số hàng dữ liệu được gán vào là 20 -2 = 18), tuong tự mình mở 3 file (2,3,4) thì file số 2 sẽ có i =1 và file = 0, nhưng lúc đó 2 file còn lại là 34 sẽ bằng 25 -2 = 23.
Dạ theo như em nghĩ thì hàm countIf ko đếm theo điều kiện đó Thầy
chào bạn bạn cần debug tại sheets hiện tại với dk là sheets bạn định import là được, bạn thử lại xem gitiho có làm thì kết quả đúng như yêu cầu của bạn
Dạ Thầy, em làm được rồi ạ. Dạ cám ơn Thầy nhiều ạ. Em + 1 vào DCdata nữa ạ.