Hỗ trợ gộp nhiều file excel vào 1 file (file có nhiều sheets,chỉ gộp 1 sheet chỉ định)

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Tình nghĩa giang hồ

Thanh sơn bất cải, lục thủy trường lưu
Tham gia
29/9/20
Bài viết
330
Được thích
429
Chào anh chị em có trường hợp này nhờ anh chị hỗ trợ giúp.
Vấn đề của em là em cần tổng hợp nhiều file Excel vào 1 file tổng.
Mỗi file excel của em thì có nhiều sheet, nhưng em chỉ muốn gộp sheet: TONG HOP THEO HĐ
Sheet: TONG HOP THEO HĐ thì lấy dữ liệu bắt đầu từ dòng 6 cho đến hết.

Em có đọc nhiều cách gộp file bằng VBA nhưng đa số thì mỗi file có 1 sheet. Còn trường hợp này của em là mỗi file có nhiều sheet, và cần gộp sheet: TONG HOP THEO HĐ vào file tổng.
Do đây là dữ liệu nhạy cảm nên em không gửi file lên được, em làm bằng file giả định.
(À em quên, tất cả các file đều nằm trong một thư mục nhé anh chị, mà các file đó mỗi lần mở lên hay gặp lỗi update như hình)
Nhờ anh chị hỗ trợ giúp em trường hợp này.
Em cảm ơn anh chị


Code tham khảo gộp nhiều file mỗi file chỉ có 1 sheet
Sub gop_file_excel()
Dim FilesToOpen
Dim wb As Workbook
Dim x As Long, lr As Long

Application.ScreenUpdating = False

FilesToOpen = Application.GetOpenFilename( _
FileFilter:="Microsoft Excel Files (*.xlsx), *.xlsx", MultiSelect:=True, _
Title:="Chon file excel de tron")

If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "khong co file nao duoc chon ca"
Exit Sub
End If

x = 1
While x <= UBound(FilesToOpen)
Set wb = Workbooks.Open(Filename:=FilesToOpen(x))

If x = 1 Then
wb.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets(1).Range("A1")
Else
lr = ThisWorkbook.Sheets(1).UsedRange.Rows.Count
wb.Sheets(1).UsedRange.Offset(1).Copy ThisWorkbook.Sheets(1).Range("A" & lr + 1)
End If
wb.Close False
x = x + 1
Wend
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • 1.jpg
    1.jpg
    99.1 KB · Đọc: 25
  • file dữ liệu mẫu.xlsx
    21.1 KB · Đọc: 20
  • lỗi.jpg
    lỗi.jpg
    79.6 KB · Đọc: 26

File đính kèm

  • Tong_hop_DL.rar
    51.3 KB · Đọc: 52
Upvote 0

File đính kèm

  • Tong_hop_DL.rar
    76.4 KB · Đọc: 137
Upvote 0
Lần sau bạn nên đặt tên sheet bằng tiếng Việt không có dấu
Dạ em sẽ lưu ý vấn đề tiếng Việt này, nhưng cho em hỏi thêm.

Đối với 1 file bình thường thì code tổng hợp dữ liệu vào file Tổng hợp rất tốt anh.

Nhưng do file của mọi người gửi đến em, khi mở lên đều có thông báo như hình em gửi.
Câu thông báo đó là:
This workbook contains links to one or more external sources that could be unsafe
và file sẽ bắt chọn là: Update hay là Don't Update

Hậu quả là: khi em tổng hợp 10 file thì phải bấm "Don't Update" 10 lần, nếu tổng hợp 100 file thì phải bấm "Don't Update" 100 lần.

Vậy thì cho em hỏi, có cách nào tắt cái don't Update này trong Code luôn không anh, thêm vào 1 câu lệnh trong vòng lặp tắt thông báo đó chẳng hạn ?
Em thử Record macro rồi, nhưng do thông báo này chỉ xuất hiện lúc mới mở file lên. Nên em không Record được.
 

File đính kèm

  • lỗi.jpg
    lỗi.jpg
    68 KB · Đọc: 11
Upvote 0
Hậu quả là: khi em tổng hợp 10 file thì phải bấm "Don't Update" 10 lần, nếu tổng hợp 100 file thì phải bấm "Don't Update" 100 lần.

Vậy thì cho em hỏi, có cách nào tắt cái don't Update này trong Code luôn không anh, thêm vào 1 câu lệnh trong vòng lặp tắt thông báo đó chẳng hạn ?
Em thử Record macro rồi, nhưng do thông báo này chỉ xuất hiện lúc mới mở file lên. Nên em không Record được.
Mình cũng chưa tìm được cách nào bằng code, hy vọng có bạn nào đó biết thì chia sẻ.
 
Lần chỉnh sửa cuối:
Upvote 0
Hậu quả là: khi em tổng hợp 10 file thì phải bấm "Don't Update" 10 lần, nếu tổng hợp 100 file thì phải bấm "Don't Update" 100 lần.

Vậy thì cho em hỏi, có cách nào tắt cái don't Update này trong Code luôn không anh, thêm vào 1 câu lệnh trong vòng lặp tắt thông báo đó chẳng hạn ?
Thủ công thì thế này:
Mở file Excel bất kỳ.
Bạn vào File > Options > Advanced > General > bỏ chọn Ask to update automatic links > bấm Ok là sẽ không xuất hiện thông báo khi chạy code nữa.
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ em sẽ lưu ý vấn đề tiếng Việt này, nhưng cho em hỏi thêm.

Đối với 1 file bình thường thì code tổng hợp dữ liệu vào file Tổng hợp rất tốt anh.

Nhưng do file của mọi người gửi đến em, khi mở lên đều có thông báo như hình em gửi.
Câu thông báo đó là:
This workbook contains links to one or more external sources that could be unsafe
và file sẽ bắt chọn là: Update hay là Don't Update

Hậu quả là: khi em tổng hợp 10 file thì phải bấm "Don't Update" 10 lần, nếu tổng hợp 100 file thì phải bấm "Don't Update" 100 lần.

Vậy thì cho em hỏi, có cách nào tắt cái don't Update này trong Code luôn không anh, thêm vào 1 câu lệnh trong vòng lặp tắt thông báo đó chẳng hạn ?
Em thử Record macro rồi, nhưng do thông báo này chỉ xuất hiện lúc mới mở file lên. Nên em không Record được.
OT thấy trong code của bạn @Hoàng Tuấn 868 có dòng:
Mã:
Set openfile = Workbooks.Open(chonFile(i))
Bạn sửa thêm 1 chút xíu thành:
Mã:
Set openfile = Workbooks.Open(chonFile(i),False)
 
Upvote 0
OT thấy trong code của bạn @Hoàng Tuấn 868 có dòng:
Mã:
Set openfile = Workbooks.Open(chonFile(i))
Bạn sửa thêm 1 chút xíu thành:
Mã:
Set openfile = Workbooks.Open(chonFile(i),False)
Tuyệt vời, xin cảm ơn OT nhiều.
Hậu quả là: khi em tổng hợp 10 file thì phải bấm "Don't Update" 10 lần, nếu tổng hợp 100 file thì phải bấm "Don't Update" 100 lần.
Vậy thì cho em hỏi, có cách nào tắt cái don't Update này trong Code luôn không anh, thêm vào 1 câu lệnh trong vòng lặp tắt thông báo đó chẳng hạn ?
Theo hướng dẫn của bạn Hoàng Nhật Phương.
Mình đã chỉnh để không hiện thông báo Update links nữa, bạn kiểm tra lại nhé.
 

File đính kèm

  • File TH du lieu.xlsb
    31.3 KB · Đọc: 85
Upvote 0
Chào anh chị em có trường hợp này nhờ anh chị hỗ trợ giúp.
Vấn đề của em là em cần tổng hợp nhiều file Excel vào 1 file tổng.
Mỗi file excel của em thì có nhiều sheet, nhưng em chỉ muốn gộp sheet: TONG HOP THEO HĐ
Sheet: TONG HOP THEO HĐ thì lấy dữ liệu bắt đầu từ dòng 6 cho đến hết.

Em có đọc nhiều cách gộp file bằng VBA nhưng đa số thì mỗi file có 1 sheet. Còn trường hợp này của em là mỗi file có nhiều sheet, và cần gộp sheet: TONG HOP THEO HĐ vào file tổng.
Do đây là dữ liệu nhạy cảm nên em không gửi file lên được, em làm bằng file giả định.
(À em quên, tất cả các file đều nằm trong một thư mục nhé anh chị, mà các file đó mỗi lần mở lên hay gặp lỗi update như hình)
Nhờ anh chị hỗ trợ giúp em trường hợp này.
Em cảm ơn anh chị


