[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: 559
  • MergeToMSWord_Update300923.xlsm
    177.4 KB · Đọc: 240
Lần chỉnh sửa cuối:
Vẫn không trộn được anh, chọn 1 ô hay chọn cả dòng, hoặc chọn những ô cần trộn trong dòng đó đều không được ạ!
Ca này khó. Bạn làm sai gì chỉ bạn mới biết. Chừ tải file xlsm tại bài 11, dùng file word của tôi, sửa đường dẫn phù hợp với máy bạn. Dùng tất cả các trường hợp bạn muốn (nhưng không thay đổi cấu trúc) mà lỗi chỗ nào thì báo tôi sửa. Giờ bạn đã ất ơ mà lại muốn đốt cháy giai đoạn thì tôi chịu.
 
Upvote 0
Ca này khó. Bạn làm sai gì chỉ bạn mới biết. Chừ tải file xlsm tại bài 11, dùng file word của tôi, sửa đường dẫn phù hợp với máy bạn. Dùng tất cả các trường hợp bạn muốn (nhưng không thay đổi cấu trúc) mà lỗi chỗ nào thì báo tôi sửa. Giờ bạn đã ất ơ mà lại muốn đốt cháy giai đoạn thì tôi chịu.
File em gửi lên anh xem giúp em ở máy anh có bị vậy không ạ?
 
Upvote 0
Vừa rồi bạn gửi mà máy tôi bị lỗi not load dll nên tôi không dùng được nên tôi mới nói xoá đi tải lại đó
 
Upvote 0
Vừa rồi bạn gửi mà máy tôi bị lỗi not load dll nên tôi không dùng được nên tôi mới nói xoá đi tải lại đó
Vâng em cảm ơn anh!
Bài đã được tự động gộp:

Vừa rồi bạn gửi mà máy tôi bị lỗi not load dll nên tôi không dùng được nên tôi mới nói xoá đi tải lại đó
E tải lại file #32 rồi, anh xem có tải xuống được không ạ?
 
Lần chỉnh sửa cuối:
Upvote 0

File đính kèm

  • MergeToMSWord_QuangMinhtb_2.xlsm
    22.7 KB · Đọc: 28
Upvote 0
Em cảm ơn anh, em chọn "trộn hàng loạt" thì được nhưng chọn "trộn 1 dòng" thì không trộn được anh ạ!
Tôi thử rồi mới gửi. Chức năng đó hoạt động tốt ngay tại bài #11 sao bạn lại bảo là không được. Nhưng khi nói không được thì phải mô tả làm gì, làm như thế nào, rồi không được là thế nào.
 
Upvote 0
Tôi thử rồi mới gửi. Chức năng đó hoạt động tốt ngay tại bài #11 sao bạn lại bảo là không được. Nhưng khi nói không được thì phải mô tả làm gì, làm như thế nào, rồi không được là thế nào.
Dạ! Trước em toàn chọn 1 dòng vì dòng chỉ có 1 dữ liệu mà không chọn trộn hàng loạt.
Anh thử lại chọn trộn 1 dòng bài #45, anh giúp em với bảng chèn là dòng 8 và dữ liệu trộn là ô dòng 9.
Xem thế nào ạ? e chọn trộn 1 dòng không thấy báo trộn, còn chọn trộn hàng loạt thì mới được.
 
Upvote 0
Dạ! Trước em toàn chọn 1 dòng vì dòng chỉ có 1 dữ liệu mà không chọn trộn hàng loạt.
Anh thử lại chọn trộn 1 dòng bài #45, anh giúp em với bảng chèn là dòng 8 và dữ liệu trộn là ô dòng 9.
Xem thế nào ạ? e chọn trộn 1 dòng không thấy báo trộn, còn chọn trộn hàng loạt thì mới được.
Đã nhờ lấy cột A làm tên của file mà khi trộn thì cột A trống. Thế thì nó lấy niềm tin làm tên file à?
$$$$@
 
Lần chỉnh sửa cuối:
Upvote 0
Đã nhờ lấy cột A làm tên của file mà khi trộn thì cột A trống. Thế thì nó lấy niềm tin làm tên file à?
$$$$@

Đã nhờ lấy cột A làm tên của file mà khi trộn thì cột A trống. Thế thì nó lấy niềm tin làm tên file à?
$$$$@
Dạ! em có thử với trường hợp trộn 1 dòng và trộn hàng loạt.
Trộn hàng loạt thì ok, trộn một dòng thì dữ liệu chưa được lấy.
code bài #45 em sử dụng
 
Upvote 0
Dạ! em có thử với trường hợp trộn 1 dòng và trộn hàng loạt.
Trộn hàng loạt thì ok, trộn một dòng thì dữ liệu chưa được lấy.
code bài #45 em sử dụng
Xin lỗi bạn! Có 1 chỗ tôi lấy sai số dòng. Bạn xem lại file.
 

File đính kèm

  • MergeToMSWord_QuangMinhtb_2.xlsm
    24.1 KB · Đọc: 41
Upvote 0
Giả sử tên Folder là FileTron thì:
Ở dòng wDoc.SaveAs2 sPath .... gì đó, bạn nối thêm: wDoc.SaveAs2 sPath & "FileTron\"
Xin chào bạn!
Bạn cho tôi hỏi thay vì tạo thủ công một tên Folder là FileTron rồi sửa ở dòng wDoc.SaveAs2 sPath .... gì đó
Thì có cách nào đó để mỗi lần chạy code (Trộn một dòng) hoặc code (Trộn hàng loạt) thì sẽ tự động tạo ra một Folder và
những file word được tạo ra có vị trí nằm trong luôn Folder mới này. Folder mới được tự động tạo ra nằm ở trong Folder có chứa file Word mẫu ban đầu.
 
Upvote 0
Xin chào bạn!
Bạn cho tôi hỏi thay vì tạo thủ công một tên Folder là FileTron rồi sửa ở dòng wDoc.SaveAs2 sPath .... gì đó
Thì có cách nào đó để mỗi lần chạy code (Trộn một dòng) hoặc code (Trộn hàng loạt) thì sẽ tự động tạo ra một Folder và
những file word được tạo ra có vị trí nằm trong luôn Folder mới này. Folder mới được tự động tạo ra nằm ở trong Folder có chứa file Word mẫu ban đầu.
chấm (.) và ngóng
 
Upvote 0
Xin chào bạn!
Bạn cho tôi hỏi thay vì tạo thủ công một tên Folder là FileTron rồi sửa ở dòng wDoc.SaveAs2 sPath .... gì đó
Thì có cách nào đó để mỗi lần chạy code (Trộn một dòng) hoặc code (Trộn hàng loạt) thì sẽ tự động tạo ra một Folder và
những file word được tạo ra có vị trí nằm trong luôn Folder mới này. Folder mới được tự động tạo ra nằm ở trong Folder có chứa file Word mẫu ban đầu.
Chuẩn đó, với số lượng văn bản nhiều sẽ dể sắp xếp và quản lý khi làm vậy
 
Upvote 0
Xin chào bạn!
Bạn cho tôi hỏi thay vì tạo thủ công một tên Folder là FileTron rồi sửa ở dòng wDoc.SaveAs2 sPath .... gì đó
Thì có cách nào đó để mỗi lần chạy code (Trộn một dòng) hoặc code (Trộn hàng loạt) thì sẽ tự động tạo ra một Folder và
những file word được tạo ra có vị trí nằm trong luôn Folder mới này. Folder mới được tự động tạo ra nằm ở trong Folder có chứa file Word mẫu ban đầu.
Việc này dễ hơn ăn cháo mà. Bạn đã nghe nói đến FileSystemObject (fso) chưa? Việc này không cần tôi làm. Chỉ cần search fso là ai cũng có thể biết và tự làm
 
Upvote 0
Việc này dễ hơn ăn cháo mà. Bạn đã nghe nói đến FileSystemObject (fso) chưa? Việc này không cần tôi làm. Chỉ cần search fso là ai cũng có thể biết và tự làm
Với những người biết thì dễ nhưng như tôi chưa biết về ngôn ngữ lập trình excel thì khó và chưa biết làm.
Nên nhờ và mong muốn bạn và các bạn trên diễn đàn giúp. Thanks bạn!
 
Upvote 0
Với những người biết thì dễ nhưng như tôi chưa biết về ngôn ngữ lập trình excel thì khó và chưa biết làm.
Nên nhờ và mong muốn bạn và các bạn trên diễn đàn giúp. Thanks bạn!
Chỉ cần 2 dòng lệnh của fso (100% ai tìm cũng thấy hướng dẫn fso bằng tiếng Việt và 99% ai đọc bài viết hướng dẫn fso cũng biết cách gõ) và 1 dấu nối thêm vào đường dẫn hiện hành (việc này khó tương đương hiểu công thức vlookup của Excel.) Vậy theo bạn là có làm được không?
 
Upvote 0
Chỉ cần 2 dòng lệnh của fso (100% ai tìm cũng thấy hướng dẫn fso bằng tiếng Việt và 99% ai đọc bài viết hướng dẫn fso cũng biết cách gõ) và 1 dấu nối thêm vào đường dẫn hiện hành (việc này khó tương đương hiểu công thức vlookup của Excel.) Vậy theo bạn là có làm được không?
Hiện tại mình chưa làm được, nên nhờ bạn giúp.
 
Upvote 0
Web KT
Back
Top Bottom