[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) (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
4,764
Được thích
5,740
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:
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: 23
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
Việc của bạn không phải là trộn nữa rồi, mà là ghi 1 bảng bên Excel vào 1 bảng bên Word giữ nguyên định dạng bảng Word. Việc này phải viết code riêng, không dùng chung với code bài #1 được.

Mà phải có file thiết kế cho chuẩn theo ý của bạn đi rồi mới viết được.
 
Upvote 0
Mình dùng file này mình thiết kế riêng theo ý mình đc k ạh. Do của mình dữ liệu nhập vào nhiều. Số lưongj file word cũng nhìu ạh. Mình cũng đã thử mà thấy đang lỗi diền thông tin ạh
 
Upvote 0
Mình dùng file này mình thiết kế riêng theo ý mình đc k ạh. Do của mình dữ liệu nhập vào nhiều. Số lưongj file word cũng nhìu ạh. Mình cũng đã thử mà thấy đang lỗi diền thông tin ạh
Bạn muốn gì thì cố mà nói cho rành mạch. Tôi thấy cách nói của bạn rối mù, viết tắt và dùng từ kiểu chat chit. Nếu tiếp tục như vậy, với tôi là không được.
 
Upvote 0
Bạn muốn gì thì cố mà nói cho rành mạch. Tôi thấy cách nói của bạn rối mù, viết tắt và dùng từ kiểu chat chit. Nếu tiếp tục như vậy, với tôi là không được.
Xin lỗi bạn Maika8008. Do mình lần đầu tham gia diễn đàn + không hiểu về VBA nên không biết cách dùng từ ạ. Khi đi làm mình đưa file mình lên nhờ bạn giúp ạ
 
Upvote 0
Việc của bạn không phải là trộn nữa rồi, mà là ghi 1 bảng bên Excel vào 1 bảng bên Word giữ nguyên định dạng bảng Word. Việc này phải viết code riêng, không dùng chung với code bài #1 được.

Mà phải có file thiết kế cho chuẩn theo ý của bạn đi rồi mới viết được.
anh ơi em có 2 file như thế này ạ. em muốn lấy dữ liệu ở file excel sang file word. anh có thể giúp em được không ạ.
Đây là dữ liệu file excel em muốn lấy dữ liệu sang

66.PNG
Đây là file word ạ

888.PNG
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh Maika8008 giúp em với ạ. Mình có file dữ liệu cần điền vào word nhiều như này. Có cách nào để không bị lỗi điền dữ liệu qua word k ạh. Em cảm ơn
 

File đính kèm

Upvote 0
Em làm được rồi ạ. Em cảm ơn anh nhiều ạ. Anh cho em hỏi thêm vấn đề này với ạ. file word phần bảng thể hiện dữ liệu lấy từ file excel sang phải cố định đúng không ạ? Nếu em muốn thay đổi vị trí bảng biểu này thì em sửa code trong excel phần nào ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Em làm được rồi ạ. Em cảm ơn anh nhiều ạ. Anh cho em hỏi thêm vấn đề này với ạ. file word phần bảng thể hiện dữ liệu lấy từ file excel sang phải cố định đúng không ạ? Nếu em muốn thay đổi vị trí bảng biểu này thì em sửa code trong excel phần nào ạ.
Bảng đó được gán là table số 1 của file tính từ trên xuống. Dời đi đâu cũng được nhưng nếu có 1 table khác bên trên thì phải gán là table(2)
 
Upvote 0
Mình đã thử hiện tại file rất tốt ạ. Cảm ơn bạn Maika8008 rất nhiều. Nhưng mình còn 1 vấn đề nữa là số khi trộn qua thì không đầy đủ ạ. Vd: số trong excel: 100.000 nhưng trộn qua word chỉ là 100 thôi ạ
 

File đính kèm

  • 16800575433631003562307271966890.jpg
    16800575433631003562307271966890.jpg
    83.7 KB · Đọc: 16
Upvote 0
Mình đã thử hiện tại file rất tốt ạ. Cảm ơn bạn Maika8008 rất nhiều. Nhưng mình còn 1 vấn đề nữa là số khi trộn qua thì không đầy đủ ạ. Vd: số trong excel: 100.000 nhưng trộn qua word chỉ là 100 thôi ạ
Xem lại thiết lập hệ thống dấu phân cách trên máy bạn đi.
Đây là kết quả trộn trên máy tôi: Control Panel đặt phân cách hàng ngàn: chấm, phân cách thập phân: phẩy. Option của Excel: định dạng theo hệ thống.
1680058158586.png
 
Lần chỉnh sửa cuối:
Upvote 0
Xem lại thiết lập hệ thống dấu phân cách trên máy bạn đi.
Đây là kết quả trộn trên máy tôi: Control Panel đặt phân cách hàng ngàn: chấm, phân cách thập phân: phẩy. Option của Excel: định dạng theo hệ thống.
View attachment 288167
Mình cũng đã thử nhưng số hàng triệu thì đúng nhưng số hàng trăm ngàn thì không đúng ạ
 
Upvote 0
Nhờ anh giúp em với ạ. Cũng file này, có cách nào khi mình chọn option 1, chọn 1 file ở thư mục bất kỳ, khi trộn xong sẽ lưu file là tên file chọn và lưu 1 thư mục mình muốn được không ạ
Với Option 1 thì sau khi có kết quả chỉ đơn giản là dùng tay chép file kết quả sang chỗ mong muốn. Chuyện đơn giản như thế mà phải viết riêng cho yêu cầu của bạn thì tôi không muốn làm.
 
Upvote 0
Với Option 1 thì sau khi có kết quả chỉ đơn giản là dùng tay chép file kết quả sang chỗ mong muốn. Chuyện đơn giản như thế mà phải viết riêng cho yêu cầu của bạn thì tôi không muốn làm.
Anh giúp em giúp cho trót với ạ. Do em không biết gì VBA nên không biết viết như thế nào mặc dù biết với anh là dễ ạ. Hiện tại là tên file word lưu là tên file trộn ạ.
 
Upvote 0
Với Option 1 thì sau khi có kết quả chỉ đơn giản là dùng tay chép file kết quả sang chỗ mong muốn. Chuyện đơn giản như thế mà phải viết riêng cho yêu cầu của bạn thì tôi không muốn làm.
Giúp em chỉnh code đoạn lưu file là tên file trộn mình chọn và lưu tại thư mục như của option 3 được không ạ. Nhờ anh giúp em với. Em cảm ơ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.
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.
Em đang gặp khó chỗ này lại tìm thấy đúng bài này, Cảm ơn Chủ Topic rất nhiều ạ
 
Upvote 0
Ang ơi có cách nào mà mình chèn 1 cái bản biểu bên excel or 1 vùng dữ liệu qua đc word được không nhi, có thể cái bản đó mình đã đặt tên cố định rồi, hoặc đại loại mình phải chọn vị trí bản, từ ô này đến ô kia, gán ị trí đó vào word như các trường khác được không anh
 
Lần chỉnh sửa cuối:
Upvote 0
Ang ơi có cách nào mà mình chèn 1 cái bản biểu bên excel or 1 vùng dữ liệu qua đc word được không nhi, có thể cái bản đó mình đã đặt tên cố định rồi, hoặc đại loại mình phải chọn vị trí bản, từ ô này đến ô kia, gán ị trí đó vào word như các trường khác được không anh
Việc đó là dễ nhưng phải làm riêng, không viết chung trong code bài này được
 
Upvote 0
Việc đó là dễ nhưng phải làm riêng, không viết chung trong code bài này được
Vâng anh nhưng làm riêng vậy chỉ chạy đc phần đó thôi hay sao ak, không kết hợp cùng một lúc đc hả anh,
Bài đã được tự động gộp:

Việc đó là dễ nhưng phải làm riêng, không viết chung trong code bài này được
Nếu anh có thời gian giúp anh em ko ak, còn phần chương trình kia với em là quá tuyệt rồi, e chỉ còn xử lý cách chèn thông tin của bản nữa là ổn, vì tạo 1 bản trcs bên word rồi chèn vào cũng đc nhưng dữ liệu có thể thay đổi nhiều dòng hơn or ít dòng hơn, do đó em thấy dùng kiểu table của excel thấy cũng tiện. Mong anh giúp đỡ
 
Upvote 0
Vâng anh nhưng làm riêng vậy chỉ chạy đc phần đó thôi hay sao ak, không kết hợp cùng một lúc đc hả anh,
Bài đã được tự động gộp:


Nếu anh có thời gian giúp anh em ko ak, còn phần chương trình kia với em là quá tuyệt rồi, e chỉ còn xử lý cách chèn thông tin của bản nữa là ổn, vì tạo 1 bản trcs bên word rồi chèn vào cũng đc nhưng dữ liệu có thể thay đổi nhiều dòng hơn or ít dòng hơn, do đó em thấy dùng kiểu table của excel thấy cũng tiện. Mong anh giúp đỡ
Thôi được! Bạn gửi file Excel đang chạy và file Word mẫu của bạn lên đây tôi xem thử.
 
Upvote 0

File đính kèm

Upvote 0
Tôi chưa xem nhưng hỏi trước: bạn trộn dạng nào vậy? Một file Word trộn nhiều dòng khác nhau?
 
Upvote 0
HIện tại thì minhg chỉ trộn 1 dòng cho nhiều file word
Tôi chưa biết bạn muốn lấy thông tin từ Table "BanVL" vào file Word như thế nào vì Table chỉ có 3 cột trong khi bảng Word có đến 4 cột (chưa kể cột số thứ tự). Do vậy, tôi tạm thời xóa bớt 2 cột của bảng Word để chạy code cho bạn thấy trước đã. Từ từ tính tiếp.

Về cái bảng Word thì trong file mẫu bảng đó chỉ cần 2 dòng thôi: 1 dòng tiêu đề và 1 dòng trắng. Khi thực thi, code sẽ chèn thêm dòng tùy thuộc vào số dòng của Table "BanVL" của Excel.

Chạy code ChenTableVaoWord trong file Excel rồi xem kết quả tại file Word. (Lưu ý: Không nên đặt tên tiếng Việt có dấu cho file Word mẫu vì khó xử lý khi viết code)
 

File đính kèm

Upvote 0
Tôi chưa biết bạn muốn lấy thông tin từ Table "BanVL" vào file Word như thế nào vì Table chỉ có 3 cột trong khi bảng Word có đến 4 cột (chưa kể cột số thứ tự). Do vậy, tôi tạm thời xóa bớt 2 cột của bảng Word để chạy code cho bạn thấy trước đã. Từ từ tính tiếp.

Về cái bảng Word thì trong file mẫu bảng đó chỉ cần 2 dòng thôi: 1 dòng tiêu đề và 1 dòng trắng. Khi thực thi, code sẽ chèn thêm dòng tùy thuộc vào số dòng của Table "BanVL" của Excel.

Chạy code ChenTableVaoWord trong file Excel rồi xem kết quả tại file Word. (Lưu ý: Không nên đặt tên tiếng Việt có dấu cho file Word mẫu vì khó xử lý khi viết code)
Cam on bac để em chạy thử như thế nào
 
Upvote 0
Tôi chưa biết bạn muốn lấy thông tin từ Table "BanVL" vào file Word như thế nào vì Table chỉ có 3 cột trong khi bảng Word có đến 4 cột (chưa kể cột số thứ tự). Do vậy, tôi tạm thời xóa bớt 2 cột của bảng Word để chạy code cho bạn thấy trước đã. Từ từ tính tiếp.

Về cái bảng Word thì trong file mẫu bảng đó chỉ cần 2 dòng thôi: 1 dòng tiêu đề và 1 dòng trắng. Khi thực thi, code sẽ chèn thêm dòng tùy thuộc vào số dòng của Table "BanVL" của Excel.

Chạy code ChenTableVaoWord trong file Excel rồi xem kết quả tại file Word. (Lưu ý: Không nên đặt tên tiếng Việt có dấu cho file Word mẫu vì khó xử lý khi viết code)
Chèn được như vậy là ok rồi anh ơi. Vì do làm em chọn option là chèn 1 dòng cho nh văn bản ( để code nó tạo ra thư mục riêng) nên thường sẽ quét hết các file word or nh hơn 1 file. Nên anh tuỳ biến giúp em để ko cố định tên file nha or vị trí file gốc nha.
 
Upvote 0
Anh xem giúp cách để đưa cái table từ excel chèn
Anh xem giúp cách để đưa cái table từ excel chèn vào word giúp em
chào anh. em xin file excell nghiệm thu đầy đủ biên bản của anh tham khảo với ạ

Chèn được như vậy là ok rồi anh ơi. Vì do làm em chọn option là chèn 1 dòng cho nh văn bản ( để code nó tạo ra thư mục riêng) nên thường sẽ quét hết các file word or nh hơn 1 file. Nên anh tuỳ biến giúp em để ko cố định tên file nha or vị trí file gốc nha.
em chào bác... bác có thể cho em xin file nghiệm thu đầy đủ các biên bản ở như ở sheet " data" của các để tham khảo được không ạ
 
Upvote 0
Chèn được như vậy là ok rồi anh ơi. Vì do làm em chọn option là chèn 1 dòng cho nh văn bản ( để code nó tạo ra thư mục riêng) nên thường sẽ quét hết các file word or nh hơn 1 file. Nên anh tuỳ biến giúp em để ko cố định tên file nha or vị trí file gốc nha.
Tôi đã chêm lệnh copy bảng vào trong code trộn 1 dòng 1 văn bản và code trộn 1 dòng nhiều văn bản. Nếu muốn sửa code để đồng bộ cái bảng Word với dữ liệu trong Table "BanVL" thì từ từ tính tiếp.

Lưu ý: code chỉ định cứng là copy vào bảng thứ 2 của file Word mẫu (Set oTbl = Wdoc.Tables(2)). Nếu không có bảng 2 thì sẽ có lỗi. Nếu bảng 2 là bảng gì đó khác thì sẽ có kết quả không mong muốn.
Muốn chỉ định linh hoạt thì phải dùng cách khác.
 

File đính kèm

Upvote 0
Tôi đã chêm lệnh copy bảng vào trong code trộn 1 dòng 1 văn bản và code trộn 1 dòng nhiều văn bản. Nếu muốn sửa code để đồng bộ cái bảng Word với dữ liệu trong Table "BanVL" thì từ từ tính tiếp.

Lưu ý: code chỉ định cứng là copy vào bảng thứ 2 của file Word mẫu (Set oTbl = Wdoc.Tables(2)). Nếu không có bảng 2 thì sẽ có lỗi. Nếu bảng 2 là bảng gì đó khác thì sẽ có kết quả không mong muốn.
Muốn chỉ định linh hoạt thì phải dùng cách khác.
Cảm ơn anh rất nhiều
Bài đã được tự động gộp:

Tôi đã chêm lệnh copy bảng vào trong code trộn 1 dòng 1 văn bản và code trộn 1 dòng nhiều văn bản. Nếu muốn sửa code để đồng bộ cái bảng Word với dữ liệu trong Table "BanVL" thì từ từ tính tiếp.

Lưu ý: code chỉ định cứng là copy vào bảng thứ 2 của file Word mẫu (Set oTbl = Wdoc.Tables(2)). Nếu không có bảng 2 thì sẽ có lỗi. Nếu bảng 2 là bảng gì đó khác thì sẽ có kết quả không mong muốn.
Muốn chỉ định linh hoạt thì phải dùng cách khác.
Mà anh ơi sao copy bản qua word làm sao để cố định font cho bản là font theo file word vậy anh( times new roma)
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh rất nhiều
Bài đã được tự động gộp:


Mà anh ơi sao copy bản qua word làm sao để cố định font cho bản là font theo file word vậy anh( times new roma)
Bạn sửa Style Normal của file Word mẫu theo ý muốn đi. Bấm công cụ Normal trong nhóm Style rồi Modified. Sửa xong chọn AutoUpdate và Apply to New Document trước khi lưu.

Sau đó áp dụng style Normal cho bảng.
.
 
Upvote 0
Tôi đã chêm lệnh copy bảng vào trong code trộn 1 dòng 1 văn bản và code trộn 1 dòng nhiều văn bản. Nếu muốn sửa code để đồng bộ cái bảng Word với dữ liệu trong Table "BanVL" thì từ từ tính tiếp.

Lưu ý: code chỉ định cứng là copy vào bảng thứ 2 của file Word mẫu (Set oTbl = Wdoc.Tables(2)). Nếu không có bảng 2 thì sẽ có lỗi. Nếu bảng 2 là bảng gì đó khác thì sẽ có kết quả không mong muốn.
Muốn chỉ định linh hoạt thì phải dùng cách khác.
anh vậy file này là cố định có 1 Table trong excel và sẽ chèn qua tất cả file word có table là 2, nếu file excel của mình có nhiều table và chèn vào các file khác nhau khôn g đc hả anh, ví dụ Có 3 bản BanVL, BanVL1, BanVL2, chèn vào cho 3 file word khác nhau thì không đc nhỉ, vì code hiểu lầm giữa các file đều có bản 2 or số bản do mình chèn.
 
Upvote 0
anh vậy file này là cố định có 1 Table trong excel và sẽ chèn qua tất cả file word có table là 2, nếu file excel của mình có nhiều table và chèn vào các file khác nhau khôn g đc hả anh, ví dụ Có 3 bản BanVL, BanVL1, BanVL2, chèn vào cho 3 file word khác nhau thì không đc nhỉ, vì code hiểu lầm giữa các file đều có bản 2 or số bản do mình chèn.
Như vậy là thuộc diện cao cấp rồi bạn.
 
Upvote 0
anh ơi làm sao để khi mình mở thư mục chọn file để chèn nó bung ra cái thư mục chứa cái file merge luôn anh nhi
 
Upvote 0
Không hiểu ý bạn. Không bung thì làm sao bạn thấy thư mục con để chọn?
Ý là em muốn cái file merge ở đâu thì khi bấm để mở thư mục chọn file cần merge ấy anh thì nó mở cái thư mục chứ cái file merge ấy đó, ví dụ file merge để ổ D thì khi chọn option thì mở ổ D đầu tiên rồi chọn thư mục con tiếp theo thì chọn
 
Upvote 0
Ý là em muốn cái file merge ở đâu thì khi bấm để mở thư mục chọn file cần merge ấy anh thì nó mở cái thư mục chứ cái file merge ấy đó, ví dụ file merge để ổ D thì khi chọn option thì mở ổ D đầu tiên rồi chọn thư mục con tiếp theo thì chọn
Có ô A1 để nhập đường dẫn mặc định đó
 
Upvote 0
Em mới tải file mới nhất ở bài 1 về. Sao không được nhỉ, em nhập chổ ô H2 là D:\ nhưng khi hộp thoại chọn file chỉ ra ổ C.
- Một là: đường dẫn sai qui cách so với yêu cầu của ứng dụng thì nó sẽ sai và ra mặc định ổ C:\
- Trong code bác Maika8008 có dùng hàm ChDir() để đổi thư mục mặc định nhưng khi đổi sang ổ đĩa khác thì phải dùng thêm hàm ChDrive() thì mới được.
Ví dụ:
Mã:
ChDir "D:\Temp"
ChDrive "D"
 
Lần chỉnh sửa cuối:
Upvote 0
Em mới tải file mới nhất ở bài 1 về. Sao không được nhỉ, em nhập chổ ô H2 là D:\ nhưng khi hộp thoại chọn file chỉ ra ổ C.
Bạn thêm lệnh như bài #371 nhé. Tôi sẽ cập nhật bài #1.
- Một là: đường dẫn sai qui cách so với yêu cầu của ứng dụng thì nó sẽ sai và ra mặc định ổ C:\
- Trong code bác Maika8008 có dùng hàm ChDir() để đổi thư mục mặc định nhưng khi đổi sang ổ đĩa khác thì phải dùng thêm hàm ChDrive() thì mới được.
Ví dụ:
Mã:
ChDir "D:\Temp"
ChDrive "D"
Thế mà lâu nay tôi không nhận ra sự việc đó. Cảm ơn bạn nhiều.
 
Upvote 0
Bạn thêm lệnh như bài #371 nhé. Tôi sẽ cập nhật bài #1.

Thế mà lâu nay tôi không nhận ra sự việc đó. Cảm ơn bạn nhiều.
- Một là: đường dẫn sai qui cách so với yêu cầu của ứng dụng thì nó sẽ sai và ra mặc định ổ C:\
- Trong code bác Maika8008 có dùng hàm ChDir() để đổi thư mục mặc định nhưng khi đổi sang ổ đĩa khác thì phải dùng thêm hàm ChDrive() thì mới được.
Ví dụ:
Mã:
ChDir "D:\Temp"
ChDrive "D"
Vâng, cảm ơn các bác mình làm được rồi.
 
Upvote 0
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?
Pm này chạy file nào ra file đó mà,
Bài đã được tự động gộp:

Chương trình này mà có thêm tùy chọn chèn rồi gom các file đã chèn thành 1 file duy nhất để in cho nhanh thi ngon nhi.
 
Lần chỉnh sửa cuối:
Upvote 0
Làm ngay từ đầu cho tất cả vào trong 1 file chứ chèn, lưu, rồi gom chi cho tốn thời gian :rolleyes::{{
Ak, có lý do bác ơi, ví dụ như 1 công trình có 10 cái biên bản nhưng tùy vào thể loại công trình mà không sử dụng hết những biên bản đó, minh chỉ chọn nhưng mẫu cần xuất, xuất xong gom lại 1 file in cho nhanh ấy mà.
 
Upvote 0
Cứ sửa theo mong muốn tất cả người dùng thì chắc lại thành đẽo cày giữa đường.
 
Upvote 0
Cảm ơn anh Maika8008 rất nhiều. Nhờ anh mà em đã hoàn thiện công việc hàng ngày của em. Anh có thể tích hợp được code trộn bảng vào code trộn thông thường thì tuyệt vời ạ. File word nào cần trộn bảng thì trộn, file nào không cần trộn bảng thì không được không ạ
 
Upvote 0
Tích hợp được vào file của anh được không ạ. Vừa trộn thông tin vừa trộn table ạ
Trong video, tác giả đã giả định rằng có 1 dữ liệu và được trộn kiểu như vậy và xử lý theo giả định đó. Người dùng không có lựa chọn khác phù hợp với kiểu dữ liệu của mình.

Giờ tôi tích hợp vào thì làm kiểu gì rồi cũng sẽ không phù hợp với nhu cầu của từng người được. Khi đó lại thêm rắc rối cho tôi chứ chẳng ích lợi gì. Tôi đơn cử 1 trường hợp ở trang 18 của chủ đề này, tôi phải viết riêng cho thành viên ngochienbmt đấy. Bạn thấy có tự sửa code để dùng cho mình được không, hay nếu tích hợp chung thì làm thế nào để mỗi người đều tự áp dụng được cho nhu cầu riêng?
 
Upvote 0
Trong video, tác giả đã giả định rằng có 1 dữ liệu và được trộn kiểu như vậy và xử lý theo giả định đó. Người dùng không có lựa chọn khác phù hợp với kiểu dữ liệu của mình.

Giờ tôi tích hợp vào thì làm kiểu gì rồi cũng sẽ không phù hợp với nhu cầu của từng người được. Khi đó lại thêm rắc rối cho tôi chứ chẳng ích lợi gì. Tôi đơn cử 1 trường hợp ở trang 18 của chủ đề này, tôi phải viết riêng cho thành viên ngochienbmt đấy. Bạn thấy có tự sửa code để dùng cho mình được không, hay nếu tích hợp chung thì làm thế nào để mỗi người đều tự áp dụng được cho nhu cầu riêng?
https://blog.hocexcel.online/cach-sao-chep-va-dan-nhieu-bang-tinh-excel-vao-word-thong-qua-vba.html Mình có tham khảo qua bài đó nhưng vẫn chưa biết cách áp dụng chung. Ý mình là sẽ có các cột table riêng. Ở các cột table thì sẽ có tên các table trong file muốn trộn. Ví dụ: trong file excel có 3 table muốn trộn là 1,2,3. Trong cột table sẽ là: table.1, table.2, table.3. Để khi người dùng muốn trộn bảng nào thì chỉ cần khi tên table vào cột đó là được. Theo mình là vậy mà không biết cách thực hiện như thế nào ạ. Mình có tham khảo qua bài này thấy cũng gần giống mà không biết cách thực hiện
 
Upvote 0
Vậy nên mới bó tay ạ.
Rảnh tôi sẽ ghép code chép bảng theo nhu cầu của bạn.
Tất cả các bảng được bố trí trong 1 sheet có tên là Table. Ở 1 ô liền kề trên đầu mỗi bảng có ghi tên bảng. Tên đó đồng thời ghi trong cột Table của bảng trộn như bạn nói ở bài #386. Tìm đúng tên bảng thì chép nguyên bảng vào Word, chỗ có chữ $table$.
 
Upvote 0
Rảnh tôi sẽ ghép code chép bảng theo nhu cầu của bạn.
Tất cả các bảng được bố trí trong 1 sheet có tên là Table. Ở 1 ô liền kề trên đầu mỗi bảng có ghi tên bảng. Tên đó đồng thời ghi trong cột Table của bảng trộn như bạn nói ở bài #386. Tìm đúng tên bảng thì chép nguyên bảng vào Word, chỗ có chữ $table$.
Được vậy thì quá tuyệt vời ạ. Em cảm ơn anh nhiều ạ
 
Upvote 0
Cảm ơn anh rất nhiều. Hiện tại thì quá tuyệt vời ạ. Em có 1 thắc mắc là em muốn thêm các cột table khác ngoài cột table hiện tại nữa được không ạ
Chưa hiểu bạn muốn thể để làm gì? Để chèn nhiều table vào 1 file docx hả?
 
Upvote 0

File đính kèm

Upvote 0

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

Back
Top Bottom