Em chào thầy ạ, em đang viết code cho BT import dữ liệu tiền lương, rằng nếu ko chọn file thì sẽ hiển thị thông báo "No files selected", nhưng khi làm xong thì bị bỏ qua và hiển thị "Processed". Lỗi sai của e là ở đâu ạ
Sub Import_Data()
Dim filedlg As Variant
Set filedlg = Application.FileDialog(msoFileDialogFilePicker)
If filedlg = False Then
MsgBox "No files selected"
Exit Sub
End If
With filedlg
.Filters.Add "Excel", "*.xls?"
.AllowMultiSelect = True 'Cho phep chon nhieu file cung 1 luc
.Show
'Buoc 2: Xac dinh file nao duoc chon (bien i & vong lap For)
Dim i As Integer
For i = 1 To .SelectedItems.Count
'Buoc 3: Gan bien cho cac Wb
Dim wb_KQ As Workbook
Dim wb_Select As Workbook
Set wb_KQ = ThisWorkbook
Set wb_Select = Workbooks.Open(.SelectedItems(i))
'Buoc 4: Xac dinh DongCuoi_ Wbi, DongDau_Wbi, Khoang cach, DongCuoi_Wb
Dim DongCuoi_wbi As Long
DongCuoi_wbi = wb_Select.Sheets(1).Range("E" & Rows.Count).End(xlUp).Row
'Xac dinh DongDau_Wbi, Khoang cach dong
Dim DongDau_wbi As Long
DongDau_wbi = 8
Dim KhoangCach As Long
KhoangCach = DongCuoi_wbi - DongDau_wbi + 1
'Dong cuoi WB (Noi nhan du lieu)
Dim DongCuoi_wb As Long
DongCuoi_wb = wb_KQ.Sheets("Data_Tienluong").Range("A" & Rows.Count).End(xlUp).Row
'Buoc 5: Dua du lieu tu cac Wb vao
wb_KQ.Sheets("Data_Tienluong").Range("A" & DongCuoi_wb + 1 & ":BM" & DongCuoi_wb + KhoangCach).Value = _
wb_Select.Sheets(1).Range("A" & DongDau_wbi & ":BM" & DongCuoi_wbi).Value
'Buoc 6: Dong cac Wb lai sau khi lay du lieu xong
wb_Select.Close SaveChanges:=False
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Processed"
End With
End Sub
Chào bạn bạn có thể thử như sau nhé
Option Explicit
Sub Import_Data()
Dim filedlg As Variant
Set filedlg = Application.FileDialog(msoFileDialogFilePicker)
With filedlg
.Filters.Add "Excel", "*.xls?"
.AllowMultiSelect = True 'Cho phep chon nhieu file cung 1 luc
.Show
'Buoc 2: Xac dinh file nao duoc chon (bien i & vong lap For)
Dim i As Integer
If (.SelectedItems.Count = 0) Then
MsgBox "khong co file"
Exit Sub
End If
For i = 1 To .SelectedItems.Count
'Buoc 3: Gan bien cho cac Wb
Dim wb_KQ As Workbook
Dim wb_Select As Workbook
Set wb_KQ = ThisWorkbook
Set wb_Select = Workbooks.Open(.SelectedItems(i))
'Buoc 4: Xac dinh DongCuoi_ Wbi, DongDau_Wbi, Khoang cach, DongCuoi_Wb
Dim DongCuoi_wbi As Long
DongCuoi_wbi = wb_Select.Sheets(1).Range("E" & Rows.Count).End(xlUp).Row
'Xac dinh DongDau_Wbi, Khoang cach dong
Dim DongDau_wbi As Long
DongDau_wbi = 8
Dim KhoangCach As Long
KhoangCach = DongCuoi_wbi - DongDau_wbi + 1
'Dong cuoi WB (Noi nhan du lieu)
Dim DongCuoi_wb As Long
DongCuoi_wb = wb_KQ.Sheets("Data_Tienluong").Range("A" & Rows.Count).End(xlUp).Row
'Buoc 5: Dua du lieu tu cac Wb vao
wb_KQ.Sheets("Data_Tienluong").Range("A" & DongCuoi_wb + 1 & ":BM" & DongCuoi_wb + KhoangCach).Value = wb_Select.Sheets(1).Range("A" & DongDau_wbi & ":BM" & DongCuoi_wbi).Value
'Buoc 6: Dong cac Wb lai sau khi lay du lieu xong
wb_Select.Close SaveChanges:=False
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Processed"
End With
End Sub
vâng e cảm ơn thầy.
Trong trường hợp nếu ko muốn import lại các vùng dữ liệu đã có, thì e dùng câu lệnh
ActiveSheet.Range("A5:BM10000").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Header:=xlYes
Có cách khác hay hơn ko ạ thầy
Chào bạn bạn phải có 1 cột để phân biệt dữ liệu đó có tồn tại hay không nhé.
E k hiểu giải đáp của thầy lắm. Tức là trong bài vd Tiền lương ý ạ, khi Import dữ liệu tháng 1,2,3,4. nếu không muốn lặp lại file đã import thì e dùng remove duplicates, có cách nào hay hơn ko ạ
Chào bạn khi bạn import sẽ có tên cách tháng rồi đúng không? bạn sẽ if thêm 1 điều kiện trong vòng for nếu có tháng trong file import = tháng đã có thì không làm gì nữa còn không bạn tiếp tục import nhé.
Vâng e hiểu r ạ, e cám ơn thầy ạ
chúc bạn học tốt cùng gitiho.
Em đã thử test đoạn code này để loại bỏ file trùng
Dim Duplicate As Integer
Duplicate = Application.WorksheetFunction.CountIf(wb_KQ.Sheets("Data_Tienluong").Range("A6 : A" & DongCuoi_wb + 1), wb_Select.Sheets(1).Range("A8").Value)
If Duplicate >= 1 Then
wb_Select.Close SaveChanges:=False
MsgBox "File added"
Exit Sub
Nhưng vấn đề phát sinh là vd nếu em đã import cả 4 file, và sau đó import 1 trong 4 file thì file này sẽ không được thêm nữa.
Nhưng ví dụ khi em chỉ add 3 file 123, lần 2 add file 3 4, thì khong có file nào được thêm vào cả ạ. Thầy chỉ ra lỗi giúp e với ạ
Chào bạn, bạn thử như sau
If Duplicate >= 1 Then
wb_Select.Close SaveChanges:=False
MsgBox "File added"
else
/// code thêm
end if
Em đã thử bỏ Exit sub r nhưng bị lỗi automation error ạ
Chào bạn, bạn có thể đẩy dubug giúp gitiho xem đoạn đó nói sao nhé.
Em sửa lỗi được r ạ
Chúc bạn học tốt cùng gitiho