Sự cố macro Excel: Kết hợp dữ liệu vào tài liệu chính
Này mọi người,
Tôi đang cố gắng tạo một macro trong Excel để kéo tất cả dữ liệu từ nhiều trang tính vào một tài liệu chính. Tất cả các tờ đều có cùng danh mục ở trên cùng. Tôi cần nó để kéo dữ liệu bên dưới và dừng lại khi nó đến các trường không có dữ liệu.
Đây là những gì tôi có cho đến nay nhưng nó dường như không hoạt động :(
Kết hợp phụ() Dim J là số nguyên Khi xảy ra lỗi Tiếp tục tiếp theo Trang tính(1).Chọn Worksheets.Add ' thêm một trang tính ở vị trí đầu tiên Sheets(1).Name = "Kết hợp" ' sao chép tiêu đề Trang tính(2).Kích hoạt Phạm vi ("A1"). Toàn bộRow.Select Selection.Copy Đích:=Sheets(1).Range("A1") ' làm việc thông qua các trang tính Đối với J = 2 To Sheets.Count ' từ trang 2 đến trang cuối cùng Sheets(J).Activate ' làm cho trang tính hoạt động Phạm vi("A1").Chọn Selection.CurrentRegion.Select ' chọn tất cả các ô trong trang tính này ' chọn tất cả các dòng ngoại trừ tiêu đề Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select ' sao chép các ô đã chọn trong trang tính mới ở dòng cuối cùng Selection.Copy Đích:=Trang tính(1).Range("A65536").End(xlUp)(2) Kế tiếp Kết thúc phụ
Trả lời:
Xin chào Kyle,
Hãy thử một cái gì đó như:
'==========>>Tùy chọn rõ ràng
'---------->>
Người kiểm tra phụ công khai()
Dim WB như sổ làm việc
Dim srcSH dưới dạng bảng tính, destSH dưới dạng bảng tính
Dim srcRng dưới dạng phạm vi, đíchRng dưới dạng phạm vi
Dim iRow càng dài, jRow càng dài
Dim bHeaderSao chép dưới dạng Boolean
Const sSheetName As String = " Kết hợp " '<<=== Thay đổi cho phù hợp
Const iFirstDataRow As Long = 2 '<<=== Thay đổi cho phù hợp
Đặt WB = ActiveWorkbook
Khi có lỗi Đi tới XIT
Với ứng dụng
.Cập nhật màn hình = Sai
.EnableEvents = Sai
.DisplayAlerts = Sai
Khi xảy ra lỗi Tiếp tục tiếp theo
ActiveWorkbook.Worksheets(sSheetName).Delete
Khi có lỗi Đi tới XIT
.DisplayAlerts = Đúng
Kết thúc bằng
Đặt destSH = WB.Worksheets.Add(Before:=WB.Sheets(1))
destSH.Name = sSheetName
Đối với mỗi srcSH trong WB.Worksheets
Nếu srcSH.Name <> destSH.Name Thì
Với srcSH
Nếu không phải bHeaderSao chép thì
.Rows(1).Copy Đích:=destSH.Range("A1")
bHeaderCopied = Đúng
Kết thúc nếu
iRow = LastRow(destSH)
jRow = LastRow(srcSH)
Nếu jRow >= iFirstDataRow thì
Đặt srcRng = .Rows(2).Resize(jRow - iFirstDataRow + 1)
Kết thúc nếu
Kết thúc bằng
Đặt destRng = destSH.Range("A" & iRow + 1)
srcRng.Copy
Với đíchRng
.PasteCác giá trị xlPasteĐặc biệt
.PasteCác định dạng xlPasteĐặc biệt
Application.CutCopyMode = Sai
Kết thúc bằng
Kết thúc nếu
srcSH tiếp theo
Với đíchSH
.UsedRange.EntireColumn.AutoFit
.Cells(1).Chọn
Kết thúc bằng
XIT:
Với ứng dụng
.Cập nhật màn hình = Đúng
.EnableEvents = Đúng
Kết thúc bằng
Kết thúc phụ
'---------->>
Chức năng công cộng LastRow(SH As Worksheet, _
Phạm vi Rng tùy chọn)
Nếu Rng Không Là Gì Thì
Đặt Rng = SH.Cells
Kết thúc nếu
Khi xảy ra lỗi Tiếp tục tiếp theo
LastRow = Rng.Find(Cái gì:="*", _
sau:=Rng.Cells(1), _
Nhìn:=xlPart, _
LookIn:=xlCông thức, _
SearchOrder:=xlByRows, _
Hướng tìm kiếm:=xlTrước đó, _
MatchCase:=False).Row
Khi có lỗi Chuyển tới 0
Chức năng kết thúc
'<<==========
===
Trân trọng,
người Norman
Comments
Post a Comment