Tách Sheet thành từng File, lấy tên Sheet làm tên file. (1 người xem)

Liên hệ QC

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

cuonghoa176

Hỏi nhiều
Tham gia
31/1/11
Bài viết
169
Được thích
23
Giới tính
Nam
Nghề nghiệp
Giáo viên THCS
Xin các cao thủ GPE code:
Yêu cầu:
- Tách hoặc copy Sheet ra từng file, lấy tên Sheet làm tên file.
- Giữ nguyên mọi thuộc tính của Sheet nguồn, kể cả công thức, name, Pass...
 

File đính kèm

Lần chỉnh sửa cuối:
Xin các cao thủ GPE code:
Yêu cầu:
- Tách hoặc copy Sheet ra từng file, lấy tên Sheet làm tên file.
- Giữ nguyên mọi thuộc tính của Sheet nguồn, kể cả công thức, name, Pass...
Cho code vào 1 module và chạy thử xem sao.
Các file mới sẽ lưu trong cùng thư mục với file gốc
PHP:
Sub tachsheet()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim sh As Worksheet
For Each sh In Worksheets
    sh.Copy
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & sh.Name, 51
    ActiveWorkbook.Close
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
 
Upvote 0
Cho code vào 1 module và chạy thử xem sao.
Các file mới sẽ lưu trong cùng thư mục với file gốc
PHP:
Sub tachsheet()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim sh As Worksheet
For Each sh In Worksheets
    sh.Copy
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & sh.Name, 51
    ActiveWorkbook.Close
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Cám ơn anh nhiều.
Nếu file khoảng 50 sheet trở lên thì chạy hơn chậm anh ơi, có cách nào set cho code chạy nhanh hơn nữa không anh.
 
Upvote 0
Cám ơn anh nhiều.
Nếu file khoảng 50 sheet trở lên thì chạy hơn chậm anh ơi, có cách nào set cho code chạy nhanh hơn nữa không anh.
Chắc là không thể nhanh hơn được nữa đâu vì khi code làm việc trực tiếp trên sheet thì tốc độ sẽ như thế. Nhưng so với thủ công thì cũng nhanh lắm rồi mà. Cũng có thể có cách khác nhanh hơn mà mình chưa biết. Thử đợi các anh chị khác tham gia xem sao.
 
Upvote 0
Mình không có kinh nghiệm về xử lý file nhưng theo mình sau mỗi lần tách sheet mình xóa luôn sheet đó (tất nhiên bạn cần sao lưu file gốc), dữ liệu sẽ nhẹ dần.
 
Upvote 0
Tác giả chưa nói yêu cầu tách file là gì;

Tuy nhiên theo mình thì nên gộp các trang tính này thành 1 trang thì có lí hơn!
 
Upvote 0
Ra rồi lại vào..là chuyện thường phải làm thôi mà. Ở đây là tách ra để cho nhiều người làm.họ làm xong mình gộp lại..rất hiệu quả.đặc biệt khi tách ra không bị mất công thức và mọi định dạng khác..exel thật tuyệt vời! E cảm ơn bác quanghai nhiều..!
 
Upvote 0
Nhân tiện Bac Hai giúp e tí chút, Khi tách Sheet "SO DIEM":
- Tên Sheet mới sinh ra sẽ theo ô E9 tại sheet "Menu";
- Công thức trong khoảng AE6:AG50 không mất.
E cảm ơn Bác!

code:
Macro4 Macro'

'
Sheets("SO DIEM").Select
Sheets("SO DIEM").Copy After:=Sheets(3)
Cells.Select
Range("AH4").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("E1").Select
Sheets("Menu").Select
Range("E9").Select
End Sub
 
Upvote 0
Nhân tiện Bac Hai giúp e tí chút, Khi tách Sheet "SO DIEM":
- Tên Sheet mới sinh ra sẽ theo ô E9 tại sheet "Menu";
- Công thức trong khoảng AE6:AG50 không mất.
E cảm ơn Bác!

code:
Macro4 Macro'

'
Sheets("SO DIEM").Select
Sheets("SO DIEM").Copy After:=Sheets(3)
Cells.Select
Range("AH4").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("E1").Select
Sheets("Menu").Select
Range("E9").Select
End Sub
Thật sự không hiểu rõ ý của bạn. Viết tạm thế này
PHP:
Sub copy_sheet()
Sheets("SO DIEM").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Sheets("Menu").[E9]
End Sub
 
Upvote 0
Vậy bác ơi:
- Chọn Môn; lớp rồi tách thành 1 sheet mới. Như trên sẽ thành sheet "SO DIEM (2),(3)...
Giờ sửa sao cho mỗi khi tách sheet ra, tên sheet sẽ theo cells E7 (không fải E9). Kết quả, khi copy sheet mới sẽ là "Văn", "Toán", "Lý"...
File:
https://drive.google.com/file/d/0ByrRyDPlHTh9YW1qeVlCZ2tzQmc/edit?usp=sharing
 
Upvote 0
Vậy bác ơi:
- Chọn Môn; lớp rồi tách thành 1 sheet mới. Như trên sẽ thành sheet "SO DIEM (2),(3)...
Giờ sửa sao cho mỗi khi tách sheet ra, tên sheet sẽ theo cells E7 (không fải E9). Kết quả, khi copy sheet mới sẽ là "Văn", "Toán", "Lý"...
File:
https://drive.google.com/file/d/0ByrRyDPlHTh9YW1qeVlCZ2tzQmc/edit?usp=sharing
Trong đoạn code của anh QuangHai, bạn sửa [E9] thành [E7]
Sub copy_sheet()
Sheets("SO DIEM").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Sheets("Menu").[E9]
End Sub
Sub copy_sheet()
Sheets("SO DIEM").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Sheets("Menu").[E7]
End Sub
 
Upvote 0

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

Back
Top Bottom