[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,764
Được thích
5,723
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).
CẬP NHẬT 15/10/2024:
- Sửa vài lỗi trong bản 30/09/2024
- Thêm phiên bản trộn các trường bố trí theo hàng dọc (cột), theo yêu cầu tại bài #494
CẬP NHẬT 17/10/2024:
- Sửa vài điểm trong bản trộn theo dòng 15/10/2024
- Sửa câu từ và 1 vài lỗi của phiên bản trộn các trường bố trí theo hàng dọc (cột)
CẬP NHẬT 19/10/2024:
- Làm gọn và nhất quán code trong cả 2 phiên bản trộn dọc và ngang.
- Sửa lỗi phiên bản dọc
 

File đính kèm

Lần chỉnh sửa cuối:
Đã cập nhật trộn theo dòng. File tại bài #1
Cảm ơn anh vì sự tận huyết như này ạ.
Bài đã được tự động gộp:

Cập nhật: Chỉnh sửa lại từ ngữ dòng -> cột cho phù hợp, làm gọn code và sửa 1 vài lỗi.
Thời gian chạy code vẫn như nhau so với phiên bản trước phải không ạ?
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Trong khi code chạy thì mình có thể sử dụng được excel hay word khác được không ạ
VBA đang chạy thì vẫn bấm mở được file Word nhưng coi chừng gặp lỗi đứng code. Còn Excel thì hình như là không được. Bạn thử biết liền
 
Upvote 0
VBA đang chạy thì vẫn bấm mở được file Word nhưng coi chừng gặp lỗi đứng code. Còn Excel thì hình như là không được. Bạn thử biết liền
Có phương pháp khởi tạo luồng Excel khác hoặc Word khác để chạy mã ngầm. Mà ứng dụng Excel hiện tại vẫn hoạt động để làm việc chỉnh sửa.

Bác có thể tham khảo mã tại bài viết:

 
Upvote 0
Nhưng file word vẫn bị lỗi không chạy tiếp được ạ. Bị lỗi này ạ
Thường thì khi bạn đang chỉnh sửa file mẫu mà không tắt đi để chạy code thì se bị trường hợp đó. Bãy lỗi bằng cách xem file mẫu đnag mở thì lưu và đóng nó trc khi chạy code
 
Upvote 0
Cập nhật 19/10/2024 cả hai phiên bản. File tại bài #1.
Bứt dây động rừng, code nhiều quá sửa hoài vẫn bị sót. --=0 :wallbash:
 
Upvote 0
Gửi bác Maika8008, hôm nay mình chạy thử file nhập dữ liệu theo hàng dọc của bác mình gặp những vấn đề sau:
1. với dữ liệu ở vùng 1, mình xuất thử theo file mẫu giấy mời thì xuất ra ok, nhưng bác có thể thêm dòng lệnh gọi file kết quả xuất ra cho hiện ra luôn y như file theo hàng ngang được không? mình gọi kết quả ra sẽ nhanh hơn vào thư mục trộn tìm file mới xuất ra.

2. với dữ liệu ở vùng thứ 2 theo file mẫu bác gửi, thì chọn đại ông Trương Văn Y, hay Trương Văn Z thì excel cứ quay vòng vòng, không cho ra kết quả..bác có thể kiểm tra lại giúp khu vực này...mình cảm ơn bác nhiều lắm. (Với lỗi này mình phát hiện là sau khi mình làm 1 thao tác lỗi: ví dụ mở cái file GMH gốc, quên tắt, xong bấm trộn luôn thì file excel hư luôn, sau khi tắt hết mở lại thì file vẫn hư luôn, phải down lại file trên web về thì trộn lại ok hết)....bác cho mình hỏi với lỗi này có thể khắc phục được không? vì đôi khi xui, quên đóng file gốc để trộn, cái nhấn nút trộn, thế là file excel dữ liệu hư, nếu nhập lại, định dạng lại với khối lượng lớn cũng phê....

Đây là lần thứ 3, mình sửa lại phần post này, sau khi test lỗi của mục 2 một lần nữa, thì mình không bị lỗi như mình đã đề cập ở phía trên, như vậy là có thể lỗi này nó không phải lúc nào cũng xuất hiện, để xài thêm rồi phản hồi chính xác nhất. mình vẫn để những thắc mắc để ae nào có bị y mình cùng góp ý nhé.


chúc bác Maika8008 một tuần mới làm việc hiệu quả và tràn đầy năng lượng, chúc cả nhà thật vui và khỏe, an toàn trong mùa mưa bão
 
Lần chỉnh sửa cuối:
Upvote 0
Gửi bác Maika8008, hôm nay mình chạy thử file nhập dữ liệu theo hàng dọc của bác mình gặp những vấn đề sau:
1. với dữ liệu ở vùng 1, mình xuất thử theo file mẫu giấy mời thì xuất ra ok, nhưng bác có thể thêm dòng lệnh gọi file kết quả xuất ra cho hiện ra luôn y như file theo hàng ngang được không? mình gọi kết quả ra sẽ nhanh hơn vào thư mục trộn tìm file mới xuất ra.

2. với dữ liệu ở vùng thứ 2 theo file mẫu bác gửi, thì chọn đại ông Trương Văn Y, hay Trương Văn Z thì excel cứ quay vòng vòng, không cho ra kết quả..bác có thể kiểm tra lại giúp khu vực này...mình cảm ơn bác nhiều lắm. (Với lỗi này mình phát hiện là sau khi mình làm 1 thao tác lỗi: ví dụ mở cái file GMH gốc, quên tắt, xong bấm trộn luôn thì file excel hư luôn, sau khi tắt hết mở lại thì file vẫn hư luôn, phải down lại file trên web về thì trộn lại ok hết)....bác cho mình hỏi với lỗi này có thể khắc phục được không? vì đôi khi xui, quên đóng file gốc để trộn, cái nhấn nút trộn, thế là file excel dữ liệu hư, nếu nhập lại, định dạng lại với khối lượng lớn cũng phê....

Đây là lần thứ 3, mình sửa lại phần post này, sau khi test lỗi của mục 2 một lần nữa, thì mình không bị lỗi như mình đã đề cập ở phía trên, như vậy là có thể lỗi này nó không phải lúc nào cũng xuất hiện, để xài thêm rồi phản hồi chính xác nhất. mình vẫn để những thắc mắc để ae nào có bị y mình cùng góp ý nhé.


chúc bác Maika8008 một tuần mới làm việc hiệu quả và tràn đầy năng lượng, chúc cả nhà thật vui và khỏe, an toàn trong mùa mưa bão
Trả lời:
1. File trộn ngang tôi cũng bỏ việc mở file kết quả sau khi trộn rồi. Lý do: nếu 1 file kết quả thì được nhưng với nhiều file thì mở hết ra không ổn lắm.
2. Tôi sẽ nghiên cứu để xử lý: nếu file mẫu đang mở thì sẽ dùng file ấy chứ không mở lần nữa sinh ra lỗi. Hoặc chí ít là đóng hết các file Word đang mở rồi mới làm tiếp.
 
Upvote 0
Trả lời:
1. File trộn ngang tôi cũng bỏ việc mở file kết quả sau khi trộn rồi. Lý do: nếu 1 file kết quả thì được nhưng với nhiều file thì mở hết ra không ổn lắm.
2. Tôi sẽ nghiên cứu để xử lý: nếu file mẫu đang mở thì sẽ dùng file ấy chứ không mở lần nữa sinh ra lỗi. Hoặc chí ít là đóng hết các file Word đang mở rồi mới làm tiếp.
Cảm ơn bác Maika8008 nhiều,

thật ra tính năng xài nhiều nhất là "trộn 1 dòng 1 văn bản", còn với bản dọc là" trộn 1 cột 1 văn bản", nên chỉ cần 1 tính năng đó auto xuất hiện thôi Maika8008 ơi, các tính năng khác không cần, bạn có thể thêm lệnh auto xuất hiện file word với file bản dọc cho tính năng "trộn 1 cột 1 văn bản" được không? cảm ơn bác nhiều.
 
Upvote 0
Trả lời:
1. File trộn ngang tôi cũng bỏ việc mở file kết quả sau khi trộn rồi. Lý do: nếu 1 file kết quả thì được nhưng với nhiều file thì mở hết ra không ổn lắm.
2. Tôi sẽ nghiên cứu để xử lý: nếu file mẫu đang mở thì sẽ dùng file ấy chứ không mở lần nữa sinh ra lỗi. Hoặc chí ít là đóng hết các file Word đang mở rồi mới làm tiếp.
Bác chỉ cho thêm vài dòng để nó lưu và đóng file mẫu rồi trộn tiếp nè bác.
 
Upvote 0
Gửi bác Maika8008, hôm nay mình chạy thử file nhập dữ liệu theo hàng dọc của bác mình gặp những vấn đề sau:
1. với dữ liệu ở vùng 1, mình xuất thử theo file mẫu giấy mời thì xuất ra ok, nhưng bác có thể thêm dòng lệnh gọi file kết quả xuất ra cho hiện ra luôn y như file theo hàng ngang được không? mình gọi kết quả ra sẽ nhanh hơn vào thư mục trộn tìm file mới xuất ra.

2. với dữ liệu ở vùng thứ 2 theo file mẫu bác gửi, thì chọn đại ông Trương Văn Y, hay Trương Văn Z thì excel cứ quay vòng vòng, không cho ra kết quả..bác có thể kiểm tra lại giúp khu vực này...mình cảm ơn bác nhiều lắm. (Với lỗi này mình phát hiện là sau khi mình làm 1 thao tác lỗi: ví dụ mở cái file GMH gốc, quên tắt, xong bấm trộn luôn thì file excel hư luôn, sau khi tắt hết mở lại thì file vẫn hư luôn, phải down lại file trên web về thì trộn lại ok hết)....bác cho mình hỏi với lỗi này có thể khắc phục được không? vì đôi khi xui, quên đóng file gốc để trộn, cái nhấn nút trộn, thế là file excel dữ liệu hư, nếu nhập lại, định dạng lại với khối lượng lớn cũng phê....

Đây là lần thứ 3, mình sửa lại phần post này, sau khi test lỗi của mục 2 một lần nữa, thì mình không bị lỗi như mình đã đề cập ở phía trên, như vậy là có thể lỗi này nó không phải lúc nào cũng xuất hiện, để xài thêm rồi phản hồi chính xác nhất. mình vẫn để những thắc mắc để ae nào có bị y mình cùng góp ý nhé.


chúc bác Maika8008 một tuần mới làm việc hiệu quả và tràn đầy năng lượng, chúc cả nhà thật vui và khỏe, an toàn trong mùa mưa bão
Tôi chọn cách đóng (và lưu) hết tất cả file Word đang mở cho tiện chứ kiểm tra tên trùng thì lằng nhằng lắm
Bạn test xem thế nào. Tôi test chưa kỹ lắm.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom