Hà Vân
Hà Vân PRO
Thảo luận 3 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 76 lượt xem

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

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


Thảo luận 3 câu trả lời
Lượt xem 76 lượt xem
Vỗ tay vỗ tay
Hà Vân 22:05 - May 02, 2022

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.

Vỗ tay vỗ tay
Hà Vân 23:05 - May 04, 2022

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

Vỗ tay vỗ tay
Hà Vân 11:05 - May 05, 2022

Chào bạn bạn xem lại code mẫu nhé

https://drive.google.com/file/d/1ZfKQ...

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