[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) (2 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:
Xưa có xài, nhưng vẫn lâu lâu bị lỗi format, phải xài kèm thêm hàm FIXED, giờ tham khảo thêm được cái code GetFormat của bác!
Cám ơn bác đã share!
 
Upvote 0
Vui quá, tìm cái này hoài một thời gian, cảm ơn bạn đã chia sẻ
 
Upvote 0
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.
Nhiều người không thích thế. Vả lại đây chỉ là mẫu đơn giản, nếu như có 1 bộ văn bản như tôi nói thì không thể để ở Excel được vì quá bừa bộn. Lúc ấy cái này mới phát huy tác dụng.
 
Upvote 0
Soạn một văn bản (hợp đồng) cỡ 10 trang A4 trên Excel hoàn toàn đẹp, nét như trong phim bình thường mà. :)
Cần một số thủ thuật nữa để chúng khỏi vượt tầm kiểm soát khi in ấn nữa nên coi vậy chứ hơi rối rắm. Tự động giãn dòng là 1 ví dụ, nếu không, chữ mới chèn vào sẽ bị lấp mất.
 
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 file Word mẫu tại ô E1 , tên file Word mẫu tại ô E2 của file Excel.
- 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.

Maika8008 bổ sung thêm tính năng in sang Word 1 dòng được chọn bên Excel (thay vì in hết tất cả các dòng).

 
Upvote 0
Cập nhật:
- Chọn 1 dòng trong dữ liệu để trộn.
- Có thể đặt nhiều bảng trong sheet hiện hành, mỗi bảng trộn cho 1 file Word (tất nhiên khi đổi thì phải thay tên file tại E2 hoặc bạn có thể sửa code để đặt tên file ở ô khác, tránh nhầm lẫn khi dùng nhiều file).
- Tên trường để chèn vào Word là tên trường tại bảng có ô hiện hành.
 

File đính kèm

Upvote 0
Mấy em test nó báo vậy rồi treo luôn anh ơi!
Bài đã được tự động gộp:

Chạy em hay bị lỗi 2 dong này!
 

File đính kèm

  • LOI MERGER EXCEL TO WORD.jpg
    LOI MERGER EXCEL TO WORD.jpg
    24.3 KB · Đọc: 117
  • Break.jpg
    Break.jpg
    67.1 KB · Đọc: 117
Upvote 0
Mấy em test nó báo vậy rồi treo luôn anh ơi!
Chạy em hay bị lỗi 2 dong này!

@babyheomoi
Bạn sai gì không biết nhưng nó báo lỗi đường dẫn và tên file thì phải nghĩ là nhập sai 2 thông tin đó.

Còn khi đã sai mà ngừng code nửa chừng là không thoát được Word.Application, lỗi còn nặng hơn. Khởi động lại máy tính mới hết lỗi.
Bài đã được tự động gộp:

Tôi thấy cái này của @huuthang_bd rất hay và tốc độ chạy thấy rất nhanh, nhưng hình như tác giả không chia sẻ.
Tôi đoán vẫn là mail merge nhưng dùng vba để đơn giản khâu chèn trường
 
Lần chỉnh sửa cuối:
Upvote 0
Mấy em test nó báo vậy rồi treo luôn anh ơi!
Chạy em hay bị lỗi 2 dong này!

@babyheomoi
Bạn sai gì không biết nhưng nó báo lỗi đường dẫn và tên file thì phải nghĩ là nhập sai 2 thông tin đó.

Còn khi đã sai mà ngừng code nửa chừng là không thoát được Word.Application, lỗi còn nặng hơn. Khởi động lại máy tính mới hết lỗi.
Bài đã được tự động gộp:


Tôi đoán vẫn là mail merge nhưng dùng vba để đơn giản khâu chèn trường
Tôi thì thấy anh ấy dùng BookMark sau đó thay thế BookMark bằng Text trong danh sách, chạy rất mượt.
 
