Nhờ GPE tách trang trong một file word thành mỗi trang 1 file

Liên hệ QC

hoangvy123

Thành viên mới
Tham gia
6/1/11
Bài viết
32
Được thích
0
Nghề nghiệp
Nhân viên tổng hợp
Nhờ GPE tách file gửi kèm thành mỗi trang 1 file, theo tên từng người
 

File đính kèm

  • QD NANG LUONG.docx
    106.8 KB · Đọc: 21
Vào link sau tìm hiểu nhé: Đây
 
Mình cũng thử các loại code rồi nhưng khi xuất ra file nhỏ không ra kết quả như mong đợi. mình muốn tách từng file mỗi file ghi tên của người trong quyết định và vẫn giữ được thể thức văn bản
 
Nhờ GPE giúp mình file gửi kèm. mình đã thử các loại code trên lick bạn cho cung cấp rồi nhưng khi xuất ra file nhỏ không ra kết quả như mong đợi. mình muốn tách từng file mỗi file mỗi trang ghi tên của người trong quyết định và vẫn giữ được thể thức văn bản
 

File đính kèm

  • QD NANG LUONG.docx
    106.8 KB · Đọc: 5
Nhờ GPE giúp mình file gửi kèm. mình đã thử các loại code trên lick bạn cho cung cấp rồi nhưng khi xuất ra file nhỏ không ra kết quả như mong đợi. mình muốn tách từng file mỗi file mỗi trang ghi tên của người trong quyết định và vẫn giữ được thể thức văn bản
1/ Tách riêng từng file rồi cuối cùng để làm gì?

2/ Lý ra ngay từ đầu chỉ vẽ 1 trang duy nhất thôi rồi dùng trộn thư (Mail merge).
Nếu có bảng dữ liệu thì giờ làm trộn thư vẫn rất tốt so với tách trang, tách file.
 
File trên là mình trộn thư rồi nhưng tách ra mỗi trang 1 file lâu quá. Mình gửi file dữ liệu nhờ GPE trộn mà không phải tách trang nhưng file tách ra có tên như trong danh sách, không thay đổi thể thức của văn bản
 

File đính kèm

  • Bang du lieu.xlsx
    13.2 KB · Đọc: 10
1/ Tách riêng từng file rồi cuối cùng để làm gì?

2/ Lý ra ngay từ đầu chỉ vẽ 1 trang duy nhất thôi rồi dùng trộn thư (Mail merge).
Nếu có bảng dữ liệu thì giờ làm trộn thư vẫn rất tốt so với tách trang, tách file.
Do công việc nên phải tách từng trang
 
File trên là mình trộn thư rồi nhưng tách ra mỗi trang 1 file lâu quá. Mình gửi file dữ liệu nhờ GPE trộn mà không phải tách trang nhưng file tách ra có tên như trong danh sách, không thay đổi thể thức của văn bản
Xem cái này
Ngay từ mail merged tách file luôn
 
Xem cái này
Ngay từ mail merged tách file luôn
Cái người ta trình bầy là phải có các Heading (chèn bằng cách: Home -> mục Styles -> Heading 1). Mỗi Heading cùng với các dòng text đi kèm sẽ được ghi thành 1 tập tin.
Tập tin từ trộn thư của tác giả không có Heading. Nếu làm theo cách này thì hoặc chèn cho mỗi trang một Heading (số trang ít) hoặc dùng code để chèn (số trang nhiều). Sau đó mới thử như hướng dẫn.
Bài đã được tự động gộp:

Nhờ GPE tách file gửi kèm thành mỗi trang 1 file, theo tên từng người
Có nhiều cách làm trong đó có:

1. Dùng Bookmark.
Tạo tập tin Word mẫu chỉ có 1 trang. Ở những chỗ mà khi trộn thư bạn chèn các trường từ Excel thì bây giờ bạn chèn bookmark. Vd. sau khi viết xong
"Điều 1. Nâng bậc lương thường xuyên cho ông (bà) " thì Insert -> bookmark -> bookmark name = hoten -> Add
Làm tương tự cho các chỗ khác. Sau cùng thì lưu lại tập tin mẫu.
Trong trường hợp này code sẽ mở tập tin mẫu -> đọc dòng đầu trong Excel -> bắn dữ liệu vào các bookmark -> lưu lại với tên đọc từ Excel -> đọc dòng tiếp theo trong Excel -> bắn dữ liệu vào các bookmark -> lưu lại với tên đọc từ Excel -> cứ như thế cho tới hết dữ liệu trong Excel.

2. Dùng tập tin kết quả của trộn thư như tập tin đính kèm ở bài #1.
Mở tập tin nguồn -> Alt + F11 -> insert -> Module -> dán code ở sau rồi chạy:

Lưu ý: code sẽ tách từng trang thành từng tập tin và lưu. Code sẽ tìm lần xuất hiện đầu tiên của "(b?)" và lấy đoạn sau nó làm tên tập tin để lưu. Trong tập tin nguồn của bạn sau đoạn "Điều 1. Nâng bậc lương thường xuyên cho ông " sẽ có "(bà)", và code sẽ lấy đoạn sau là "Lê Thị Thu Dung" để làm tên tập tin. Như thế thì không cần dùng tập tin Excel.

