Nguyen Hoai Thu
Nguyen Hoai Thu
Thảo luận 15 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 237 lượt xem

em đang viết code cho BT import dữ liệu tiền lương rằng nếu ko chọn file thì

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

Thảo luận 15 câu trả lời
Lượt xem 237 lượt xem
Vỗ tay vỗ tay
Nguyen Hoai Thu 10:07 - Jul 05, 2021

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ỗ tay vỗ tay
Nguyen Hoai Thu 10:07 - Jul 05, 2021

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

Vỗ tay vỗ tay
Nguyen Hoai Thu 11:07 - Jul 05, 2021

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é.

Vỗ tay vỗ tay
Nguyen Hoai Thu 11:07 - Jul 05, 2021

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 ạ

Vỗ tay vỗ tay
Nguyen Hoai Thu 11:07 - Jul 05, 2021

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ỗ tay vỗ tay
Nguyen Hoai Thu 11:07 - Jul 05, 2021

Vâng e hiểu r ạ, e cám ơn thầy ạ

Vỗ tay vỗ tay
Nguyen Hoai Thu 13:07 - Jul 05, 2021

chúc bạn học tốt cùng gitiho.

Vỗ tay vỗ tay
Nguyen Hoai Thu 16:07 - Jul 05, 2021

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 ạ

Vỗ tay vỗ tay
Nguyen Hoai Thu 16:07 - Jul 05, 2021

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
Vỗ tay vỗ tay
Nguyen Hoai Thu 16:07 - Jul 05, 2021

Em đã thử bỏ Exit sub r nhưng bị lỗi automation error ạ

Vỗ tay vỗ tay
Nguyen Hoai Thu 17:07 - Jul 05, 2021

Chào bạn, bạn có thể đẩy dubug giúp gitiho xem đoạn đó nói sao nhé.

Vỗ tay vỗ tay
Nguyen Hoai Thu 18:07 - Jul 05, 2021


Vỗ tay vỗ tay
Nguyen Hoai Thu 18:07 - Jul 05, 2021
Đây là khi e test thử lần 1 add  file 123, lần 2 add file 3 4, thì vẫn không có file nào được thêm vào cả ạ, xong có hiển thị lỗi như này
Vỗ tay vỗ tay
Nguyen Hoai Thu 23:07 - Jul 05, 2021

Em  sửa lỗi được r ạ

Vỗ tay vỗ tay
Nguyen Hoai Thu 08:07 - Jul 06, 2021

Chúc bạn học tốt cùng gitiho

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