Code tham khảo gộp nhiều file mỗi file chỉ có 1 sheet
Sub gop_file_excel()
Dim FilesToOpen
Dim wb As Workbook
Dim x As Long, lr As Long

Application.ScreenUpdating = False

FilesToOpen = Application.GetOpenFilename( _
FileFilter:="Microsoft Excel Files (*.xlsx), *.xlsx", MultiSelect:=True, _
Title:="Chon file excel de tron")

If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "khong co file nao duoc chon ca"
Exit Sub
End If

x = 1
While x <= UBound(FilesToOpen)
Set wb = Workbooks.Open(Filename:=FilesToOpen(x))

If x = 1 Then
wb.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets(1).Range("A1")
Else
lr = ThisWorkbook.Sheets(1).UsedRange.Rows.Count
wb.Sheets(1).UsedRange.Offset(1).Copy ThisWorkbook.Sheets(1).Range("A" & lr + 1)
End If
wb.Close False
x = x + 1
Wend
Application.ScreenUpdating = True
End Sub
Dùng ADO.1 2 3 4 5
 
Upvote 0
Anh Hoàng Tuấn và các anh chị ơi, cho em hỏi thêm vấn đề này với ạ.
Trong code gộp file thì có một sự cố này.
Code gộp file copy nhưng không phải pase giá trị, dẫn đến có lỗi như hình em gửi.
Trường hợp này em muốn gộp file, nhưng pastes theo kiểu value thì sửa hoặc thêm vào code như thế nào ạ ?
Nhờ anh chị hỗ trợ giúp em với, em cảm ơn anh chị.

Code

Option Explicit

Sub tong_hop_cac_file()
Dim wd As Workbook, wn As Workbook, sd As Worksheet, sn As Worksheet
Dim lrd As Long, lrn As Long
Dim i As Long, j As Long, p As Long
Dim chonFile
Dim openfile
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wd = ThisWorkbook
Set sd = wd.Sheets("TONG HOP THEO HD")

'Mo thuoc tinh File Open
chonFile = Application.GetOpenFilename(Title:="Chon file du lieu can lay", filefilter:="exel file(*.xls*),*.xls*", MultiSelect:=True)
On Error Resume Next
For i = 1 To UBound(chonFile)
On Error GoTo 0
If i = 0 Then Exit Sub

Set openfile = Workbooks.Open(chonFile(i), False)
With openfile
For p = 1 To .Sheets.Count
If Left(.Sheets(p).Name, 15) = "TONG HOP THEO H" Then
Set sn = openfile.Sheets(p)
lrn = sn.Cells(Rows.Count, 1).End(xlUp).Row
lrd = sd.Cells(Rows.Count, 1).End(xlUp).Row
sn.Range("A6:AZ" & lrn).Copy sd.Range("A" & lrd + 1)
End If
Next p
End With
openfile.Close
Next i

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • lỗi công thức.jpg
    lỗi công thức.jpg
    87.4 KB · Đọc: 18
Upvote 0
Không biết cái đồ cổ này còn xài được không :D
 
Upvote 0
Anh Hoàng Tuấn và các anh chị ơi, cho em hỏi thêm vấn đề này với ạ.
Trong code gộp file thì có một sự cố này.
Code gộp file copy nhưng không phải pase giá trị, dẫn đến có lỗi như hình em gửi.
Trường hợp này em muốn gộp file, nhưng pastes theo kiểu value thì sửa hoặc thêm vào code như thế nào ạ ?
Nhờ anh chị hỗ trợ giúp em với, em cảm ơn anh chị.

Code

Option Explicit

Sub tong_hop_cac_file()
Dim wd As Workbook, wn As Workbook, sd As Worksheet, sn As Worksheet
Dim lrd As Long, lrn As Long
Dim i As Long, j As Long, p As Long
Dim chonFile
Dim openfile
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wd = ThisWorkbook
Set sd = wd.Sheets("TONG HOP THEO HD")

'Mo thuoc tinh File Open
chonFile = Application.GetOpenFilename(Title:="Chon file du lieu can lay", filefilter:="exel file(*.xls*),*.xls*", MultiSelect:=True)
On Error Resume Next
For i = 1 To UBound(chonFile)
On Error GoTo 0
If i = 0 Then Exit Sub

