[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)

Liên hệ QC

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
4,741
Được thích
5,669
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.
CẬP NHẬT 03/03/2023: Thêm chức năng chuyển sang trộn theo kiểu Mail Merge truyền thống với file Word mẫu có sẵn các trường theo cách bên trên.
CẬP NHẬT 29/06/2023: Tách riêng mỗi thủ tục cho 1 tùy chọn để dễ bảo trì code. Sửa lỗi không mở được đường dẫn mặc định.
CẬP NHẬT 07/08/2023: Thêm thao tác chèn bảng Excel vào Word. Thêm các cột $Table1$, $Table2$ ... vào bảng dữ liệu trộn và bố trí bảng cần chèn kèm trên trên đầu bảng như file đính kèm.
CẬP NHẬT 08/08/2023: Tạo bảng Word rồi chép dữ liệu của bảng Excel vào bảng Word. Bảng Word giữ được màu font chữ của trường giữ chỗ.
CẬP NHẬT 13/08/2023: Hoàn thiện code, thêm chức năng ghép file, và gộp các công việc chung 1 file
CẬP NHẬT 15/08/2023: Định dạng phân cách hàng nghìn cho bảng Word dựa vào định dạng các cột của bảng Excel.
CẬP NHẬT 30/09/2023: Mở luôn file Word kết quả khi trộn 1 dòng 1 file. Có thể chép 1 bảng vào nhiều vị trí khác nhau của file kết quả (như yêu cầu tại bài #432).
 

File đính kèm

  • GMH.docx
    21.1 KB · Đọc: 564
  • MergeToMSWord_Update300923.xlsm
    177.4 KB · Đọc: 247
Lần chỉnh sửa cuối:
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.
Em "Excel hóa" gần như tất cả các biểu mẫu word!! Việc dùng Vlookup() cũng có nhược điểm với trường dữ liệu lớn có thể bị chậm. Em đưa ra giải pháp dùng Name, kết hợp với code VBA để thay đổi vùng tham chiếu của Name (tương tự như vlookup thôi). Với cách làm này thì file nhẹ hều luôn.
 
Upvote 0
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.
mình muốn trộn nội dung qua word trong 1 file word thì làm sao ạ Mr Maika.. có nghĩa là data excel có 3 người thì tạo ra file 1 file word có 3 trang của 3 người ạ. Thanks
 
Upvote 0
mình muốn trộn nội dung qua word trong 1 file word thì làm sao ạ Mr Maika.. có nghĩa là data excel có 3 người thì tạo ra file 1 file word có 3 trang của 3 người ạ. Thanks
Vụ này mới và lạ à nghe --=0
Gợi ý để dùng được file bài #1 mà không cần sửa đổi gì cả: bạn chép ra thành x3 lần số cột rồi đặt tên sao đó để trộn được thì thôi.
 
Upvote 0
Vụ này mới và lạ à nghe --=0
Gợi ý để dùng được file bài #1 mà không cần sửa đổi gì cả: bạn chép ra thành x3 lần số cột rồi đặt tên sao đó để trộn được thì thôi.
cần trộn >100 người, mình muốn trộn ra 1 mẫu giấy mời ra 100 người trong 1 file word để in cho tiện, chứ nếu trộn ra 100 file thì mờ ra in cũng rất mất thời gian. nếu dùng file bài #1 x100 số cột, chắc đuối hihi..xin cao kiến
 
Upvote 0
cần trộn >100 người, mình muốn trộn ra 1 mẫu giấy mời ra 100 người trong 1 file word để in cho tiện, chứ nếu trộn ra 100 file thì mờ ra in cũng rất mất thời gian. nếu dùng file bài #1 x100 số cột, chắc đuối hihi..xin cao kiến
Nếu bạn trộn từ Word đến Word, hoặc không gặp vấn đề gì với hiển thị dữ liệu khi trộn Word với Excel thì bạn cứ dùng Mail Merge chứ dùng cách này làm gì. Đây chỉ là giải pháp thay thế khi cần thiết thôi.
 
Upvote 0
Cập nhật 03/03/2023:
Vào một ngày đẹp trời nào đó, thay vì cách đang dùng, bạn muốn chuyển sang dùng kiểu Mail Merge truyền thống để cho nhanh hơn hoặc thấy dữ liệu khi trộn kiểu truyền thống không bị sai nữa thì đây là bản cập nhật dành cho bạn.

Vẫn với file Word mẫu đã có sẵn trường chèn như cách trước, bạn chọn nó để chuyển sang file mới đã merge toàn bộ các dòng trong bảng dữ liệu tùy chọn. Trường chèn có thay đổi 1 chút: ký tự $ rào trước lẫn sau tên.

Vui lòng tải file mới tại bài #1.
 
Upvote 0
Các anh cho mình hỏi lỗi này là bị sao nhi
 

File đính kèm

  • loi duong dan.jpg
    loi duong dan.jpg
    70.5 KB · Đọc: 17
Upvote 0
Có cách nào định đạng số khi trộn qua file word có dấu . k ạh. Mình trộn nhưng k có ạh
Bạn chép 1 ô trống nào đó chưa hề nhập dữ liệu (tức dạng general) vào cái ô mà trộn không có dấu chấm đó. Sau đó định dạng lại dạng number thì sẽ được
 
Upvote 0
Chép như thế nào ạh. Mình k định dạng ngay từ đầu đc àh
Tôi không biết bản chất vấn đề nhưng cái ô đó đã bị nhận nhầm định dạng nên cái hàm định dạng trong code làm việc không đúng. Chép ô trống ngoài vùng dữ liệu thả vào rồi nhập lại dữ liệu
 
Upvote 0
Mình nhập dữ liệu từ sheet khác rồi link qua ạh
 
Upvote 0
Có cách nào định đạng số khi trộn qua file word có dấu . k ạh. Mình trộn nhưng k có ạh
Bài đã được tự động gộp:


View attachment 287848
Mình cũng mới xử lý xong vấn đề như cua bạn.
Bài đã được tự động gộp:

các bác cho mình hỏi làm thế nào để mình loại bỏ hết các ký tự đặc biệt khi file tạo ra thư mục nhỉ. Vì cột A là cộ sẽ là tên thư mục nhưng vì dữ liệu cột A là dể chèn nên ko thể ko có ký tự đặc biệt như dấu : or ;, thì chương trình báo lỗi ko tạo đc thư mục.
 
Upvote 0
Mình cũng mới xử lý xong vấn đề như cua bạn.
Bài đã được tự động gộp:

các bác cho mình hỏi làm thế nào để mình loại bỏ hết các ký tự đặc biệt khi file tạo ra thư mục nhỉ. Vì cột A là cộ sẽ là tên thư mục nhưng vì dữ liệu cột A là dể chèn nên ko thể ko có ký tự đặc biệt như dấu : or ;, thì chương trình báo lỗi ko tạo đc thư mục.
Làm ntn ạh? Hướng dẫn mình với
 
Upvote 0
Có cách nào để khi mình k nhập 1 cell mà dữ liệu kế tiếp vẫn nhập k ạh. E nhập có 1 cell k nhập thì những dữ liệu kế tiếp sẽ k nhập tiếp đc ạh
 
Upvote 0
bài viết rất hữu ích ạ. em có lấy file của anh để áp dụng vào trường hợp của em. file excel của em như thế này em trộn sang file word nó chỉ thể hiện 1 dòng thôi ạ. anh xem giúp em với ạ
555.PNG
file word.PNG
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom