Tổng hợp dữ liệu từ nhiều file o

Liên hệ QC

saobekhonglac

Thành viên mới
Tham gia
1/11/08
Bài viết
1,565
Được thích
1,454
Giới tính
Nam
Chào anh/chị.

Em có nhiều file excel (mỗi file có nhiều sheet). Em muốn làm 1 file tổng hợp sau cho chỉ tổng hợp dữ liệu của các sheet “TH” trong các file 1.xls, 2.xls (những sheet còn lại không tổng hợp) sẽ được tổng hợp vào sheet “TH” trong file Tong hop.xls. Nhờ anh/chị hướng dẫn code VBA giúp.

Cám ơn anh/chị.
 

File đính kèm

Mã:
Public Sub beThichMuaCot()
Dim cn As Object, rs As Object, i As Byte, mRow As Long
Set cn = CreateObject("adodb.connection")
    'Provider=Microsoft.ACE.OLEDB.12.0
    'microsoft.jet.oledb.4.0
    For i = 1 To 2 Step 1
        cn.Open ("provider=microsoft.jet.oledb.4.0; data source=" & _
        ThisWorkbook.Path & "\" & i & ".xls" & _
                 ";mode=read;extended properties=""Excel 8.0;hdr=no"";")
        Set rs = cn.Execute("select * from [TH$A:E] where f1 is not null")
        mRow = Sheet1.[A50000].End(xlUp).Row + 1
        If Not rs.EOF Then Worksheets("TH").Range("A" & mRow).CopyFromRecordset rs
        rs.Close
        cn.Close
    Next
End Sub
 
Tên sub "beThichMuaCot" đặt hay phết.
 
Cám ơn anh.

Em chạy được rồi, nếu trường hợp em có nhiều file và mỗi file có tên khách nhau chứ không phải là 1,2,3,..., (mà là A, H, D,...) thì nó không hiểu. Anh có thể sữa giúp em khi mình run nó cho mình chọn file cần tổng hợp không anh.

Cám ơn anh.

Mã:
Public Sub beThichMuaCot()
Dim cn As Object, rs As Object, i As Byte, mRow As Long
Set cn = CreateObject("adodb.connection")
    'Provider=Microsoft.ACE.OLEDB.12.0
    'microsoft.jet.oledb.4.0
    For i = 1 To 2 Step 1
        cn.Open ("provider=microsoft.jet.oledb.4.0; data source=" & _
        ThisWorkbook.Path & "\" & i & ".xls" & _
                 ";mode=read;extended properties=""Excel 8.0;hdr=no"";")
        Set rs = cn.Execute("select * from [TH$A:E] where f1 is not null")
        mRow = Sheet1.[A50000].End(xlUp).Row + 1
        If Not rs.EOF Then Worksheets("TH").Range("A" & mRow).CopyFromRecordset rs
        rs.Close
        cn.Close
    Next
End Sub
 
Sao máy tôi chạy code ADO trên không được vậy nhỉ? liệu có phải tick thêm gì trong References không nhỉ?
mình biết bạn sẽ hỏi câu đó mà . vì máy mình cũng đâu có chạy được code đó
trong phần chú thích lấy cái thằng
Microsoft.ACE.OLEDB.12.0
thế vào chỗ
microsoft.jet.oledb.4.0
mới chạy được
máy chúng ta là hệ 64 bit lại chơi cái off 2013 nữa nên nó không có JET . chỉ có ACE thôi
 
Cám ơn anh.

Em chạy được rồi, nếu trường hợp em có nhiều file và mỗi file có tên khách nhau chứ không phải là 1,2,3,..., (mà là A, H, D,...) thì nó không hiểu. Anh có thể sữa giúp em khi mình run nó cho mình chọn file cần tổng hợp không anh.

Cám ơn anh.

đây là làm theo kiểu chọn File
Mã:
Public Sub beThichMuaCot()
Dim cn As Object, rs As Object, i As Byte, mRow As Lon
Set cn = CreateObject("adodb.connection")
    'Provider=Microsoft.ACE.OLEDB.12.0
    'microsoft.jet.oledb.4.0
    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = ThisWorkbook.Path
        .Filters.Clear
        .Filters.Add "hello", "*.xls*"
        .AllowMultiSelect = True
        .Show
        For i = 1 To .SelectedItems.Count Step 1
            cn.Open ("provider=microsoft.jet.oledb.4.0; data source=" & _
            .SelectedItems(i) & _
                     ";mode=read;extended properties=""Excel 8.0;hdr=no"";")
            Set rs = cn.Execute("select * from [TH$A:E] where f1 is not null")
            mRow = Sheet1.[A50000].End(xlUp).Row + 1
            If Not rs.EOF Then Worksheets("TH").Range("A" & mRow).CopyFromRecordset rs
            rs.Close
            cn.Close
        Next
    End With
End Sub
 
Em làm đươc rồi. cám ơn anh. Nếu trong file em muốn tổng hợp thêm những file có đuôi là xlsx thì sữa code thành như thế nào vậy anh.

đây là làm theo kiểu chọn File
Mã:
Public Sub beThichMuaCot()
Dim cn As Object, rs As Object, i As Byte, mRow As Lon
Set cn = CreateObject("adodb.connection")
    'Provider=Microsoft.ACE.OLEDB.12.0
    'microsoft.jet.oledb.4.0
    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = ThisWorkbook.Path
        .Filters.Clear
        .Filters.Add "hello", "*.xls*"
        .AllowMultiSelect = True
        .Show
        For i = 1 To .SelectedItems.Count Step 1
            cn.Open ("provider=microsoft.jet.oledb.4.0; data source=" & _
            .SelectedItems(i) & _
                     ";mode=read;extended properties=""Excel 8.0;hdr=no"";")
            Set rs = cn.Execute("select * from [TH$A:E] where f1 is not null")
            mRow = Sheet1.[A50000].End(xlUp).Row + 1
            If Not rs.EOF Then Worksheets("TH").Range("A" & mRow).CopyFromRecordset rs
            rs.Close
            cn.Close
        Next
    End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
máy bạn có đọc được xlsx thì chơi vầy luôn
Mã:
Cn.Open ("provider=Microsoft.ACE.OLEDB.12.0;data source=" & _
        .SelectedItems(i) & ";mode=Read;extended properties=""Excel 12.0;hdr=no"";")
 
Cám ơn anh nhiều. Nếu trường hợp em cần tổng hợp dữ liệu ở nhiều file khách nhau, nhưng mỗi file chỉ có 1 sheet (tên các sheet trong mỗi file không giống nhau, vd T01, T02, T03, ....) thì code như thế nào vậy anh (code vẫn chọn file được nha anh)

Cám ơn anh.

máy bạn có đọc được xlsx thì chơi vầy luôn
Mã:
Cn.Open ("provider=Microsoft.ACE.OLEDB.12.0;data source=" & _
        .SelectedItems(i) & ";mode=Read;extended properties=""Excel 12.0;hdr=no"";")
 
Cám ơn anh nhiều. Nếu trường hợp em cần tổng hợp dữ liệu ở nhiều file khách nhau, nhưng mỗi file chỉ có 1 sheet (tên các sheet trong mỗi file không giống nhau, vd T01, T02, T03, ....) thì code như thế nào vậy anh (code vẫn chọn file được nha anh)

Cám ơn anh.

select * from [A:E] .......
 
Web KT

Bài viết mới nhất

Back
Top Bottom