Set openfile = Workbooks.Open(chonFile(i), False)
With openfile
For p = 1 To .Sheets.Count
If Left(.Sheets(p).Name, 15) = "TONG HOP THEO H" Then
Set sn = openfile.Sheets(p)
lrn = sn.Cells(Rows.Count, 1).End(xlUp).Row
lrd = sd.Cells(Rows.Count, 1).End(xlUp).Row
sn.Range("A6:AZ" & lrn).Copy sd.Range("A" & lrd + 1)
End If
Next p
End With
openfile.Close
Next i

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Code gộp file copy nhưng không phải pase giá trị, dẫn đến có lỗi như hình em gửi.
Trường hợp này em muốn gộp file, nhưng pastes theo kiểu value thì sửa hoặc thêm vào code như thế nào ạ ?
Nhờ anh chị hỗ trợ giúp em với, em cảm ơn anh chị.

Code

Option Explicit

Sub tong_hop_cac_file()
Dim wd As Workbook, wn As Workbook, sd As Worksheet, sn As Worksheet
Dim lrd As Long, lrn As Long
Dim i As Long, j As Long, p As Long
Dim chonFile
Dim openfile
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set wd = ThisWorkbook
Set sd = wd.Sheets("TONG HOP THEO HD")

'Mo thuoc tinh File Open
chonFile = Application.GetOpenFilename(Title:="Chon file du lieu can lay", filefilter:="exel file(*.xls*),*.xls*", MultiSelect:=True)
On Error Resume Next
For i = 1 To UBound(chonFile)
On Error GoTo 0
If i = 0 Then Exit Sub

Set openfile = Workbooks.Open(chonFile(i), False)
With openfile
For p = 1 To .Sheets.Count
If Left(.Sheets(p).Name, 15) = "TONG HOP THEO H" Then
Set sn = openfile.Sheets(p)
lrn = sn.Cells(Rows.Count, 1).End(xlUp).Row
lrd = sd.Cells(Rows.Count, 1).End(xlUp).Row
sn.Range("A6:AZ" & lrn).Copy sd.Range("A" & lrd + 1)
End If
Next p
End With
openfile.Close
Next i

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Không có file cụ thể mà chỉ nhìn ảnh thì chịu rồi.
 
Upvote 0
Không biết cái đồ cổ này còn xài được không :D
Em cảm ơn anh Thắng nhé.
Bài đã được tự động gộp:

Không có file cụ thể mà chỉ nhìn ảnh thì chịu rồi.
Dạ để em tìm cách khác, chứ mấy file này mà em gửi lên đây, chắc em bị đuổi việc luôn á....
Em cảm ơn anh.
 
Upvote 0
Liên quan tới lấy dữ liệu file khác làm gì thì làm nhưng tôi khuyên từng bước bỏ Workbooks.Open đi vì file lớn sẽ rất chậm chạp
nếu biết ADODB thì nên dùng nó là tốt nhất ........... mọi cái đó trên này code với két phơi bày ra hết rồi còn ta copy và chế biến chút là xong


gợi ý chút vậy ... Còn làm biếng lắm
 
Upvote 0
Nhờ anh chị thêm giúp đoạn code để udpate tất cả các sheet chứ không riêng sheet Tổng Hợp. Có nghĩa là Trong file tổng hợp sẽ update tất các các sheet khác nữa có trong các file khác. (Tổng hợp nhiều sheet của file)
Bài đã được tự động gộp:

Nhờ anh chị thêm giúp đoạn code để udpate tất cả các sheet chứ không riêng sheet Tổng Hợp. Có nghĩa là Trong file tổng hợp sẽ update tất các các sheet khác nữa có trong các file khác. (Tổng hợp nhiều sheet của file)
 

File đính kèm

  • File TH du lieu.xlsb
    30.5 KB · Đọc: 8
  • file dữ liệu mẫu_01.xlsx
    20.5 KB · Đọc: 7
  • file dữ liệu mẫu_02.xlsx
    20.5 KB · Đọc: 4
  • file dữ liệu mẫu_03.xlsx
    20.5 KB · Đọc: 4
Upvote 0
Web KT

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

Back
Top Bottom