Tổng hợp dữ liệu cùng cấu trúc trên cùng một sheet ở nhiều file vào file Tổng hợp (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

titanic20072007

Thành viên thường trực
Tham gia
10/7/07
Bài viết
213
Được thích
8
Nghề nghiệp
Giáo viên
Chào các bạn.
Mình có một tình huống cần các bạn giúp đỡ, cụ thể thế này: Mình có nhiều tệp dữ liệu A, B, C, D,... (số lượng không biết trước) có số sheet và cấu trúc dữ liệu giống nhau ở trong cùng một thư mục. Mình cần phải copy và dán dữ liệu từ sheet Data của các tệp A, B, C, D,... vào tệp Tổng hợp. Copy và paste thủ công lâu quá, mình nhờ các bạn viết hộ code giúp làm việc trên. Cảm ơn các bạn. (tệp dữ liệu mẫu mình gửi kèm ở dưới).
 

File đính kèm

Chào các bạn.
Mình có một tình huống cần các bạn giúp đỡ, cụ thể thế này: Mình có nhiều tệp dữ liệu A, B, C, D,... (số lượng không biết trước) có số sheet và cấu trúc dữ liệu giống nhau ở trong cùng một thư mục. Mình cần phải copy và dán dữ liệu từ sheet Data của các tệp A, B, C, D,... vào tệp Tổng hợp. Copy và paste thủ công lâu quá, mình nhờ các bạn viết hộ code giúp làm việc trên. Cảm ơn các bạn. (tệp dữ liệu mẫu mình gửi kèm ở dưới).

Thêm một cách sử dụng ADO kết hợp với Fso nữa cho Bạn tham khảo thêm ...lâu lắm ko ngó tới ADO sợ quên
Viết hơi dài dòng một chút nhưng Office 2003 hay 2010 chạy tốt ....

Mã:
Private Sub ListFileName(strPath As String, sArr())
    Dim ObjFile As Object, x As Long
    With CreateObject("Scripting.FileSystemObject")
       For Each ObjFile In .GetFolder(strPath).Files
          If .GetExtensionName(ObjFile) Like "xls*" Then
             If Left(ObjFile.Name, 2) <> "~$" Then
                If ObjFile.Name <> ThisWorkbook.Name Then
                   x = x + 1
                   ReDim Preserve sArr(1 To x)
                   sArr(x) = ObjFile
                End If
             End If
          End If
       Next
    End With
End Sub


Private Sub GetConnection(ListFiles(), ByVal SheetName$, ByVal DataRange$, ByVal Target As Range)
    Dim Cnn As Object, Rs As Object, Sql$, AppOld$, AppNew$, x As Long
    Dim Data$: Data = SheetName & "$" & DataRange
    For x = 1 To UBound(ListFiles)
        AppOld = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
            & ListFiles(x) & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
        AppNew = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & ListFiles(x) & ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1"";"
        Set Cnn = CreateObject("ADODB.Connection")
        Set Rs = CreateObject("ADODB.Recordset")
        If Application.Version < 12 Then Cnn = AppOld Else Cnn = AppNew
        Cnn.Open
        Sql = "SELECT * From " & "[" & Data & "]"
        Rs.Open Sql, Cnn, 3, 1
        Target.End(3)(2).CopyFromRecordset Rs
        Rs.Close
    Next
    Set Cnn = Nothing: Set Rs = Nothing
End Sub


Public Sub Main()
    Dim Sht As String, Data As String, Path As String, MyFile()
    Path = ThisWorkbook.Path
    Sht = "Data"
    Data = ("A8:AD")
    ActiveSheet.UsedRange.ClearContents
    
    ListFileName Path, MyFile()
    GetConnection MyFile(), Sht, Data, [A65536]
End Sub
 
Upvote 0
Khi chạy báo lỗi ở dòng Cnn.Open sửa thế nào bạn?
 
Upvote 0
Khi chạy báo lỗi ở dòng Cnn.Open sửa thế nào bạn?

Chào bạn,
Mình nghĩ rất có thể là bạn chưa check vào 2 mục:
"Microsoft Scripting Runtime"
"Microsoft ActiveX Data Objects 2.5 Library"

Trong b
ài #20 bạn ấy đã hướng dẫ kỹ cho bạn rồi mà, nếu check 2 mục này thì có thể code sẽ không bị lỗi bạn ạ, còn code có thực hiện theo đúng mong muốn của bạn không thì mình không biết nữa, hihi.
Nếu bạn chưa biết cách check vào 2 mục trên thì bạn làm như sau nhé:

1.
1.jpg

2.
3.jpg

3.
2.jpg

Đây là file mình đã tích trong đó mình đã copy code của bài #20 và bài #21 vào file này rồi đó bạn ah.
Nếu bạn sử dụng file mình up lên thì bạn không cần phải tích thêm gì nữa, còn nếu bạn sử dụng file của bạn thì bạn tích các mục theo hình ảnh trên nhé.

Hic,rất xin lỗi các bạn thực sự là mình không biết 1 chút gì về lập trình cả , nếu có gì không phải mong các bạn chỉ dẫn ạ.. -+*/
Cảm ơn các bạn thật nhiều
 

File đính kèm

Upvote 0


Nếu bạn sử dụng file mình up lên thì bạn không cần phải tích thêm gì nữa, còn nếu bạn sử dụng file của bạn thì bạn tích các mục theo hình ảnh trên nhé.

Tôi nghĩ là nếu mình check vào các mục trong reference thì nó chỉ có tác dụng đối với máy đó thôi chứ???chứ nó đi theo file hả???
cái dzụ này mình không biết!!! (cũng mới tò mò với ADO thôi,....hihihi)
 
Upvote 0
Tôi nghĩ là nếu mình check vào các mục trong reference thì nó chỉ có tác dụng đối với máy đó thôi chứ???chứ nó đi theo file hả???
cái dzụ này mình không biết!!! (cũng mới tò mò với ADO thôi,....hihihi)
Cái đó sẽ theo File. Tuy nhiên, do lo lắng về vụ ở trên mỗi máy tính khác nhau (phiên bản office khác nhau) thì phiên bản thư viện đó khác nhau.
Không tin thì hủy check trong file ở máy tính của mình, sau đó tải file ở bài #23 về mở kiểm tra xem.
Vấn đề này cũng có nói ở đây: Tổng quan về Scripting.Dictionary
Cách 1 sẽ cho tốc độ nhanh hơn cách 2. Tuy nhiên, cách 2 lại thuận tiện hơn cách 1 khi chia sẻ file cho người sử dụng khác, do với máy tính khác nhau sẽ có nhiều người sử dụng các phiên bản khác nhau. Cách 1 chỉ phù hợp khi chính bạn sử dụng, còn cách 2 phù hợp hơn cho việc chia sẻ
 
Upvote 0
Chắc không phải do khai báo thư viện đầu. Mình đã khai báo như trên và thử cả 2 cách vẫn bị lỗi. Nhờ các bạ gỡ giúp.
Untitled3.jpg
Untitled1.png
Untitled2.jpg
Untitled.jpg
 
Upvote 0
Chắc không phải do khai báo thư viện đầu. Mình đã khai báo như trên và thử cả 2 cách vẫn bị lỗi. Nhờ các bạ gỡ giúp.
Do bạn sử dụng Excel 2003 còn code Let'GâuGâu sử dụng Excel 2007 trở lên sử dụng code Kieu Manh có dùng 2 phiên bản nếu không sửa đoạn szConnect = này lại thành

Mã:
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
            & SourceFile & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
 
Upvote 0
Chào các ac e trên diễn đàn,

Mình cũng có nhu cầu tổng hợp số liệu các ngày trong tháng từ các file vào 1 file Tổng hợp, nhưng mình không muốn copy hết mà chỉ muốn copy số liệu ở dòng Tổng cộng dưới cùng ở các file vào File Tổng hợp.

mình cần nữa là ví dụ file chi tiết ngày 09/11/2016 thì khi copy số liệu dòng tổng cộng vào file Tổng hợp thì dữ liệu đó phải nhảy vào dòng ngày Thứ 4 trên file TỔng hợp, Tương tự nếu copy file chi tiết ngày 10/11 thì nhảy vào dòng ngày thứ 5.

File mình cần làm đính kèm email này, rất mon được các anh/ chị trên diễn đàn giúp đỡ ^^
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom