Chào các thành viên giải pháp excel, tôi mới tập tành sử dụng VBA, chưa rành nên có 1 vấn đề cần được giúp đỡ. Để sử dụng cho công việc, tôi áp dụng macro " nối nhiều file thành 1 file", và thấy chạy tốt. Để cho tiện, tôi tạo thành adin đưa lên ribbon. Nhưng khi chạy thì báo lỗi như sau: Method 'Move' of object 'Sheets' failed. Tôi không biết lý do tại sao, rất mong mọi người giúp đỡ
Chào các thành viên giải pháp excel, tôi mới tập tành sử dụng VBA, chưa rành nên có 1 vấn đề cần được giúp đỡ. Để sử dụng cho công việc, tôi áp dụng macro " nối nhiều file thành 1 file", và thấy chạy tốt. Để cho tiện, tôi tạo thành adin đưa lên ribbon. Nhưng khi chạy thì báo lỗi như sau: Method 'Move' of object 'Sheets' failed. Tôi không biết lý do tại sao, rất mong mọi người giúp đỡ
Chào vanaccex, mình gửi adin kèm theo. mình tạo macro này theo như hướng dẫn thì chạy được, nhưng khi chuyển thành adin đưa lên ribbon thì báo lỗi. Bạn xem giúp mình nhé
Bài đã được tự động gộp:
Và có vấn đề này nhờ vanaccex giúp đỡ, do mình không rành VBA. Vấn đề thế này, mình nhận file "cham.xls" từ 1 người khác chuyển sang, mình phải xử lý lại dữ liệu trong file "cham.xls" như công thức trong file. Sau đó mình phải dùng hàm vlookup chuyển dữ liệu sang file "Bangdiem_260819.xlsx". Mình muốn tạo 1 đoạn code để trên file "Bangdiem.xlsx" khi chạy nó điều chỉnh dữ liệu trên file cham.xls và vlookup sang file "Bangdiem.xlsx". Nhờ vanaccex giúp mình nhé. Cám ơn bạn
Chào vanaccex, mình gửi adin kèm theo. mình tạo macro này theo như hướng dẫn thì chạy được, nhưng khi chuyển thành adin đưa lên ribbon thì báo lỗi. Bạn xem giúp mình nhé
Bài đã được tự động gộp:
Và có vấn đề này nhờ vanaccex giúp đỡ, do mình không rành VBA. Vấn đề thế này, mình nhận file "cham.xls" từ 1 người khác chuyển sang, mình phải xử lý lại dữ liệu trong file "cham.xls" như công thức trong file. Sau đó mình phải dùng hàm vlookup chuyển dữ liệu sang file "Bangdiem_260819.xlsx". Mình muốn tạo 1 đoạn code để trên file "Bangdiem.xlsx" khi chạy nó điều chỉnh dữ liệu trên file cham.xls và vlookup sang file "Bangdiem.xlsx". Nhờ vanaccex giúp mình nhé. Cám ơn bạn
Sub CombineWorkbooks()
Dim FilesToOpen
Dim x As Integer
On Error GoTo ErrHandler
Application.ScreenUpdating = False
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="Microsoft Excel Files (*.xlx), *.xlsx", MultiSelect:=True, Title:="Files to Merge")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "No Files were selected"
GoTo ExitHandler
End If
Dim TargetBook, WB As Workbook
Dim Ws As Worksheet
Set TargetBook = ActiveWorkbook
x = 1
While x <= UBound(FilesToOpen)
Set WB = Workbooks.Open(Filename:=FilesToOpen(x), UpdateLinks:=False)
For Each Ws In Workbooks(WB.Name).Sheets
Ws.Copy after:=TargetBook.Sheets(ThisWorkbook.Sheets.Count)
Next
WB.Close savechanges:=False
x = x + 1
Wend
ExitHandler:
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
Em muốn chạy code mà không muốn tạo file mới có được hay không? Có thể chạy code ở tình huống bất kỳ có mở file mới hay không mở đều được. Vậy code sửa lại thế nào ạ?
Sub CombineWorkbooks()
Dim FilesToOpen
Dim x As Integer
On Error GoTo ErrHandler
Application.ScreenUpdating = False
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="Microsoft Excel Files (*.xlx), *.xlsx", MultiSelect:=True, Title:="Files to Merge")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "No Files were selected"
GoTo ExitHandler
End If
Dim TargetBook, WB As Workbook
Dim Ws As Worksheet
Set TargetBook = ActiveWorkbook
x = 1
While x <= UBound(FilesToOpen)
Set WB = Workbooks.Open(Filename:=FilesToOpen(x), UpdateLinks:=False)
For Each Ws In Workbooks(WB.Name).Sheets
Ws.Copy after:=TargetBook.Sheets(ThisWorkbook.Sheets.Count)
Next
WB.Close savechanges:=False
x = x + 1
Wend
ExitHandler:
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
Ws.Copy after:=TargetBook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook chính là cái Add-ins đấy
=> Ws.Copy after:=TargetBook.Sheets(TargetBook .Sheets.Count)
------------------------------------------------------
và thường thì người ta để toàn file Excel chung nên không cần phân biệt xlsx hay gì gì chi cho mệt:
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="All Files (*.*), *.*", MultiSelect:=True, Title:="Select Files")
------------------------------------------------------
và bị dư ở chổ này này:
For Each Ws In Workbooks(WB.Name).Sheets
=> For Each Ws In WB.Worksheets
------------------------------------------------------
và khai báo sẽ dể bị hiểu nhầm ở chổ này này:
Dim TargetBook, WB As Workbook
=> Dim TargetBook As Workbook, WB As Workbook
Hoặc Dim TargetBook, WB
Hoặc Dim TargetBook As Object, WB As Object
Ws.Copy after:=TargetBook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook chính là cái Add-ins đấy
=> Ws.Copy after:=TargetBook.Sheets(TargetBook .Sheets.Count)
------------------------------------------------------
và thường thì người ta để toàn file Excel chung nên không cần phân biệt xlsx hay gì gì chi cho mệt:
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="All Files (*.*), *.*", MultiSelect:=True, Title:="Select Files")
------------------------------------------------------
và bị dư ở chổ này này:
For Each Ws In Workbooks(WB.Name).Sheets
=> For Each Ws In WB.Worksheets
------------------------------------------------------
và khai báo sẽ dể bị hiểu nhầm ở chổ này này:
Dim TargetBook, WB As Workbook
=> Dim TargetBook As Workbook, WB As Workbook
Hoặc Dim TargetBook, WB
Hoặc Dim TargetBook As Object, WB As Object
Sub CombineWorkbooks()
Dim FilesToOpen
Dim x As Integer
On Error GoTo ErrHandler
Application.ScreenUpdating = False
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="Microsoft Excel Files (*.xlx), *.xlsx", MultiSelect:=True, Title:="Files to Merge")
If TypeName(FilesToOpen) = "Boolean" Then
MsgBox "No Files were selected"
GoTo ExitHandler
End If
Dim TargetBook, WB As Workbook
Dim Ws As Worksheet
Set TargetBook = ActiveWorkbook
x = 1
While x <= UBound(FilesToOpen)
Set WB = Workbooks.Open(Filename:=FilesToOpen(x), UpdateLinks:=False)
For Each Ws In Workbooks(WB.Name).Sheets
Ws.Copy after:=TargetBook.Sheets(ThisWorkbook.Sheets.Count)
Next
WB.Close savechanges:=False
x = x + 1
Wend
ExitHandler:
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
Nên dùng For x = 1 to UBound (hoặc For Each) thay cho While.
Sao không copy tất cả các sheet một lần mà copy từng sheet? Copy lần lượt từng sheet sẽ làm hỏng các công thức có tham chiếu đến sheet khác.
Nên dùng For x = 1 to UBound (hoặc For Each) thay cho While.
Sao không copy tất cả các sheet một lần mà copy từng sheet? Copy lần lượt từng sheet sẽ làm hỏng các công thức có tham chiếu đến sheet khác.