Upvote 0
Tôi thì thấy anh ấy dùng BookMark sau đó thay thế BookMark bằng Text trong danh sách, chạy rất mượt.
À, trên di động tôi không xem rõ. Nhưng tôi nghĩ do anh ấy chạy ngay từ Word nên không vấn đề gì chứ với trường hợp của tôi là chạy trên Excel nên đầu tiên phải tạo Word.Application -> mở Word Doc -> đóng Word Doc nên chiếm hầu hết thời gian rồi.
 
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 file Word mẫu tại ô E1 , tên file Word mẫu tại ô E2 của file Excel.
- 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.
Anh cho em hỏi, có thể áp dụng cho nhiều file word được không?
Cụ thể em có 5 biên biển các loại, em muốn tách ra 5file word để cho dễ quản lý và theo dõi chứ không để vào chung một file word thì có thể áp dụng được không ạ?
Em xin cảm ơn!
 
Upvote 0
Anh cho em hỏi, có thể áp dụng cho nhiều file word được không?
Cụ thể em có 5 biên biển các loại, em muốn tách ra 5file word để cho dễ quản lý và theo dõi chứ không để vào chung một file word thì có thể áp dụng được không ạ?
Em xin cảm ơn!
Bạn dùng file và lưu ý hướng dẫn ở bài #11.
 
Upvote 0
Bạn dùng file và lưu ý hướng dẫn ở bài #11.
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?
 
Upvote 1
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?
Có 2 nút trộn toàn bộ và trộn 1 dòng đó, tùy bạn chọn. Nút nào cũng dùng cái bảng hiện hành để trộn nhưng khác là kết quả ra 1 hay là tất cả dòng trong bảng
 
Upvote 0
Có 2 nút trộn toàn bộ và trộn 1 dòng đó, tùy bạn chọn. Nút nào cũng dùng cái bảng hiện hành để trộn nhưng khác là kết quả ra 1 hay là tất cả dòng trong bảng
Anh cho em hỏi "nhiều bảng trong sheet hiện hành" là nhiều dữ liệu trộn (nhiều dòng trộn) trong một sheet?
 
Upvote 0
Vâng em cảm ơn anh đã hướng dẫn!
Hiện giờ, nếu chạy trộn toàn bộ thì nó sẽ trộn bảng đầu tiên đang có đó. Chạy 1 dòng thì sẽ cho chọn dòng nào của bảng đó (và nếu có bảng khác thì sẽ lấy bảng có ô chọn đó)

Tôi sẽ sửa lại thành cả 2 chức năng đều có chức năng chọn bảng.

Cập nhật: file đã sửa lại
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hiện giờ, nếu chạy trộn toàn bộ thì nó sẽ trộn bảng đầu tiên đang có đó. Chạy 1 dòng thì sẽ cho chọn dòng nào của bảng đó (và nếu có bảng khác thì sẽ lấy bảng có ô chọn đó)

Tôi sẽ sửa lại thành cả 2 chức năng đều có chức năng chọn bảng.

Cập nhật: file đã sửa lại
Vâng, rất cảm ơn anh!
 
Upvote 0
Hiện giờ, nếu chạy trộn toàn bộ thì nó sẽ trộn bảng đầu tiên đang có đó. Chạy 1 dòng thì sẽ cho chọn dòng nào của bảng đó (và nếu có bảng khác thì sẽ lấy bảng có ô chọn đó)

Tôi sẽ sửa lại thành cả 2 chức năng đều có chức năng chọn bảng.

Cập nhật: file đã sửa lại
Anh ơi! em xin có ý kiến và mong anh giúp:
Anh có thể bổ sung giúp em cột A là tên biên bản mới được tạo ra được không ạ?
Cho dễ quản lý, thay vì lấy tên biên bản ở cột G.
Các loại biên bản do mình tự đặt và khi nhìn vào có thể biết được nó là loại biên bản gì.
Xin cảm ơn anh.
1111.png
 
Upvote 0
Anh ơi! em xin có ý kiến và mong anh giúp:
Anh có thể bổ sung giúp em cột A là tên biên bản mới được tạo ra được không ạ?
Cho dễ quản lý, thay vì lấy tên biên bản ở cột G.
Các loại biên bản do mình tự đặt và khi nhìn vào có thể biết được nó là loại biên bản gì.
Xin cảm ơn anh.
View attachment 260340
Nếu bạn chỉ chèn từ A4:A6 thì ít gây ra vấn đề gì (chỉ tên file tạo ra bị dời đi 1 cột) nhưng bạn chèn nguyên cả cột A thì địa chỉ lấy đường dẫn và tên file sai hết rồi vì sai cơ bản. Sau này nếu muốn tùy biến nhớ là điền thông tin từ cột sau cột cuối cùng để không xảy ra tình trạng bứt dây động rừng.
 

File đính kèm

Upvote 0
Nếu bạn chỉ chèn từ A4:A6 thì ít gây ra vấn đề gì (chỉ tên file tạo ra bị dời đi 1 cột) nhưng bạn chèn nguyên cả cột A thì địa chỉ lấy đường dẫn và tên file sai hết rồi vì sai cơ bản. Sau này nếu muốn tùy biến nhớ là điền thông tin từ cột sau cột cuối cùng để không xảy ra tình trạng bứt dây động rừng.
Em cảm ơn anh đã giúp!
 
Upvote 0
Nếu bạn chỉ chèn từ A4:A6 thì ít gây ra vấn đề gì (chỉ tên file tạo ra bị dời đi 1 cột) nhưng bạn chèn nguyên cả cột A thì địa chỉ lấy đường dẫn và tên file sai hết rồi vì sai cơ bản. Sau này nếu muốn tùy biến nhớ là điền thông tin từ cột sau cột cuối cùng để không xảy ra tình trạng bứt dây động rừng.
Vậy cột A như em đã nêu ở #27 nên chuyển về vị trí liền ngay sau cột cuối cùng thì tốt hơn ạ?
Em chèn thêm một bảng excel sử dụng file #28 anh giúp:
- Nếu để nguyên cột A sẽ chèn dữ liệu thiếu:
Chỉ chèn được $OK mà không có chèn $KKKKKK.
-
Nếu xóa cột A đi sẽ báo lỗi (Như hình)
Để quản lý các file mới được tạo ra, có thể di chuyển các file mới đó vào một Foder mới nằm trong Foder chứa file word đó được không anh?
Hy, lúc ứng dụng có nhiều vấn đề mà lúc đầu em chưa định hướng được, nên làm phiền anh.
l2.png
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy cột A như em đã nêu ở #27 nên chuyển về vị trí liền ngay sau cột cuối cùng thì tốt hơn ạ?
Em chèn thêm một bảng excel sử dụng file #28 anh giúp:
- Nếu để nguyên cột A sẽ chèn dữ liệu thiếu:
Chỉ chèn được $OK mà không có chèn $KKKKKK.
-
Nếu xóa cột A đi sẽ báo lỗi (Như hình)
Để quản lý các file mới được tạo ra, có thể di chuyển các file mới đó vào một Foder mới nằm trong Foder chứa file word đó được không anh?
Hy, lúc ứng dụng có nhiều vấn đề mà lúc đầu em chưa định hướng được, nên làm phiền anh.
View attachment 260366
Đưa file bạn lên đây đi!
 
Upvote 0
Đưa file bạn lên đây đi!
Em điền bảng dữ liệu hàng 8 trong excel vào file word "Cong van chap thuan.docx"
thì kết quá như hình.
Khi ấn hủy bỏ để thực hiện code trên giao diện thì luôn báo lỗi chứ không hủy bỏ được luôn (hình thứ 3)


Anh xem giúp em!

k0.png




k1.png

hb.png
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Đừng nói các chuyện lớn lao, việc đọc kỹ hướng dẫn sử dụng trước khi dùng mà chưa làm được thì tệ quá.
=> Trong công văn đã chèn cái trường nào đâu mà trộn? Cái này gọi là chưa đi đã chạy.
 
Upvote 0
Đừng nói các chuyện lớn lao, việc đọc kỹ hướng dẫn sử dụng trước khi dùng mà chưa làm được thì tệ quá.
=> Trong công văn đã chèn cái trường nào đâu mà trộn? Cái này gọi là chưa đi đã chạy.
Ý em là chỉ lấy được một trường $OK (Ô B8 từ excel sang Word) không có trường $KKKKKK được lấy sang.
Trường lấy sang bị thiếu không hiểu nguyên nhân, em chưa trộn anh ạ!
Anh xem file em đính kèm đó ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Dữ liệu phải bắt đầu từ cột A. Còn không thì bạn thay sub InsertField cũ bằng:
Rich (BB code):
Sub InsertField()
Dim WordApp As Object
Dim wDoc As Object
Dim i&, k&, rw&, Col&
Dim sPath$, sFile$
Dim Rng As Range

Set Rng = Application.InputBox("Chon 1 cell bat ky cua bang can chen truong sang Word", Type:=8)
rw = Rng.CurrentRegion.Cells(1).Row
Col = Rng.CurrentRegion.Cells(Rng.CurrentRegion.Cells.Count).Column
sPath = Trim(Range("F1"))
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sFile = Trim(Range("F2"))

Set WordApp = CreateObject("Word.Application")
Set wDoc = WordApp.Documents.Open(sPath & sFile)
WordApp.Visible = True

For k = 1 To Col
    wDoc.Range.InsertAfter Cells(rw, k) & vbCrLf
Next
WordApp.Activate
Set wDoc = Nothing
Set WordApp = Nothing
End Sub
P/S; File bạn gửi cho tôi bị lỗi gì đó rồi. Đừng dùng file đó nữa, tải lại file về dùng
 
Upvote 0
Dữ liệu phải bắt đầu từ cột A. Còn không thì bạn thay sub InsertField cũ băng:
Rich (BB code):
Sub InsertField()
Dim WordApp As Object
Dim wDoc As Object
Dim i&, k&, rw&, Col&
Dim sPath$, sFile$
Dim Rng As Range

Set Rng = Application.InputBox("Chon 1 cell bat ky cua bang can chen truong sang Word", Type:=8)
rw = Rng.CurrentRegion.Cells(1).Row
Col = Rng.CurrentRegion.Cells(Rng.CurrentRegion.Cells.Count).Column
sPath = Trim(Range("F1"))
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sFile = Trim(Range("F2"))

Set WordApp = CreateObject("Word.Application")
Set wDoc = WordApp.Documents.Open(sPath & sFile)
WordApp.Visible = True

For k = 1 To Col
    wDoc.Range.InsertAfter Cells(rw, k) & vbCrLf
Next
WordApp.Activate
Set wDoc = Nothing
Set WordApp = Nothing
End Sub
Vâng em cảm ơn anh,
Như được nhờ anh giúp ở #30: xin được anh giúp em để những file mới tạo ra trong quá trình trộn được nằm vào một Foder mới, Foder mới này nằm trong Foder của file Word và Foder này ở vị trí tương đương với vị trí của file Word đó được không ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng em cảm ơn anh, xin được anh giúp em để những file mới tạo ra trong quá trình trộn được nằm vào một Foder mới, Foder mới này nằm trong Foder của file Word và Foder này ở vị trí tương đương với vị trí của file Word đó được không ạ!
Giả sử tên Folder là FileTron thì:
Ở dòng wDoc.SaveAs2 sPath .... gì đó, bạn nối thêm: wDoc.SaveAs2 sPath & "FileTron\"
 
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\"
Anh xem giúp em em có làm sai ở quá trình nào không ạ? Em thấy dữ liệu không được trộn
Em vẫn sử dụng code #28 anh giúp.
 
Upvote 0
Chọn 1 ô chứ không chọn nguyên dòng
 
Upvote 0
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

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

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
Upvote 0
Gõ ra đây chứ. Mà không biết vba không đồng nghĩa với việc không biết nó nằm ở đâu, cửa sổ của nó như thế nào.
Mình tìm được code tạo folder nằm ở vị trí màn hình.
Vậy vào đâu để chỉnh sửa để mỗi khi nhấn trộn 1 dòng hay trộn toàn bộ dữ liệu thì folder được tạo ra luôn và folder nằm trong folder chứa file word mẫu ban đầu vậy bạn? và các file word mới sinh ra nằm luôn trong folder được tạo.
Mình chưa biết nên thấy nó không đơn giản.
Mong bạn chỉ giáo
Mã:
Sub createFolderExample1()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim currentPath As String
    Dim folderTest As String
  
    currentPath = Application.ActiveWorkbook.Path
    folderTest = currentPath & "C:\Users\Admin\Desktop\" & "Foder"
         ' create folder "test" if not exists
    If (Not fso.FolderExists(folderTest)) Then
        fso.CreateFolder (folderTest)
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Thử sửa code như thế này có đc ko :)
Mã:
Sub createFolderExample1()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim currentPath As String
    Dim folderTest As String
 
    currentPath = Application.ActiveWorkbook.Path
    folderTest = currentPath & "\Foder"
         ' create folder "test" if not exists
    If (Not fso.FolderExists(folderTest)) Then
        fso.CreateFolder (folderTest)
    End If
End Sub
 
Upvote 0
Thử sửa code như thế này có đc ko :)
Mã:
Sub createFolderExample1()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim currentPath As String
    Dim folderTest As String
 
    currentPath = Application.ActiveWorkbook.Path
    folderTest = currentPath & "\Foder"
         ' create folder "test" if not exists
    If (Not fso.FolderExists(folderTest)) Then
        fso.CreateFolder (folderTest)
    End If
End Sub
Cám ơn bạn! Xin được hỏi:
Gắn code vào vị trí nào trong file sau để khi nhấn (Trộn hàng loạt) hoặc (Trộn 1 dòng) thì folder được tạo ra luôn và folder nằm trong folder chứa file word mẫu ban đầu vậy bạn? và các file word mới sinh ra nằm luôn trong folder được tạo.
Đoạn code trong file :
Mã:
Option Explicit

Sub InsertField()
Dim WordApp As Object
Dim wDoc As Object
Dim i&, k&, rw&, Col&
Dim sPath$, sFile$
Dim Rng As Range

On Error GoTo Thoat
Set Rng = Application.InputBox("Chon 1 cell bat ky cua bang can chen truong sang Word", Type:=8)
rw = Rng.CurrentRegion.Cells(1).Row
Col = Rng.CurrentRegion.Cells(Rng.CurrentRegion.Cells.Count).Column
sPath = Trim(Range("F1"))
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sFile = Trim(Range("F2"))
On Error GoTo Ve
Set WordApp = CreateObject("Word.Application")
Set wDoc = WordApp.Documents.Open(sPath & sFile)
WordApp.Visible = True

For k = 1 To Col
    wDoc.Range.InsertAfter Cells(rw, k) & vbCrLf
Next
Ve:
WordApp.Activate
Set wDoc = Nothing
Set WordApp = Nothing
Thoat:
End Sub

Sub MergeByVBA()
Dim WordApp As Object
Dim wDoc As Object, wDoc2 As Object
Dim i&, k&, rw&, rw2&, Col&, arrD, arrF
Dim sPath$, sFile$
Dim Rng As Range

On Error GoTo Thoat
Set Rng = Application.InputBox("Chon 1 cell bat ky cua bang can tron sang Word", Type:=8)
rw2 = Rng.CurrentRegion.Cells(1).Row
If rw2 < 4 Then MsgBox "Chua chon du lieu merge!": Exit Sub
rw = rw2 + Rng.CurrentRegion.Rows.Count - 1

sPath = Trim(Sheet2.Range("F1"))
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sFile = Trim(Range("F2"))
Col = Range("A" & rw2).End(xlToRight).Column
arrD = Range("A" & rw2 + 1, Cells(rw, Col))
arrF = Range("A" & rw2, Cells(rw2, Col))
On Error GoTo Ve
Set WordApp = CreateObject("Word.Application")
For i = 1 To UBound(arrD)
    Set wDoc = WordApp.Documents.Open(sPath & sFile)
    WordApp.Visible = False
    For k = 1 To Col
        With WordApp.Selection.Find
            .Text = arrF(1, k)
            .Replacement.Text = Format(Cells(i + rw2, k), GetFormat(Cells(i + rw2, k)))
        End With
        WordApp.Selection.Find.Execute Replace:=wdReplaceAll
    Next
    wDoc.SaveAs2 sPath & arrD(i, 1) & ".docx"
    wDoc.Close False
Next
Ve:
WordApp.Quit
Set wDoc = Nothing
Set WordApp = Nothing
MsgBox "Xong!"
Thoat:
End Sub

Sub MergeByVBA_One()
Dim WordApp As Object
Dim wDoc As Object, wDoc2 As Object
Dim k&, rw&, rw2&, Col&, arrF
Dim sPath$, sFile$
Dim Rng As Range

On Error GoTo Thoat
Set Rng = Application.InputBox("Chon 1 cell bat ky cua dong can tron sang Word", Type:=8)
sPath = Trim(Sheet2.Range("F1"))
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
sFile = Trim(Sheet2.Range("F2"))
rw2 = Rng.CurrentRegion.Cells(1).Row
rw = Rng.Row
Col = Rng.End(xlUp).End(xlToLeft).End(xlToRight).Column
arrF = Range("A" & Rng.End(xlUp).Row, Cells(rw2, Col)).Value
On Error GoTo Ve
Set WordApp = CreateObject("Word.Application")
Set wDoc = WordApp.Documents.Open(sPath & sFile)
WordApp.Visible = True
For k = 1 To Col
    With WordApp.Selection.Find
        .Text = arrF(1, k)
        .Replacement.Text = Format(Cells(rw, k), GetFormat(Cells(rw, k)))
    End With
    WordApp.Selection.Find.Execute Replace:=wdReplaceAll
Next
wDoc.SaveAs2 sPath & Cells(rw, 1) & ".docx"
Ve:
wDoc.Close False
WordApp.Quit
Set wDoc = Nothing
Set WordApp = Nothing
MsgBox "Xong!"
Thoat:
End Sub

Function GetFormat(iValue)
 Dim isNumber As Boolean
 Dim isDay As Boolean
 Dim numFormat As String
 Dim isTime As Boolean
 
    numFormat = iValue.NumberFormat
    isNumber = IsNumeric(iValue)
    isDay = IsDate(iValue)
   
    Select Case numFormat
        Case "General", "0", "0.0", "0.00", "#,##0", "#,##0.00", "h:mm", "hh:mm"
            If isNumber Then
                If numFormat = "#,##0.00" Then
                    GetFormat = "#,##0.00"
                ElseIf numFormat = "#,##0" Then
                    GetFormat = "#,##0"
                ElseIf numFormat = "h:mm" Or numFormat = "hh:mm" Then
                    GetFormat = "hh:mm"
                Else
                    GetFormat = "0"
                End If
            End If
        Case "Date", "dd-mm-yy", "m/d/yyyy"
            If isDay Then
                GetFormat = "dd/mm/yyyy"
            End If
        Case Else
            GetFormat = ""
    End Select

 End Function
 

File đính kèm

Upvote 0
@chothadiem
File đã thêm chức năng tạo filder mới chứa file kết quả + 2 file mẫu trộn
 

File đính kèm

Lần chỉnh sửa cuối:
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 file Word mẫu tại ô E1 , tên file Word mẫu tại ô E2 của file Excel.
- 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.
admin cho hỏi: có thể chèn hoặc trộn nguyên một bảng được đặt tên trong excel sang word được không vậy?
 
