Chào các anh, chị trên diễn đàn
Em đang thực hiện code vba để mở file, duyệt qua các sheets trong file rồi copy vùng dữ liệu và gán vào file tổng hợp nhưng kết quả chưa đúng như mong muốn, cụ thể:
- Nó copy sheets("B") trước rồi mới copy sheets"A" (theo code thì duyệt qua Sheets("A") trước rồi mới đến Sheets("B"));
- Kết quả cuối cùng: số dòng copy gán vào file Tổng hợp có cả dữ liệu của Sheets("B") và Sheets("A") không bằng số dòng sheets("A") + Sheets("B"), mà chỉ bằng số dòng của Sheets("A").
Em nhờ anh, chị xem và sửa giúp em với ạ. Em cảm ơn.
Sub import_sanluong()
Dim wb As Variant
Dim sh As Worksheet
Dim sh1 As Worksheet
Dim dataw As Workbook
Dim lr As Integer
Set sh = Sheet1
Application.ScreenUpdating = False
wb = Application.GetOpenFilename("excel file(*xls.*),*.xls")
If wb = False Then Exit Sub
Set dataw = Workbooks.Open(wb)
For Each sh1 In dataw.Worksheets
lr = sh1.Cells(Rows.Count, 2).End(3).Row
If sh1.Name = "A" Then
sh1.Range("O2:O" & lr).Copy
sh.Range("B4", sh.Range("B10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("N2:N" & lr).Copy
sh.Range("C4", sh.Range("C10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("M2:M" & lr).Copy
sh.Range("D4", sh.Range("D10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("B2:B" & lr).Copy
sh.Range("E4", sh.Range("E10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("C2:C" & lr).Copy
sh.Range("F4", sh.Range("F10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("G2:G" & lr).Copy
sh.Range("G4", sh.Range("G10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("Q2:Q" & lr).Copy
sh.Range("I4", sh.Range("I10000").End(xlUp)).Offset(1, 0).PasteSpecial
End If
If sh1.Name = "B" Then
sh1.Range("A2:A" & lr).Copy
sh.Range("B4", sh.Range("B10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("B2:B" & lr).Copy
sh.Range("C4", sh.Range("C10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("C2:C" & lr).Copy
sh.Range("D4", sh.Range("D10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("D2" & lr).Copy
sh.Range("E4", sh.Range("E10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("E2:E" & lr).Copy
sh.Range("F4", sh.Range("F10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("F2:F" & lr).Copy
sh.Range("G4", sh.Range("G10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("G2:G" & lr).Copy
sh.Range("I4", sh.Range("I10000").End(xlUp)).Offset(1, 0).PasteSpecial
End If
Next sh1
Application.ScreenUpdating = True
Workbooks.Open(wb).Close False
End Sub
Em đang thực hiện code vba để mở file, duyệt qua các sheets trong file rồi copy vùng dữ liệu và gán vào file tổng hợp nhưng kết quả chưa đúng như mong muốn, cụ thể:
- Nó copy sheets("B") trước rồi mới copy sheets"A" (theo code thì duyệt qua Sheets("A") trước rồi mới đến Sheets("B"));
- Kết quả cuối cùng: số dòng copy gán vào file Tổng hợp có cả dữ liệu của Sheets("B") và Sheets("A") không bằng số dòng sheets("A") + Sheets("B"), mà chỉ bằng số dòng của Sheets("A").
Em nhờ anh, chị xem và sửa giúp em với ạ. Em cảm ơn.
Sub import_sanluong()
Dim wb As Variant
Dim sh As Worksheet
Dim sh1 As Worksheet
Dim dataw As Workbook
Dim lr As Integer
Set sh = Sheet1
Application.ScreenUpdating = False
wb = Application.GetOpenFilename("excel file(*xls.*),*.xls")
If wb = False Then Exit Sub
Set dataw = Workbooks.Open(wb)
For Each sh1 In dataw.Worksheets
lr = sh1.Cells(Rows.Count, 2).End(3).Row
If sh1.Name = "A" Then
sh1.Range("O2:O" & lr).Copy
sh.Range("B4", sh.Range("B10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("N2:N" & lr).Copy
sh.Range("C4", sh.Range("C10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("M2:M" & lr).Copy
sh.Range("D4", sh.Range("D10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("B2:B" & lr).Copy
sh.Range("E4", sh.Range("E10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("C2:C" & lr).Copy
sh.Range("F4", sh.Range("F10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("G2:G" & lr).Copy
sh.Range("G4", sh.Range("G10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("Q2:Q" & lr).Copy
sh.Range("I4", sh.Range("I10000").End(xlUp)).Offset(1, 0).PasteSpecial
End If
If sh1.Name = "B" Then
sh1.Range("A2:A" & lr).Copy
sh.Range("B4", sh.Range("B10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("B2:B" & lr).Copy
sh.Range("C4", sh.Range("C10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("C2:C" & lr).Copy
sh.Range("D4", sh.Range("D10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("D2" & lr).Copy
sh.Range("E4", sh.Range("E10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("E2:E" & lr).Copy
sh.Range("F4", sh.Range("F10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("F2:F" & lr).Copy
sh.Range("G4", sh.Range("G10000").End(xlUp)).Offset(1, 0).PasteSpecial
sh1.Range("G2:G" & lr).Copy
sh.Range("I4", sh.Range("I10000").End(xlUp)).Offset(1, 0).PasteSpecial
End If
Next sh1
Application.ScreenUpdating = True
Workbooks.Open(wb).Close False
End Sub