[Chia sẻ] Dùng VBA trộn dữ liệu Excel sang file Word mẫu (tương tự chức năng Mail Merge)

MyExcel Liên hệ QC

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
3,514
Được thích
3,876
Donate (Momo)
Donate
Giới tính
Nam
Những ai có nhu cầu và đã từng sử dụng chức năng Mail Merge của MS Word dùng dữ liệu trên bảng tính Excel đều biết nó hoạt động như thế nào. Không ít trong số đó từng gặp những rắc rối về định dạng số, ngày tháng khi trộn, hoặc khi chuyển file hoạt động tốt từ máy này sang máy khác lại sinh ra khó bảo.

Với việc dùng VBA để trộn thì:
ƯU ĐIỂM:
- Dễ làm ngay cả với người mới. Thú thật khi mới dùng Mail Merge trong mấy lần đầu tiên tôi rất lúng túng, không biết phải làm thế nào để nạp dữ liệu, chèn trường
- Không có các lỗi: định dạng number không như ý muốn, bên Excel 1 đường nhưng sang Word lại 1 nẻo dù đã chỉnh sửa định dạng của Merge Fields , đảo ngày sang tháng.
- Không phát sinh lỗi khi chuyển sang máy tính khác (trừ việc cần thêm thư viện Microsoft Word tại cửa sổ VBA)
NHƯỢC ĐIỂM:
- Chậm. Tốc độ anh này nếu so với Mail Merge cũng như so đi xe đạp với xe máy --=0

Ứng dụng sở trường của nó không phải ở việc trộn và in hàng loạt như giấy mời, mà là ở việc trộn mỗi lần cho nhiều file mẫu khác nhau nhưng trong các file ấy dùng lặp đi lặp lại 1 số thông tin thay đổi. Ví dụ khi bạn có một bộ văn bản cho 1 công việc gồm: Hợp đồng, phụ lục, thông báo, giấy mời, quy chế, nghiệm thu, thanh lý... mỗi lần dùng cho 1 đối tác, thì bạn rất dễ nhập sai thông tin đối tác, trích yếu công việc, ngày giờ tiến hành, địa điểm... hoặc khi sửa lại từ đối tác này dùng cho đối tác khác rất dễ bị râu ông nọ cắm cằm bà kia.

CÁCH DÙNG:
- Chuẩn bị file Word mẫu (ở trạng thái đóng). Tôi đã chuẩn bị sẵn 1 file mẫu ví dụ kèm theo.
- Chuẩn bị bảng dữ liệu như file Excel đính kèm. Nhập đường dẫn thư mục file Word mẫu tại ô H2 (đường dẫn này chỉ dùng khi bạn muốn trộn toàn bộ file Word trong thư mục nhưng lại không muốn hiện hộp thoại để lựa thư mục - Nếu ô H2 trống thì hộp thoại lựa thư mục sẽ xuất hiện khi chạy code)
- Bấm nút Gửi Field sang file Word mẫu. Từ các trường nhận được ở cuối file Word mẫu (tên trường bắt đầu bằng dấu $), bạn chép chúng đến các vị trí mong muốn và định dạng theo ý thích. Chép xong xóa các trường cuối file đi, lưu, đóng lại.
- Bấm Trộn để tiến hành. Các file đã trộn được đặt tên theo tên đối tác, lưu cùng đường dẫn với file Word mẫu.

CẬP NHẬT 29/07/2021: Sửa code để tăng tốc độ khi trộn hàng loạt toàn bộ dòng
CẬP NHẬT 07/12/2021: Giữ số 0 đầu số chứng minh nhân dân hoặc số điện thoại
CẬP NHẬT 17/05/2022: Trộn thông tin 1 người vào nhiều mẫu .docx khác nhau bằng hộp thoại chọn file. Văn bản đã trộn được lưu ở thư mục con có tên của người trộn. Nếu thư mục chưa tồn tại thì tự động được tạo mới. Tải file đính kèm tại bài #97
CẬP NHẬT 12/06/2022:
Làm gọn code và dùng userform để chọn tham số đáp ứng tất cả yêu cầu của các thành viên từ trước đến nay trong chủ đề.
CẬP NHẬT 14/06/2022: Ô chứa text >255 ký tự vẫn trộn đầy đủ thông tin và không thi hành với các dòng ẩn.
CẬP NHẬT 18/06/2022: Tăng tốc với trường hợp trộn nhiều dòng nhiều văn bản và sửa lỗi lấy sai vùng làm việc với trường hợp trộn tất cả file Word trong folder.
 

File đính kèm

  • GMH.docx
    19.7 KB · Đọc: 488
  • MergeToMSWord_Update180622.xlsm
    48.6 KB · Đọc: 21
Lần chỉnh sửa cuối:

babyheomoi

Thành viên thường trực
Tham gia
22/9/13
Bài viết
395
Được thích
87
Xưa có xài, nhưng vẫn lâu lâu bị lỗi format, phải xài kèm thêm hàm FIXED, giờ tham khảo thêm được cái code GetFormat của bác!
Cám ơn bác đã share!
 
Upvote 0

truongvu317

Thành viên tích cực
Tham gia
15/11/10
Bài viết
880
Được thích
619
Giới tính
Nữ
Vui quá, tìm cái này hoài một thời gian, cảm ơn bạn đã chia sẻ
 
Upvote 0

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
3,514
Được thích
3,876
Donate (Momo)
Donate
Giới tính
Nam
Nếu làm phức tạp vậy thì chuyển cái biểu mẫu bên Word sang một Sheet của Excel, dùng hàm vlookup() tham chiếu các trường thông tin sẽ hay hơn.
Nhiều người không thích thế. Vả lại đây chỉ là mẫu đơn giản, nếu như có 1 bộ văn bản như tôi nói thì không thể để ở Excel được vì quá bừa bộn. Lúc ấy cái này mới phát huy tác dụng.
 
Upvote 0

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
3,514
Được thích
3,876
Donate (Momo)
Donate
Giới tính
Nam
Soạn một văn bản (hợp đồng) cỡ 10 trang A4 trên Excel hoàn toàn đẹp, nét như trong phim bình thường mà. :)
Cần một số thủ thuật nữa để chúng khỏi vượt tầm kiểm soát khi in ấn nữa nên coi vậy chứ hơi rối rắm. Tự động giãn dòng là 1 ví dụ, nếu không, chữ mới chèn vào sẽ bị lấp mất.
 
Upvote 0

Excel365

Thành viên tích cực
Tham gia
29/10/10
Bài viết
856
Được thích
120
Giới tính
Nam
Những ai có nhu cầu và đã từng sử dụng chức năng Mail Merge của MS Word dùng dữ liệu trên bảng tính Excel đều biết nó hoạt động như thế nào. Không ít trong số đó từng gặp những rắc rối về định dạng số, ngày tháng khi trộn, hoặc khi chuyển file hoạt động tốt từ máy này sang máy khác lại sinh ra khó bảo.

Với việc dùng VBA để trộn thì:
ƯU ĐIỂM:
- Dễ làm ngay cả với người mới. Thú thật khi mới dùng Mail Merge trong mấy lần đầu tiên tôi rất lúng túng, không biết phải làm thế nào để nạp dữ liệu, chèn trường
- Không có các lỗi: định dạng number không như ý muốn, bên Excel 1 đường nhưng sang Word lại 1 nẻo dù đã chỉnh sửa định dạng của Merge Fields , đảo ngày sang tháng.
- Không phát sinh lỗi khi chuyển sang máy tính khác (trừ việc cần thêm thư viện Microsoft Word tại cửa sổ VBA)
NHƯỢC ĐIỂM:
- Chậm. Tốc độ anh này nếu so với Mail Merge cũng như so đi xe đạp với xe máy --=0

Ứng dụng sở trường của nó không phải ở việc trộn và in hàng loạt như giấy mời, mà là ở việc trộn mỗi lần cho nhiều file mẫu khác nhau nhưng trong các file ấy dùng lặp đi lặp lại 1 số thông tin thay đổi. Ví dụ khi bạn có một bộ văn bản cho 1 công việc gồm: Hợp đồng, phụ lục, thông báo, giấy mời, quy chế, nghiệm thu, thanh lý... mỗi lần dùng cho 1 đối tác, thì bạn rất dễ nhập sai thông tin đối tác, trích yếu công việc, ngày giờ tiến hành, địa điểm... hoặc khi sửa lại từ đối tác này dùng cho đối tác khác rất dễ bị râu ông nọ cắm cằm bà kia.

CÁCH DÙNG:
- Chuẩn bị file Word mẫu (ở trạng thái đóng). Tôi đã chuẩn bị sẵn 1 file mẫu ví dụ kèm theo.
- Chuẩn bị bảng dữ liệu như file Excel đính kèm. Nhập đường dẫn file Word mẫu tại ô E1 , tên file Word mẫu tại ô E2 của file Excel.
- Bấm nút Gửi Field sang file Word mẫu. Từ các trường nhận được ở cuối file Word mẫu (tên trường bắt đầu bằng dấu $), bạn chép chúng đến các vị trí mong muốn và định dạng theo ý thích. Chép xong xóa các trường cuối file đi, lưu, đóng lại.
- Bấm Trộn để tiến hành. Các file đã trộn được đặt tên theo tên đối tác, lưu cùng đường dẫn với file Word mẫu.

Maika8008 bổ sung thêm tính năng in sang Word 1 dòng được chọn bên Excel (thay vì in hết tất cả các dòng).

 
Upvote 0

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
3,514
Được thích
3,876
Donate (Momo)
Donate
Giới tính
Nam
Cập nhật:
- Chọn 1 dòng trong dữ liệu để trộn.
- Có thể đặt nhiều bảng trong sheet hiện hành, mỗi bảng trộn cho 1 file Word (tất nhiên khi đổi thì phải thay tên file tại E2 hoặc bạn có thể sửa code để đặt tên file ở ô khác, tránh nhầm lẫn khi dùng nhiều file).
- Tên trường để chèn vào Word là tên trường tại bảng có ô hiện hành.
 

File đính kèm

  • MergeToMSWord.xlsm
    26.6 KB · Đọc: 95
Upvote 0

babyheomoi

Thành viên thường trực
Tham gia
22/9/13
Bài viết
395
Được thích
87
Mấy em test nó báo vậy rồi treo luôn anh ơi!
Bài đã được tự động gộp:

Chạy em hay bị lỗi 2 dong này!
 

File đính kèm

  • LOI MERGER EXCEL TO WORD.jpg
    LOI MERGER EXCEL TO WORD.jpg
    24.3 KB · Đọc: 51
  • Break.jpg
    Break.jpg
    67.1 KB · Đọc: 53
Upvote 0

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
3,514
Được thích
3,876
Donate (Momo)
Donate
Giới tính
Nam
Mấy em test nó báo vậy rồi treo luôn anh ơi!
Chạy em hay bị lỗi 2 dong này!

@babyheomoi
Bạn sai gì không biết nhưng nó báo lỗi đường dẫn và tên file thì phải nghĩ là nhập sai 2 thông tin đó.

Còn khi đã sai mà ngừng code nửa chừng là không thoát được Word.Application, lỗi còn nặng hơn. Khởi động lại máy tính mới hết lỗi.
Bài đã được tự động gộp:

Tôi thấy cái này của @huuthang_bd rất hay và tốc độ chạy thấy rất nhanh, nhưng hình như tác giả không chia sẻ.
Tôi đoán vẫn là mail merge nhưng dùng vba để đơn giản khâu chèn trường
 
Lần chỉnh sửa cuối:
Upvote 0

giaiphap

==(^o^)==
Tham gia
12/3/07
Bài viết
5,550
Được thích
5,650
Donate (Momo)
Donate
Giới tính
Nam
Mấy em test nó báo vậy rồi treo luôn anh ơi!
Chạy em hay bị lỗi 2 dong này!

@babyheomoi
Bạn sai gì không biết nhưng nó báo lỗi đường dẫn và tên file thì phải nghĩ là nhập sai 2 thông tin đó.

Còn khi đã sai mà ngừng code nửa chừng là không thoát được Word.Application, lỗi còn nặng hơn. Khởi động lại máy tính mới hết lỗi.
Bài đã được tự động gộp:


Tôi đoán vẫn là mail merge nhưng dùng vba để đơn giản khâu chèn trường
Tôi thì thấy anh ấy dùng BookMark sau đó thay thế BookMark bằng Text trong danh sách, chạy rất mượt.
 
Upvote 0

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
3,514
Được thích
3,876
Donate (Momo)
Donate
Giới tính
Nam
Tôi thì thấy anh ấy dùng BookMark sau đó thay thế BookMark bằng Text trong danh sách, chạy rất mượt.
À, trên di động tôi không xem rõ. Nhưng tôi nghĩ do anh ấy chạy ngay từ Word nên không vấn đề gì chứ với trường hợp của tôi là chạy trên Excel nên đầu tiên phải tạo Word.Application -> mở Word Doc -> đóng Word Doc nên chiếm hầu hết thời gian rồi.
 
Upvote 0

QuangMinhtb

Thành viên hoạt động
Tham gia
31/10/19
Bài viết
164
Được thích
32
Những ai có nhu cầu và đã từng sử dụng chức năng Mail Merge của MS Word dùng dữ liệu trên bảng tính Excel đều biết nó hoạt động như thế nào. Không ít trong số đó từng gặp những rắc rối về định dạng số, ngày tháng khi trộn, hoặc khi chuyển file hoạt động tốt từ máy này sang máy khác lại sinh ra khó bảo.

Với việc dùng VBA để trộn thì:
ƯU ĐIỂM:
- Dễ làm ngay cả với người mới. Thú thật khi mới dùng Mail Merge trong mấy lần đầu tiên tôi rất lúng túng, không biết phải làm thế nào để nạp dữ liệu, chèn trường
- Không có các lỗi: định dạng number không như ý muốn, bên Excel 1 đường nhưng sang Word lại 1 nẻo dù đã chỉnh sửa định dạng của Merge Fields , đảo ngày sang tháng.
- Không phát sinh lỗi khi chuyển sang máy tính khác (trừ việc cần thêm thư viện Microsoft Word tại cửa sổ VBA)
NHƯỢC ĐIỂM:
- Chậm. Tốc độ anh này nếu so với Mail Merge cũng như so đi xe đạp với xe máy --=0

Ứng dụng sở trường của nó không phải ở việc trộn và in hàng loạt như giấy mời, mà là ở việc trộn mỗi lần cho nhiều file mẫu khác nhau nhưng trong các file ấy dùng lặp đi lặp lại 1 số thông tin thay đổi. Ví dụ khi bạn có một bộ văn bản cho 1 công việc gồm: Hợp đồng, phụ lục, thông báo, giấy mời, quy chế, nghiệm thu, thanh lý... mỗi lần dùng cho 1 đối tác, thì bạn rất dễ nhập sai thông tin đối tác, trích yếu công việc, ngày giờ tiến hành, địa điểm... hoặc khi sửa lại từ đối tác này dùng cho đối tác khác rất dễ bị râu ông nọ cắm cằm bà kia.

CÁCH DÙNG:
- Chuẩn bị file Word mẫu (ở trạng thái đóng). Tôi đã chuẩn bị sẵn 1 file mẫu ví dụ kèm theo.
- Chuẩn bị bảng dữ liệu như file Excel đính kèm. Nhập đường dẫn file Word mẫu tại ô E1 , tên file Word mẫu tại ô E2 của file Excel.
- Bấm nút Gửi Field sang file Word mẫu. Từ các trường nhận được ở cuối file Word mẫu (tên trường bắt đầu bằng dấu $), bạn chép chúng đến các vị trí mong muốn và định dạng theo ý thích. Chép xong xóa các trường cuối file đi, lưu, đóng lại.
- Bấm Trộn để tiến hành. Các file đã trộn được đặt tên theo tên đối tác, lưu cùng đường dẫn với file Word mẫu.
Anh cho em hỏi, có thể áp dụng cho nhiều file word được không?
Cụ thể em có 5 biên biển các loại, em muốn tách ra 5file word để cho dễ quản lý và theo dõi chứ không để vào chung một file word thì có thể áp dụng được không ạ?
Em xin cảm ơn!
 
Upvote 0

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
3,514
Được thích
3,876
Donate (Momo)
Donate
Giới tính
Nam
Anh cho em hỏi, có thể áp dụng cho nhiều file word được không?
Cụ thể em có 5 biên biển các loại, em muốn tách ra 5file word để cho dễ quản lý và theo dõi chứ không để vào chung một file word thì có thể áp dụng được không ạ?
Em xin cảm ơn!
Bạn dùng file và lưu ý hướng dẫn ở bài #11.
 
Upvote 0

QuangMinhtb

Thành viên hoạt động
Tham gia
31/10/19
Bài viết
164
Được thích
32
Bạn dùng file và lưu ý hướng dẫn ở bài #11.
Vâng, vậy là nếu muốn dùng cho nhiều file word thì phải đổi tên file word và đường dẫn cho file word đó đúng không anh?
Anh có hướng dẫn "Có thể đặt nhiều bảng trong sheet hiện hành, mỗi bảng trộn cho 1 file Word"
Có phải là mỗi bảng đó sẽ dùng lựa chọn "trộn 1 dòng" để trộn sang file cần lấy dữ liệu phải không anh?
 
Upvote 0
Web KT

Group

DIỄN ĐÀN GIẢI PHÁP EXCEL
Top Bottom