Upvote 0
Chèn như bạn nói là chèn thủ công à? hay cách nào bạn mà chèn được cả bảng.
Bạn có thể ví dụ cụ thể giúp mình được chứ?
Có 2 kiểu: Chép cả vùng dán sang Word hoặc ghi tuần tự từng cell qua bảng được tạo bên Word.

Mỗi nút bấm chạy mỗi kiểu.
 

File đính kèm

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 file Word mẫu tại ô E1 , tên file Word mẫu tại ô E2 của file Excel.
- 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
Anh cho em hỏi giả sử nội dung công việc có người 1 cviec, có người nhiều hơn 1 công việc thì sẽ xử lý như thế, nào ạ. Cảm ơn Anh :)
 
Upvote 0
Anh cho em hỏi giả sử nội dung công việc có người 1 cviec, có người nhiều hơn 1 công việc thì sẽ xử lý như thế, nào ạ. Cảm ơn Anh :)
Chuyện này phải đồng bộ giống như mail merge bạn à. Còn như muốn phá cách thì phải tính cách khác dựa trên việc xem xét cơ sở dữ liệu nguồn
 
Upvote 0
Anh Maika8008 giúp em dữ liệu chuyển từ cột để xuất sang Word với! Em đang làm mà không có kết quả.P1.png
 
Upvote 0
Anh Maika8008 giúp em dữ liệu chuyển từ cột để xuất sang Word với! Em đang làm mà không có kết quả.View attachment 268540
Cái chuyển sang dọc em làm OK rồi!
- Nhưng có một phát sinh là CMND có số 0 ở đầu bị mất khi chuyển sang Word và trường số không định dạng có thập phân khi sang word
- Và em có thêm tùy chọn Checkbox (Tích chọn vào các ô Nam hoặc Nữ) thì không biết làm
Anh Maika8008 hoặc anh nào biết cái này giúp em với!
 
Upvote 0
Cái chuyển sang dọc em làm OK rồi!
- Nhưng có một phát sinh là CMND có số 0 ở đầu bị mất khi chuyển sang Word và trường số không định dạng có thập phân khi sang word
- Và em có thêm tùy chọn Checkbox (Tích chọn vào các ô Nam hoặc Nữ) thì không biết làm
Anh Maika8008 hoặc anh nào biết cái này giúp em với!
Đê khắc phục nhanh thì bên Excel biến ô đó thành Text thêm dấu nháy trên (') trước số dó
 
Upvote 0
Cái chuyển sang dọc em làm OK rồi!
- Nhưng có một phát sinh là CMND có số 0 ở đầu bị mất khi chuyển sang Word và trường số không định dạng có thập phân khi sang word
- Và em có thêm tùy chọn Checkbox (Tích chọn vào các ô Nam hoặc Nữ) thì không biết làm
Anh Maika8008 hoặc anh nào biết cái này giúp em với!
Để tôi sửa lại tí. Không vấn đề gì.
 
Upvote 0
hi a @Maika8008 , anh xem dùm em lỗi định dạng ngày tháng. Ví dụ Excel thể hiện 11-May nhưng qua word thì lại chuyển về 5/11/2022. Em theo giải pháp thêm dấu phẩy nhỏ ' để chuyển về dạng text: '11/05/2022 nhưng qua Word: 11/5/2022. Anh xem dùm em sự cố này với nha ạ. Em xin cảm ơn.
 

File đính kèm

  • img1.png
    img1.png
    2.3 KB · Đọc: 9
  • img2.png
    img2.png
    8.1 KB · Đọc: 9
Upvote 0
hi a @Maika8008 , anh xem dùm em lỗi định dạng ngày tháng. Ví dụ Excel thể hiện 11-May nhưng qua word thì lại chuyển về 5/11/2022. Em theo giải pháp thêm dấu phẩy nhỏ ' để chuyển về dạng text: '11/05/2022 nhưng qua Word: 11/5/2022. Anh xem dùm em sự cố này với nha ạ. Em xin cảm ơn.
Bạn xem lại setting trong Control Panel máy bạn. Máy tôi đặt dd/MM/yyyy chạy không lỗi gì cả.

Bài đã được tự động gộp:

a ơi, có chuyển được định dạng số tiền sang file word được không? ví dụ: 1.200.200.200
Cũng thế, chuyển bình thường chứ có lỗi gì đâu.
 
Lần chỉnh sửa cuối:
Upvote 0
Anh maika 8008 có thể viết thêm chức năng xuất ra nhiều Foder và các foder được đặt theo họ tên và các file word cũng đặt theo họ tên và nằm trong các foder được đặt tên đó được không ạ. Thứ 2 anh có thể viết thêm phần điền dữ liệu nhiều file word mẫu cùng lúc không như chỉ điền được 1 mẫu anh à. E Cảm ơn anh nhiều ạ
 
Upvote 0
Anh maika 8008 có thể viết thêm chức năng xuất ra nhiều Foder và các foder được đặt theo họ tên và các file word cũng đặt theo họ tên và nằm trong các foder được đặt tên đó được không ạ. Thứ 2 anh có thể viết thêm phần điền dữ liệu nhiều file word mẫu cùng lúc không như chỉ điền được 1 mẫu anh à. E Cảm ơn anh nhiều ạ
Để tôi xem lại tính hợp lý của việc tạo folder thì mới viết. Còn điền nhiều mẫu theo ý bạn sao tôi chưa hiểu? Điền nhiều mẫu khác nhau tôi đã làm rồi đó, cứ xong hết mẫu này thì chuyển sang vùng khác chạy mẫu khác.
 
Upvote 0
Dạ tức là trong sub anh viết đó làm sao load nhiều file mẫu lên và điền thông tin. Vi dụ anh chọn ông Nguyễn Văn A. chay sub 1 lần sẽ ra nhiều file word đó anh. Anh cố gắng giúp em phần tạo foder với anh
 
Upvote 0
Dạ tức là trong sub anh viết đó làm sao load nhiều file mẫu lên và điền thông tin. Vi dụ anh chọn ông Nguyễn Văn A. chay sub 1 lần sẽ ra nhiều file word đó anh. Anh cố gắng giúp em phần tạo foder với anh
Bạn chuẩn bị dữ liệu, chuẩn bị file Word mẫu y như hướng dẫn ở bài #1, tôi sẽ viết.
 
Upvote 0
Bạn chuẩn bị dữ liệu, chuẩn bị file Word mẫu y như hướng dẫn ở bài #1, tôi sẽ viết.
Dạ em cảm ơn anh trước nhé. Khi nào ra bệnh viện e gửi dữ liệu anh nhé. Hay anh viết thêm trên file của anh cũng được anh à. Em chưa biết khi nào ra Viện đươc anh à
 
Upvote 0
Nhờ anh Maika và các anh chị guip em tao cac tên Foder khi Điền excel sang word như em gửi ạ
 

File đính kèm

Upvote 0

File đính kèm

Upvote 0
Vẫn là phức tạp. mục đích chính là làm nhanh và gọn nhất có thể. có thể tuỳ biến lên các máy khác khác file khác chứ viết một bộ này mà bắt người dùng hiểu và điền thông tin vào VBA thì quỳ thà làm mailling
 
Upvote 0
Em cảm ơn anh maika 8080 nhiều lắm anh ạ. Khi nào em ra bệnh viện em có máy tính em làm và nghiên cứu . có gì lúc nào khó khăn em lại nhờ anh nhé. em xin chân thành cảm ơn anh nhiều
 
Upvote 0
Em cảm ơn anh maika 8080 nhiều lắm anh ạ. Khi nào em ra bệnh viện em có máy tính em làm và nghiên cứu . có gì lúc nào khó khăn em lại nhờ anh nhé. em xin chân thành cảm ơn anh nhiều
Chúc bạn mau bình phục!
Mà bịnh gì vậy bạn? Tò mò chút thôi, bạn đừng trả lời nếu thấy không tiện.
 
Upvote 0

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

Back
Top Bottom