Làm cách nào để một người chia tách một tập tin Excel (.xlsx) có chứa nhiều trang tính thành một trang riêng biệt [n] .xlsx?


17

Tôi nghĩ rằng tiêu đề nói lên tất cả cho câu hỏi này nhưng để giải thích thêm một chút:

Tôi có một tệp .xlsx chứa vài chục tờ. Tôi muốn xuất tất cả các trang tính đó dưới dạng các tệp .xlsx riêng biệt. Đặt tên tự động của chúng là không cần thiết. Excel có chức năng xuất các trang tính sang một tệp riêng không?

Câu trả lời:


17

Nó không phải là một tính năng tích hợp.

Tuy nhiên, nếu bạn chạy mã này, nó sẽ thực hiện công việc.

Sub SaveSheets()
    Dim strPath As String
    Dim ws As Worksheet

    Application.ScreenUpdating = False

    strPath = ActiveWorkbook.Path & "\"
    For Each ws In ThisWorkbook.Sheets
        ws.Copy
        'Use this line if you want to break any links:
        BreakLinks Workbooks(Workbooks.Count)
        Workbooks(Workbooks.Count).Close True, strPath & ws.Name & ".xlsx"
    Next

    Application.ScreenUpdating = True
End Sub

Sub BreakLinks(wb As Workbook)
    Dim lnk As Variant
    For Each lnk In wb.LinkSources(xlExcelLinks)
        wb.BreakLink lnk, xlLinkTypeExcelLinks
    Next
End Sub

Để chạy mã, hãy làm như sau:

  1. Mở trình soạn thảo VBA ( Alt+ F11)
  2. Trong cây ở góc trên cùng bên trái, nhấp chuột phải vào sổ làm việc của bạn và chèn một mô-đun mới
  3. Sao chép mã trên vào mô-đun này
  4. Đóng trình chỉnh sửa VBA
  5. Trong Excel, nhấn Alt+ F8để chạy macro và chọnSaveSheets

hoặc xem Làm cách nào để thêm VBA trong MS Office?


Cảm ơn! Điều gì về ngược lại? - để đặt nó trở lại với nhau? Tệp excel này rõ ràng có chứa "liên kết" (trước đây tôi chưa sử dụng tính năng này) và sau khi chia tách Excel không thể tìm thấy các liên kết (nó đang tìm trang tính đầu tiên); Có cách nào để phân chia chúng và cập nhật các liên kết cùng một lúc / hoặc chỉ cập nhật các liên kết không?
eichoa3I

1
Câu hỏi là làm thế nào bạn muốn xử lý các liên kết. Bạn có thể dễ dàng thay thế chúng bằng các giá trị bằng cách chèn Workbooks(Workbooks.Count).BreakLinkssau ws.Copy...
Peter Albert

Sau khi tôi mở một sổ làm việc, một cửa sổ bật lên trong Excel đã nhắc tôi sửa các liên kết; Tôi đã nhấp qua hộp thoại này và bây giờ các liên kết hoạt động cho tất cả các tệp. Mặc dù tôi đang tự hỏi liệu điều này đã được lưu trong tệp hay cục bộ ...
eichoa3I

Khi bạn nói thay thế chúng bằng các giá trị bằng Workbooks (Workbooks.Coun) .BreakLinks có nghĩa là các liên kết bị xóa, hoặc ...? Tôi nghĩ rằng cách tốt nhất để xử lý chúng chỉ đơn giản là loại bỏ chúng (nghĩa là khi người dùng mở các tệp excel hiện đã tách, họ không thấy cảnh báo về các liên kết bị hỏng).
eichoa3I

xin lỗi, hãy thử Workbooks(Workbooks.Count).BreakLink- không có skết thúc
Peter Albert

11
  1. Khi bạn bấm chuột phải vào tab của trang tính Excel, bạn có thể chọn Di chuyển hoặc Sao chép ...

    nhập mô tả hình ảnh ở đây

  2. Trong hộp thoại kết quả, bạn có thể chọn một cuốn sách công việc mục tiêu. Chọn (sách mới) .

    nhập mô tả hình ảnh ở đây

  3. Nhấn OK . Tờ của bạn bây giờ trong một tài liệu mới.


8

Tôi đã thử giải pháp của Peter Albert và nó không hiệu quả với tôi, vì vậy tôi đã tìm thấy một giải pháp trong bài đăng này (khăn Excel - lưu bảng tính dưới dạng các tệp riêng biệt) tại Nhật ký máy tính .

Nó hoạt động rất tốt. Bạn nên đổi tên các trang có chứa dấu chấm để có được các tệp được đặt tên chính xác với các .xlstiện ích mở rộng.

Sub CreateNewWBS()
Dim wbThis As Workbook
Dim wbNew As Workbook
Dim ws As Worksheet
Dim strFilename As String

    Set wbThis = ThisWorkbook
    For Each ws In wbThis.Worksheets
        strFilename = wbThis.Path & "/" & ws.Name
        ws.Copy
        Set wbNew = ActiveWorkbook
        wbNew.SaveAs strFilename
        wbNew.Close
    Next ws
End Sub

Sử dụng hướng dẫn để tạo và chạy macro này từ bài đăng của Peter Albert hoặc từ Làm cách nào để thêm VBA trong MS Office?


1
Tôi cũng đã thử giải pháp của Peter Albert và đã xảy ra lỗi "Lỗi thời gian chạy '13 ': Nhập không khớp. May mắn là giải pháp trong câu trả lời này có hiệu quả với tôi.
Bin

Làm thế nào tôi có thể làm cho nó ghi đè lên các tập tin hiện có cùng tên?
DAE

Tôi không cần điều này vì mỗi bãi chứa vào một thư mục riêng. Có thể thử chủ đề này
hrvoj3e

Giải pháp của bạn có hiệu quả với tôi :)
Muhammad Waheed
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.