[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:
Gán ngay phía trên dòng đó
 
Upvote 0
Dạ anh. Thuy cảm ơn anh ạ Mong bài của anh sớm có những chức năng ưu việt hơn nữa
 
Lần chỉnh sửa cuối:
Upvote 0
Chào anh Maika. Anh xem nâng cấp phần viết thêm chức năng xuất ra file PDF đi anh.
 
Upvote 0
Bạn tải lại file. Hôm qua thử chỉ 1 trường hợp tưởng ổn, hóa ra còn nhiều việc cho mấy cái nhãn nhảy lên nhảy xuống đó thì mới chạy ổn được cho tất cả các trường hợp.

Sau bạn có chèn hình thì bấm vào cái hình chọn chèn/ hình đầy đủ hoặc copy hình dán thẳng vào bài viết
Anh xem giúp lại với ạ... sau khi kiểm tra.. em thấy file word sau khi trộn " Nguyễn Văn A" có lỗi là thêm ký hiệu ô vuông ạ
 

File đính kèm

  • MergeToMSWord_Update180622.xlsm
    47.5 KB · Đọc: 6
  • Nhật ký.docx
    30.2 KB · Đọc: 4
  • Nguyễn Văn A.doc
    50 KB · Đọc: 7
Upvote 0
Anh xem giúp lại với ạ... sau khi kiểm tra.. em thấy file word sau khi trộn " Nguyễn Văn A" có lỗi là thêm ký hiệu ô vuông ạ
File .xlsm đính kèm của bạn có virus nên Defender máy tôi không cho tải. Do đó tôi đoán "lỗi" này là do chuỗi trong các ô việc cần mời của bạn chứa ký tự không nhìn thấy ở cuối chuỗi. Thế thôi.
 
Upvote 0
File .xlsm đính kèm của bạn có virus nên Defender máy tôi không cho tải. Do đó tôi đoán "lỗi" này là do chuỗi trong các ô việc cần mời của bạn chứa ký tự không nhìn thấy ở cuối chuỗi. Thế thôi.
em xin phép gửi lại a xem giúp... em chưa tìm được nguyên nhân do đâu trong 2 chuỗi ký tự
 

File đính kèm

  • MergeToMSWord_Update180622.xlsm
    46.8 KB · Đọc: 4
  • Nhật ký.docx
    30.2 KB · Đọc: 5
Upvote 0
Dạ khắc phục được không ạ... Có nhiều nội dung trong 1 ô excell em phải bấm Alt+ Enter để xuống dòng ạ
Được, nhưng đấy không phải là khắc phục mà là chạy marathon theo dữ liệu của bạn. Tốt nhất là bạn đừng xuống dòng.
Nếu bạn vẫn muốn thì tự mình thử áp dụng phương thức Replace của VBA để thay thế ký tự Chr(10) bằng chuỗi rỗng trước khi trộn.
 
Upvote 0
Được, nhưng đấy không phải là khắc phục mà là chạy marathon theo dữ liệu của bạn. Tốt nhất là bạn đừng xuống dòng.
Nếu bạn vẫn muốn thì tự mình thử áp dụng phương thức Replace của VBA để thay thế ký tự Chr(10) bằng chuỗi rỗng trước khi trộn.
Dạ em cảm ơn anh... Vấn đề a nêu quá khó với em rồi ạ... Em chỉ biết bê nguyên đoạn code của anh để sử dụng thôi ạ
 
Upvote 0
Dạ em cảm ơn anh... Vấn đề a nêu quá khó với em rồi ạ... Em chỉ biết bê nguyên đoạn code của anh để sử dụng thôi ạ
Xử được cái ký tự Chr(10) nhưng sắp đến mà có ký tự không thấy Chr(xxx) khác thì không biết thế nào?
 

File đính kèm

  • MergeToMSWord_Update180622.xlsm
    47.9 KB · Đọc: 22
Lần chỉnh sửa cuối:
Upvote 0
Xử được cái ký tự Chr(10) nhưng sắp đến mà có ký tự không thấy Chr(xxx) khác thì không biết thế nào?
Mình muốn hỏi là bạn có thể chuyển code này thành Excell add-in thay vì Com add-in được không, vì nói thật thì thấy bên này code được sửa và cập nhật liên tục hơn là bên bài kia. Mà tải và cài Excell add-in thì nhanh gọn hơn. Mình không rõ là 2 loại add-in này có sự khác biệt gì khi viết không, nhưng mình thấy cài add-in bằng file.xlam tiện hơn khi cập nhật như add-in của bài này
 
Upvote 0
Tôi làm add-in bên kia với mục đích muốn học và làm cái file này là để tiện cho người dùng. Còn add-in xlam tôi thấy không cần thiết và cũng không muốn làm. Tùy bạn chọn.
Mình muốn hỏi là bạn có thể chuyển code này thành Excell add-in thay vì Com add-in được không, vì nói thật thì thấy bên này code được sửa và cập nhật liên tục hơn là bên bài kia. Mà tải và cài Excell add-in thì nhanh gọn hơn. Mình không rõ là 2 loại add-in này có sự khác biệt gì khi viết không, nhưng mình thấy cài add-in bằng file.xlam tiện hơn khi cập nhật như add-in của bài này
 
Upvote 0
Xử được cái ký tự Chr(10) nhưng sắp đến mà có ký tự không thấy Chr(xxx) khác thì không biết thế nào?

Xử được cái ký tự Chr(10) nhưng sắp đến mà có ký tự không thấy Chr(xxx) khác thì không biết thế nào?
anh xem lại giúp. Sau khi chọn xong đoạn code không cho mở lên forder chứa văn bản word để mình chọn anh ạ
 
Upvote 0
anh xem lại giúp. Sau khi chọn xong đoạn code không cho mở lên forder chứa văn bản word để mình chọn anh ạ
Bạn có chọn checkbox trên cùng đấy không? Nếu bạn không chọn checkbox mà không hiện hộp thoại chọn file là kỳ lạ vì tôi đã thử cả rồi mới gửi. Chừ thử lại vẫn tốt.
 
Upvote 0
Tôi làm add-in bên kia với mục đích muốn học và làm cái file này là để tiện cho người dùng. Còn add-in xlam tôi thấy không cần thiết và cũng không muốn làm. Tùy bạn chọn.
Vâng, mong bạn thông cảm tại mình dùng cả cái add-in kia lẫn cả bên này, sau khi cài đặt gần 20 mục để tự động điền rồi đổi sang file khác thì phải chép dữ liệu nguồn sang file mới và phải cài lại từ đầu. Nên mới có ý như thế :(. Mình cũng hỏi tác giả bên đó có thể lưu được phần cài đặt để có thể chép sang file khác không nhưng có lẽ tác giả không còn muốn thêm tính năng cho addin đó nữa hoặc cái này VBA không hỗ trợ nên không thấy phản hồi.
 
Upvote 0
A xem giúp em có thực hiện sai thao tác gì không ạ..
Không sai gì vì bạn đã làm các bước ấy cả trăm lần rồi. Vấn đề là tại sao trước đây vẫn dùng được bình thường thì nay lại không hiện hộp thoại chọn file?

Bạn xem lại đường dẫn hiện trên textbox kia có hợp lệ không?
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom