[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) (4 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,765
Đượ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:
Bạn không nên bắt tôi phải đoán/làm mù như thế!. Lẽ ra bạn phải đưa cái file Excel nguồn + file Word mẫu cần trộn của bạn thì tôi mới biết tại sao xảy ra lỗi chứ.
Em xin phép gửi anh File Excel và Word, nhờ anh xem hộ em với ạ. Em xin cảm ơn ạ.
 

File đính kèm

Upvote 0
Nhiều lúc miêu tả không trơn tru anh à Em thấy Chỉ cần Chèn thêm dữ liệu trước hàng tiêu đề thì không ra kết quả
gửi anh
 

File đính kèm

Upvote 0
Nhiều lúc miêu tả không trơn tru anh à Em thấy Chỉ cần Chèn thêm dữ liệu trước hàng tiêu đề thì không ra kết quả
gửi anh
Tại sao bạn không dùng file cập nhật tôi đã thông báo suốt mà lại dùng cái file từ đời nảo đời nào rồi hỏi nhỉ? Tải lại file ở bài #1, và thống nhất 1 điều là lấy cột đầu tiên làm tên file Word kết quả (nếu cần phân biệt các dòng cùng 1 văn bản.
 
Upvote 0
Chèn dòng thì sao anh cũng bị anh à
 

File đính kèm

  • loi chen dong.PNG
    loi chen dong.PNG
    15.2 KB · Đọc: 16
Upvote 0
Em xin phép gửi anh File Excel và Word, nhờ anh xem hộ em với ạ. Em xin cảm ơn ạ.
Tôi không biết bạn làm gì nhưng bị MISSING Microsoft Word 16 (chắc bạn dùng Office 2016) trong Tools/References tại cửa sổ VBA. Tôi chọn lại tham chiếu thư viện Word thì không xảy ra lỗi gì cả.
Chèn dòng thì sao anh cũng bị anh à
Đọc bài #206 !!!!!
 
Upvote 0
Hay quá bạn.Thời gian chạy rất nhanh, nó hơn code VBA ở chỗ này. Vậy khi cần tôi có thể tham khảo, nhờ bạn hướng dẫn thêm nhé, khi code gặp vướng mắc. Hình như bạn Maika8008 đang viết bằng VB.NET chứ không phải C# nhưng cơ bản nó cũng giống nhau, có thể tham khảo được.
Sẳn sàng trao đổi và chia sẻ (nếu biết) cùng các thành viên.
 
Upvote 0
Tôi không biết bạn làm gì nhưng bị MISSING Microsoft Word 16 (chắc bạn dùng Office 2016) trong Tools/References tại cửa sổ VBA. Tôi chọn lại tham chiếu thư viện Word thì không xảy ra lỗi gì cả.

Đọc bài #206 !!!!!
Vâng, em xài bộ Office 2016 a ạ. Có cách nào khắc phục được không anh?
 
Upvote 0
Ở cửa sổ vba, vào tools-Reference bỏ chọn dòng MISSING... (Nếu có). Kéo xuống dưới chọn Microsoft Word 16
trong bản e đang dùng không có dòng Missing nào ạ, và cũng đang chọn Word 16 rồi anh. Phiên bản cũ thì em vẫn chạy bình thường, nhưng bản này mới báo lỗi ạ.
1655254056936.png
 
Upvote 0
Vẫn báo lỗi như ở bài #197 của em ấy ạ. Hiện em đang dùng bản cũ trước update vẫn ok ạ, chắc do em táy máy nghịch dại cái gì đó nên mới lỗi vậy ạ.
Thử thêm .Value đàng sau Cells(...) xem. Vả lại bạn phải xem thử lúc đó cái Cells(...) kia là ô nào, nhận giá trị bao nhiêu chứ. Debug code giống như bác sĩ chẩn đoán bệnh vậy, cần phải có xét nghiệm, siêu âm chứ nghe nói như thế như thế thì thua.
Bài đã được tự động gộp:

Sẳn sàng trao đổi và chia sẻ (nếu biết) cùng các thành viên.
Nhân vụ này bạn có thể viết 1 chủ đề để chia sẻ công cụ và cách làm đi. Nay tôi như mới học đến mẫu giáo, mò mẫm mãi mụ cả đầu óc.
 
Upvote 0
Trộn dữ liệu từ Excel sang Word
-------------------------------------------------------------------------------------------

Lấy cảm hứng từ ý tưởng và file của bác Maika8008, tôi cũng thiết kế một phiên bản khác cho việc Trộn dữ liệu từ Excel sang Word.
Phiên bản này tổng hợp các nhu cầu thực tế của người dùng đã trao đổi trong chủ để này, có thể chưa đầy đủ nhưng cũng đáp ứng cơ bản cho công việc.

* Các chức năng:
- Tùy chọn trộn dữ liệu: Một (hoặc nhiều) đối tượng cho một (hoặc nhiều) văn bản.
- Tự động tạo tiêu đề cột riêng, không ảnh hưởng đến thiết kế bảng.
- Không cố định vị trí (dòng, cột ) của dữ liệu cần trộn vì dùng tham chiếu qua Table name.
- Khắc phục lỗi khi trộn đoạn văn bản nhiều hơn 255 ký tự.

Thiết kế cũng chưa bẫy lỗi gì nhiều, chắc chắn sẽ phát sinh lỗi khi thao tác, các bạn chạy kiểm tra thử nhé.
Tôi cũng đã thử dùng kết hợp tính năng Mail Merger có sẵn trong Word + VBA cho các tùy chọn nhưng tốc độ thực thi cũng không bằng một góc so với việc dùng thẳng Mail Merge (*) trong Word vì dù gì thì nó cũng đã qua code VBA để gọi tính năng Merge.

(*) Dùng Mail Merge trong Word rất nhanh nhưng nó chỉ đáp ứng tùy chọn cơ bản, đó là lý do có nhiều công cụ viết mở rộng thêm cho tính năng này.

PHP:
wdocSource.MailMerge.OpenDataSource...

PqVr9mx.jpg


Hướng dẫn sử dụng trong video.


* Đã cập nhật bẫy lỗi và chuyển sang kết nối muộn (Late binding) với Word để tránh lỗi giữa các phiên bản Office.

Link file (full code): https://www.mediafire.com/file/8fc086iogo32cie/MergeDataExcel2Word.zip/file
 
Lần chỉnh sửa cuối:
Upvote 0
Trộn dữ liệu từ Excel sang Word
-------------------------------------------------------------------------------------------

Lấy cảm hứng từ ý tưởng và file của bác Maika8008, tôi cũng thiết kế một phiên bản khác cho việc Trộn dữ liệu từ Excel sang Word.
Phiên bản này tổng hợp các nhu cầu thực tế của người dùng đã trao đổi trong chủ để này, có thể chưa đầy đủ nhưng cũng đáp ứng cơ bản cho công việc.

* Các chức năng:
- Tùy chọn trộn dữ liệu: Một (hoặc nhiều) đối tượng cho một (hoặc nhiều) văn bản.
- Tự động tạo tiêu đề cột riêng, không ảnh hưởng đến thiết kế bảng.
- Không cố định vị trí (dòng, cột ) của dữ liệu cần trộn vì dùng tham chiếu qua Table name.
- Khắc phục lỗi khi trộn đoạn văn bản nhiều hơn 255 ký tự.

Thiết kế cũng chưa bẫy lỗi gì nhiều, chắc chắn sẽ phát sinh lỗi khi thao tác, các bạn chạy kiểm tra thử nhé.
Tôi cũng đã thử dùng kết hợp tính năng Mail Merger có sẵn trong Word + VBA cho các tùy chọn nhưng tốc độ thực thi cũng không bằng một góc so với việc dùng thẳng Mail Merge (*) trong Word vì dù gì thì nó cũng đã qua code VBA để gọi tính năng Merge.

(*) Dùng Mail Merge trong Word rất nhanh nhưng nó chỉ đáp ứng tùy chọn cơ bản, đó là lý do có nhiều công cụ viết mở rộng thêm cho tính năng này.

PHP:
wdocSource.MailMerge.OpenDataSource...

PqVr9mx.jpg


Hướng dẫn sử dụng trong video.



Link file (full code): https://www.mediafire.com/file/8fc086iogo32cie/MergeDataExcel2Word.zip/file
Em chạy thử code thì báo lỗi chỗ này anh ạ:
1655362601359.png1655362564317.png
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Chắc do lỗi các đường dẫn file/ folder lưu trong đó. Tôi làm qua máy ảo Windows, các đường dẫn nó thành như ổ đĩa mạng. Để tôi sửa lại xem sao.
Bạn tải lại file bài #215 chạy thử nhé.
File anh mới up lại em thấy đã không còn bị lỗi cũ, tuy nhiên khi thực thi code trộn thì báo lỗi chưa chọn file Word, mặc dù em đã thử tích chọn hoặc nhấn chọn tất cả nhưng vẫn bị anh ạ.


1655370853864.png
 
Upvote 0
File anh mới up lại em thấy đã không còn bị lỗi cũ, tuy nhiên khi thực thi code trộn thì báo lỗi chưa chọn file Word, mặc dù em đã thử tích chọn hoặc nhấn chọn tất cả nhưng vẫn bị anh ạ.


View attachment 277414
Tải lại file đi bạn. Tôi bẫy lỗi sai cho cái listbox (tùy chọn multi select khác single select).
À mà bạn đang xài Office phiên bản gì?
 
Upvote 0
Tải lại file đi bạn. Tôi bẫy lỗi sai cho cái listbox (tùy chọn multi select khác single select).
À mà bạn đang xài Office phiên bản gì?
Em mới thử tải lại file mới ở trong link download thì lại bị dính lỗi như ở bài #216 anh ạ.
Máy em đang chạy bản Office 2016 - 64 bit
 
Upvote 0
Anh ơi em đã tải lại file và bị dính lỗi này. Nhờ anh sửa em với em xin cảm ơn anh nhiều
 

File đính kèm

  • Loi.jpg
    Loi.jpg
    174.6 KB · Đọc: 20
Lần chỉnh sửa cuối:
Upvote 0
:) Tôi upload nhầm file cũ. Đã sửa lại rồi.
Em test thử thấy code đã chạy tốt rồi anh nha.
Ngày mai em sẽ giành thời gian test thử thêm 1 số trường hợp xem có phát sinh lỗi gì nữa không.
Cảm ơn anh đã chia sẻ file, chúc anh cuối ngày tốt lành.
 
Upvote 0
Anh ơi em đã tải lại file và bị dính lỗi này. Nhờ anh sửa em với em xin cảm ơn anh nhiều
Lỗi này là do chưa khai báo thư viện Microsoft Word xx.0 Object Library. Bạn vào màn hình VBE menu Tool - Reference - chọn thư viện này.
Để tôi xem đổi qua khai báo muộn cho tham số này để tránh lỗi trên.
Trong Excel để sử dụng các đường dẫn của mạng nội bộ mà không bị các báo lỗi liên quan (ví dụ: lỗi Bad file name...) thì phải thiết lập Trust Location cho network. File - Option - Trust Center - Trust Center Setting - Trust Location - chọn như hình.

CleanShot 2022-06-16 at 21.28.08@2x.png
 
Upvote 0
Dạ Anh nên chuyển qua khai báo muộn cho tham số anh ạ
 
Upvote 0
Bạn chọn tập tin GMH.docx và dòng 6 trong tập tin Excel. Trong tập tin GMH có 2 chỗ có [Việc cần mời]. Sau khi trộn bạn có kết quả ở 2 nơi?
À đúng là bị lỗi trường hợp này rồi anh. Để xem lại đoạn code cho dùng cho Text >255.

* Cập nhật:
Đã sửa lỗi đề cập của anh batman1 và đã cập nhật lại file.
Do ít tương tác với Word VBA nên code nó còn lọng cọng các kiểu.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi mới tìm ra một cách khác đơn giản hơn dùng để Replace Text > 255 ký tự trong Word đó là Copy text từ Clipboard dán vào.
Bên dưới là hàm dùng để Copy và lấy dữ liệu từ Clipboard. Hàm này dùng đối tượng HTMLFile chứ không dùng Windows API nên khỏi lo vụ khai báo 32/64 bit.

PHP:
If Len(arrData(i, j)) > 254 Then
   Clipboard CStr(arrData(i, j))
   .Replacement.Text = "^c"
Else
    ...

- Hàm Clipboard:

PHP:
Function Clipboard(Optional StoreText As String) As String
    '/Ghi/doc text vào Clipboard. Dùng doi tuong HTMLFile
    '/Hoat dong tren 32/64 bit
   
    Dim x As Variant
    x = StoreText   'dùng string se báo loi setData'
    With CreateObject("htmlfile")
        With .parentWindow.clipboardData
            Select Case True
                Case Len(StoreText)
                    .setData "text", x  'Ghi vào clipboard'
                Case Else   'Khi khong có tham so'
                    Clipboard = .GetData("text")    'Doc tu clipboard'
            End Select
        End With
    End With
End Function
 
Upvote 0
Tôi mới tìm ra một cách khác đơn giản hơn dùng để Replace Text > 255 ký tự trong Word đó là Copy text từ Clipboard dán vào.
Bên dưới là hàm dùng để Copy và lấy dữ liệu từ Clipboard. Hàm này dùng đối tượng HTMLFile chứ không dùng Windows API nên khỏi lo vụ khai báo 32/64 bit.
Tôi thấy dùng cái này cũng được
Mã:
Dim dataObj As New MSForms.DataObject
    
dataObj.SetText strReplace
dataObj.PutInClipboard
 
Upvote 0
Tôi thấy dùng cái này cũng được
Mã:
Dim dataObj As New MSForms.DataObject
  
dataObj.SetText strReplace
dataObj.PutInClipboard
Vâng cái này cũng khá hay vì có sẵn trong cái thư viện Microsoft Form 2.0 Object Library rồi, khỏi lấy từ thư viện bên ngoài. Trong bài này chỉ cần lưu mỗi lần 1 chuỗi text nên dùng Data Object cho gọn nhẹ.
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng cái này cũng khá hay vì có sẵn trong cái thư viện Microsoft Form 2.0 Object Library rồi, khỏi lấy từ thư viện bên ngoài. Trong bài này chỉ cần lưu mỗi lần 1 chuỗi text nên dùng Data Object cho gọn nhẹ.
Anh ơi. Hiện tại, File của anh có thể chọn từng vùng để chạy dữ liệu. Nhưng nếu khi em dùng Filter để lọc, ẩn đi 1 vài dòng, thì khi chạy kết quả các dòng ẩn đó vẫn chạy ra kết quả. Vậy anh có thể bổ sung tính năng nếu như dùng filter để lọc, các dòng đã ẩn đi, thì khi chạy kết quả sẽ bỏ qua các dòng đó không ạ? Em xin cảm ơn ạ.
 
Upvote 0
Anh ơi. Hiện tại, File của anh có thể chọn từng vùng để chạy dữ liệu. Nhưng nếu khi em dùng Filter để lọc, ẩn đi 1 vài dòng, thì khi chạy kết quả các dòng ẩn đó vẫn chạy ra kết quả. Vậy anh có thể bổ sung tính năng nếu như dùng filter để lọc, các dòng đã ẩn đi, thì khi chạy kết quả sẽ bỏ qua các dòng đó không ạ? Em xin cảm ơn ạ.
Không biết bạn dùng file nào chứ file ở bài #1 đó tôi vừa chạy tốt mà, tức là không thực hiện với các dòng ẩn dù ẩn bằng Hide hay Filter.

CẬP NHẬT 18/06/2022 (FILE TẠI BÀI #1): 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.
 
Lần chỉnh sửa cuối:
Upvote 0
Không biết bạn dùng file nào chứ file ở bài #1 đó tôi vừa chạy tốt mà, tức là không thực hiện với các dòng ẩn dù ẩn bằng Hide hay Filter.

CẬP NHẬT 18/06/2022 (FILE TẠI BÀI #1): 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.
Dạ anh. File e đang chạy là của bác @ongke0711 ạ. Còn file của bác update thì làm việc với vùng ẩn em chạy không vấn đề gì ạ.
 
Upvote 0
trường hợp font chữ cũng chưa được anh ạ.... ở bản mới em download về ở trường &Số văn bản là kiểu chữ Wingdings 2( bản excell) sang bản word vẫn chuyển về Times New Roman
Phải có cách nào đó nhưng tạm thời tôi chưa nghĩ ra.
 
Upvote 0
Anh ơi. Hiện tại, File của anh có thể chọn từng vùng để chạy dữ liệu. Nhưng nếu khi em dùng Filter để lọc, ẩn đi 1 vài dòng, thì khi chạy kết quả các dòng ẩn đó vẫn chạy ra kết quả. Vậy anh có thể bổ sung tính năng nếu như dùng filter để lọc, các dòng đã ẩn đi, thì khi chạy kết quả sẽ bỏ qua các dòng đó không ạ? Em xin cảm ơn ạ.

14/06/2022: Cập nhật trường hợp chọn dữ liệu trong vùng có dùng Filter để lọc.

Đã cập nhật file vào bài #215.
 
Lần chỉnh sửa cuối:
Upvote 0
Phải có cách nào đó nhưng tạm thời tôi chưa nghĩ ra.
Cái vụ Font này theo quan điểm của tôi là sẽ không đưa vào công cụ trộn dùng chung vì có một số điểm như sau: (Nếu muốn viết riêng cho trường hợp nào đó thì cũng được thôi)
- Sẽ tốn thêm một công đoạn code là kiểm tra font từng cột dữ liệu trước khi trộn, sau đó trộn vào Word và code cho việc định dạng font phía Word.
- Nếu phát sinh trường hợp: dòng text của một cột nào đó vừa font chữ thường Arial vừa Winding2 thì xử lý như thế nào?

Nói chung là viết được hết nhưng code nhiều thì thời gian thực thi sẽ kéo dài hơn vì phải chạy thêm code kiểm tra các kiểu.

Hàm lấy tên Font:

PHP:
Function getFontInfo(Rng As Range, Optional iType As Integer)
    ' iType: 1 - Name, 2- Size'
    Application.Volatile
    If iType = 2 Then
        getFontInfo = Rng.Font.Size
    Else
        getFontInfo = Rng.Font.Name
    End If
End Function
 
Upvote 0
trường hợp font chữ cũng chưa được anh ạ.... ở bản mới em download về ở trường &Số văn bản là kiểu chữ Wingdings 2( bản excell) sang bản word vẫn chuyển về Times New Roman
File cho bạn đây. Bạn test hết các trường hợp dùm tôi. Nếu ổn thì tôi cập nhật lên bài #1.

Điều kiện là 1 cell chỉ duy nhất 1 font. Nếu trong cell có 2 font như bài #242 nói thì tôi chịu à nghe.
 

File đính kèm

Upvote 0
Phải có cách nào đó nhưng tạm thời tôi chưa nghĩ ra.

File cho bạn đây. Bạn test hết các trường hợp dùm tôi. Nếu ổn thì tôi cập nhật lên bài #1.

Điều kiện là 1 cell chỉ duy nhất 1 font. Nếu trong cell có 2 font như bài #242 nói thì tôi chịu à nghe.
cảm ơn anh đã nhiệt tình giúp ạ
Bài đã được tự động gộp:

Phải có cách nào đó nhưng tạm thời tôi chưa nghĩ ra.

File cho bạn đây. Bạn test hết các trường hợp dùm tôi. Nếu ổn thì tôi cập nhật lên bài #1.

Điều kiện là 1 cell chỉ duy nhất 1 font. Nếu trong cell có 2 font như bài #242 nói thì tôi chịu à nghe.

File cho bạn đây. Bạn test hết các trường hợp dùm tôi. Nếu ổn thì tôi cập nhật lên bài #1.

Điều kiện là 1 cell chỉ duy nhất 1 font. Nếu trong cell có 2 font như bài #242 nói thì tôi chịu à nghe.
A xem giúp ạ...nó bị lỗi thế này
 

File đính kèm

  • 16555449390362720073833858852637.jpg
    16555449390362720073833858852637.jpg
    82.5 KB · Đọc: 33
Upvote 0
cảm ơn anh đã nhiệt tình giúp ạ
Bài đã được tự động gộp:






A xem giúp ạ...nó bị lỗi thế này
Bạn nên kỹ lưỡng dùm chút. Tôi thật là không thích những người hời hợt. Nói mất lòng nhưng tôi không ngại

Hồi nào mà bạn hỏi rõ ràng hơn thì tôi trả lời.
 
Upvote 0
Bạn nên kỹ lưỡng dùm chút. Tôi thật là không thích những người hời hợt. Nói mất lòng nhưng tôi không ngại
Trong Sub MergeExcelToWord_AllDoc có 5 LABEL cùng tên XFontResume:. Trong mỗi sub/function chỉ được phép có 1 LABEL với mỗi tên.

Lỗi được nêu rõ trong hình đính kèm.
 
Upvote 0
Bạn nên kỹ lưỡng dùm chút. Tôi thật là không thích những người hời hợt. Nói mất lòng nhưng tôi không ngại

Hồi nào mà bạn hỏi rõ ràng hơn thì tôi trả lời.
Dạ...em gõ nhầm chữ bù vào ạ... Em download file excell anh gửi về và phát sinh lỗi như ảnh em gửi ạ
 
Upvote 0
Dạ...em gõ nhầm chữ bù vào ạ... Em download file excell anh gửi về và phát sinh lỗi như ảnh em gửi ạ
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.
 

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 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.
sao không hiểu cách làm vậy bạn
 

File đính kèm

  • Untitled.png
    Untitled.png
    388.9 KB · Đọc: 23
Upvote 0
sao không hiểu cách làm vậy bạn
Có nhiều thứ thay đổi nhưng tôi lại không cập nhật hướng dẫn ở bài #1. Do đó, bạn lướt qua các bình luận trong chủ đề và thử chút là nắm được cách làm hoặc chờ tôi cập nhật cách sử dụng.
 
Upvote 0
Xin Anh MaiKa Sửa lỗi giúp em với. em đang bị lỗi khi chạy trộn 1 dòng nhiều văn bản
em cảm ơn anh nhiều
 
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.

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.
Dạ cảm ơn anh ạ.... em kiểm tra file mới anh gửi chưa phát sinh lỗi gì ạ
 
Upvote 0
Nhờ Anh MaiKa sửa giúp em với Anh. em cảm ơn anh nhiều lắm
 
Upvote 0
Xin Anh MaiKa Sửa lỗi giúp em với. em đang bị lỗi khi chạy trộn 1 dòng nhiều văn bản
em cảm ơn anh nhiều
Tôi thấy bạn đi sửa code của tôi dẫn đến chạy bị lỗi rồi nhờ tôi sửa là sao?
Code của tôi: sPathNew = Left(sPath(1), InStrRev(sPath(1), "\")) & Trim(Range("A" & Rng.Row).Value) & "\"
Còn bạn đi sửa lại thành: sPathNew = Left(sPath(1), InStrRev(sPath(1), "\")) & Trim(Cells(Rng.Row, Col).Value) & "\" ' THAY CODE
Lúc đó biến Col chưa được gán giá trị (đang = 0) thì lấy gì cho nó chạy.
Còn nhiều dòng liên quan đến biến Col bạn cũng tự sửa mà tôi không hiểu sửa để làm gì vì dữ liệu của bạn có gì đặc biệt hơn dữ liệu ví dụ của tôi đâu?
 
Upvote 0
Dạ như anh lấy cố định là cột A làm tên file thì chuẩn rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ như anh lấy cố định là cột A làm tên file thì chuẩn rồi. mục đich Em làm vậy sau này chèn thêm trường dữ liệu thì tên file luôn luôn lấy theo cột cuối cùng nên không ảnh hưởng gì anh à. Anh xem sửa giúp em lỗi đó các chức năng khác dùng thì được rồi a à
Trim(Cells(Rng.Row, Col).Value) & "\" Col đã có đâu. Bạn sửa được mà.
 
Lần chỉnh sửa cuối:
Upvote 0
Huhu. Mong anh sửa giúp em với em e không sửa được anh à
 
Upvote 0
Em không biết sửa đoạn nào nữa anh à mong anh sửa trên file e đính kèm với anh
 
Upvote 0
:D sửa quá loạn code luôn, giờ không đâu là bờ...:D
 
Upvote 0
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

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

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

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
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?
dạ.... em kiểm tra ... khi chọn tham số chương trình. thì phải chọn vào check box để vào mục " chọn 1 dòng nhiều văn bản " thì sẽ chạy... còn các mục khác " trộn 1 dòng 1 văn bản", " trộn nhiều dòng 1 văn bản"; " trộn nhiều dòng nhiều văn bản" thì chương trình không chạy ạ
 
Upvote 0
Cái câu nằm riêng chình ình thế này mà không quan tâm.IMG_20220702_071913.jpg
 
Upvote 0

File đính kèm

Upvote 0
em đã kiểm tra lại đường dẫn và đã sửa được rồi ạ... nhưng vấn đề xuống dòng bằng "ALT+ENTER" vẫn chưa được ạ... nhờ a xem lại giúp ạ.. vẫn còn ô vuông bên bản trộn word
Đúng là một cuộc marathon chưa xác định vạch đích.
 
Upvote 0
Dạ thưa anh.... vấn đề xuống dòng này em đã nhờ anh sửa từ các bài trước rồi ạ chứ không phải giờ mới phát sinh ra ạ
Tôi đã làm cho bạn ở bài #271 không nghe bạn nói gì, chừ đề cập như chuyện mới thì có khổ không cơ chứ.
 
Upvote 0
Upvote 0
Tôi dùng file ở bài 271 đây, thấy có lỗi gì đâu:
View attachment 278205
A xem lại giúp em. tại file excell tại ô F7 em có gõ lại... và các file trước của anh không cần nhập đường dẫn tại ô H2 file vẫn chạy bình thường... file trong bài 271 bắt buộc phải nhập đường dẫn vào ô H2 mới trộn được sang word ạ... em xin gửi kèm file... file em tài trong bài 271
 

File đính kèm

Upvote 0
A xem lại giúp em. tại file excell tại ô F7 em có gõ lại... và các file trước của anh không cần nhập đường dẫn tại ô H2 file vẫn chạy bình thường... file trong bài 271 bắt buộc phải nhập đường dẫn vào ô H2 mới trộn được sang word ạ... em xin gửi kèm file... file em tài trong bài 271
Bạn tải lại file này test hết các trường hợp rồi báo lại kết quả nhé (nhớ sửa lại đường dẫn)
 

File đính kèm

Upvote 0
Bạn tải lại file này test hết các trường hợp rồi báo lại kết quả nhé (nhớ sửa lại đường dẫn)
dạ em test khộng bị lỗi file word rồi ạ.... em thấy mấy file trước của anh không bắt buộc phải nhập đường dẫn vào ô H2... File này bắt buộc phải nhập đường dẫn. có bỏ được phần nhập đường dẫn không ạ
 
Upvote 0
dạ em test khộng bị lỗi file word rồi ạ.... em thấy mấy file trước của anh không bắt buộc phải nhập đường dẫn vào ô H2... File này bắt buộc phải nhập đường dẫn. có bỏ được phần nhập đường dẫn không ạ
Thử file này cho 3 trường hợp tại H2:
1. Nhập sai đường dẫn
2. Để trống
3. Đường dẫn đúng.
 

File đính kèm

Upvote 0
Anh MaiKa em xin nhờ anh sửa dùm em code khi chạy bỏ qua dòng ẩn đối với file đính kèm này được không a
File anh cập nhật trên thì đầy đủ hết rồi. Nhưng em chỉ xin nhờ anh sửa cho em file này với ạ. em xin cảm ơn anh nhiều
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh MaiKa em xin nhờ anh sửa dùm em code khi chạy bỏ qua dòng ẩn đối với file đính kèm này được không a
File anh cập nhật trên thì đầy đủ hết rồi. Nhưng em chỉ xin nhờ anh sửa cho em file này với ạ. em xin cảm ơn anh nhiều
Thêm 2 dòng If và End If
 

File đính kèm

Upvote 0
Cảm ơn anh nhiều. có lỗi đặt vị trí dòng End If nhưng mà em sửa được rồi anh à
 
Upvote 0
Mình muốn chuyển dữ liệu dòng như trên thành dữ liệu cột được nhi, vì dữ liệu nhập vào theo cộ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 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.
File word của em có ba bảng trên 1 trang giấy. Xử lý như nào được vậy anh. em hiện vẫn đang dùng trộn merge nhưng mà thấy không được tiện lắm.
 

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 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.
Trường hợp mình mailmerg có ảnh thì sao bạn, ví dụ mình có đường dẫn thư mục chứa ảnh
 
Upvote 0

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

Back
Top Bottom