Tất nhiên code tách từng trang không chỉ làm việc với dạng tập tin như của bạn nên nếu là tập tin khác mà không có "(b?)" thì code sẽ lưu với các tên 1.docx, 2.docx, ...

Code dán vào module để chạy
Mã:
Sub PageToFile()
Dim start As Long, PagesCount As Long, currPage As Long, filename As String
Dim doc As Document
    Application.ScreenUpdating = False
    currPage = 1
    PagesCount = ThisDocument.Range.Information(wdNumberOfPagesInDocument)
    
    Do While currPage <= PagesCount
        If currPage = PagesCount Then
            Selection.End = ThisDocument.Range.End
        Else
            Selection.GoTo wdGoToPage, wdGoToAbsolute, currPage + 1
        End If
        Selection.start = start
        Selection.End = Selection.End - 1
        Selection.Copy
        With Documents.Add
            Selection.PasteAndFormat (wdPasteDefault)
            Selection.End = 0
            filename = ""
            With Selection.Find
                .MatchWildcards = True
                .text = "\(b?\)"
                If .Execute Then
                    Selection.Collapse wdCollapseEnd
                    Selection.MoveEnd wdLine
                    filename = Trim(Left(Selection.text, InStr(1, Selection.text, vbCr) - 1))
                End If
            End With
            If Len(filename) = 0 Then filename = currPage
            .SaveAs2 ThisDocument.Path & "\" & filename & ".docx"
            .Close
        End With
        currPage = currPage + 1
        start = Selection.End + 1
    Loop
    Application.ScreenUpdating = True
End Sub
 
Cái người ta trình bầy là phải có các Heading (chèn bằng cách: Home -> mục Styles -> Heading 1). Mỗi Heading cùng với các dòng text đi kèm sẽ được ghi thành 1 tập tin.
Tập tin từ trộn thư của tác giả không có Heading. Nếu làm theo cách này thì hoặc chèn cho mỗi trang một Heading (số trang ít) hoặc dùng code để chèn (số trang nhiều). Sau đó mới thử như hướng dẫn.
Bài đã được tự động gộp:


Có nhiều cách làm trong đó có:

1. Dùng Bookmark.
Tạo tập tin Word mẫu chỉ có 1 trang. Ở những chỗ mà khi trộn thư bạn chèn các trường từ Excel thì bây giờ bạn chèn bookmark. Vd. sau khi viết xong
"Điều 1. Nâng bậc lương thường xuyên cho ông (bà) " thì Insert -> bookmark -> bookmark name = hoten -> Add
Làm tương tự cho các chỗ khác. Sau cùng thì lưu lại tập tin mẫu.
Trong trường hợp này code sẽ mở tập tin mẫu -> đọc dòng đầu trong Excel -> bắn dữ liệu vào các bookmark -> lưu lại với tên đọc từ Excel -> đọc dòng tiếp theo trong Excel -> bắn dữ liệu vào các bookmark -> lưu lại với tên đọc từ Excel -> cứ như thế cho tới hết dữ liệu trong Excel.

2. Dùng tập tin kết quả của trộn thư như tập tin đính kèm ở bài #1.
Mở tập tin nguồn -> Alt + F11 -> insert -> Module -> dán code ở sau rồi chạy:

Lưu ý: code sẽ tách từng trang thành từng tập tin và lưu. Code sẽ tìm lần xuất hiện đầu tiên của "(b?)" và lấy đoạn sau nó làm tên tập tin để lưu. Trong tập tin nguồn của bạn sau đoạn "Điều 1. Nâng bậc lương thường xuyên cho ông " sẽ có "(bà)", và code sẽ lấy đoạn sau là "Lê Thị Thu Dung" để làm tên tập tin. Như thế thì không cần dùng tập tin Excel.

Tất nhiên code tách từng trang không chỉ làm việc với dạng tập tin như của bạn nên nếu là tập tin khác mà không có "(b?)" thì code sẽ lưu với các tên 1.docx, 2.docx, ...

Code dán vào module để chạy
Mã:
Sub PageToFile()
Dim start As Long, PagesCount As Long, currPage As Long, filename As String
Dim doc As Document
    Application.ScreenUpdating = False
    currPage = 1
    PagesCount = ThisDocument.Range.Information(wdNumberOfPagesInDocument)
   
    Do While currPage <= PagesCount
        If currPage = PagesCount Then
            Selection.End = ThisDocument.Range.End
        Else
            Selection.GoTo wdGoToPage, wdGoToAbsolute, currPage + 1
        End If
        Selection.start = start
        Selection.End = Selection.End - 1
        Selection.Copy
        With Documents.Add
            Selection.PasteAndFormat (wdPasteDefault)
            Selection.End = 0
            filename = ""
            With Selection.Find
                .MatchWildcards = True
                .text = "\(b?\)"
                If .Execute Then
                    Selection.Collapse wdCollapseEnd
                    Selection.MoveEnd wdLine
                    filename = Trim(Left(Selection.text, InStr(1, Selection.text, vbCr) - 1))
                End If
            End With
            If Len(filename) = 0 Then filename = currPage
            .SaveAs2 ThisDocument.Path & "\" & filename & ".docx"
            .Close
        End With
        currPage = currPage + 1
        start = Selection.End + 1
    Loop
    Application.ScreenUpdating = True
End Sub
Cảm ơn GPE, mình đã làm được rồi
 
Web KT
Back
Top Bottom