Maika8008
Thành viên gạo cội
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Ứ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òngCẬP NHẬT 07/12/2021: Giữ số 0 đầu số chứng minh nhân dân hoặc số điện thoạiCẬ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 #97CẬ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 fileCẬ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).
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
Ứng dụng sở trường của nó không phải ở việc trộn và in hàng loạt như giấy mời, mà là ở việc trộn mỗi lần cho nhiều file mẫu khác nhau nhưng trong các file ấy dùng lặp đi lặp lại 1 số thông tin thay đổi. Ví dụ khi bạn có một bộ văn bản cho 1 công việc gồm: Hợp đồng, phụ lục, thông báo, giấy mời, quy chế, nghiệm thu, thanh lý… mỗi lần dùng cho 1 đối tác, thì bạn rất dễ nhập sai thông tin đối tác, trích yếu công việc, ngày giờ tiến hành, địa điểm… hoặc khi sửa lại từ đối tác này dùng cho đối tác khác rất dễ bị râu ông nọ cắm cằm bà kia.
CÁCH DÙNG:
– Chuẩn bị file Word mẫu (ở trạng thái đóng). Tôi đã chuẩn bị sẵn 1 file mẫu ví dụ kèm theo.
– Chuẩn bị bảng dữ liệu như file Excel đính kèm. Nhập đường dẫn thư mục file Word mẫu tại ô H2 (đường dẫn này chỉ dùng khi bạn muốn trộn toàn bộ file Word trong thư mục nhưng lại không muốn hiện hộp thoại để lựa thư mục – Nếu ô H2 trống thì hộp thoại lựa thư mục sẽ xuất hiện khi chạy code)
– Bấm nút Gửi Field sang file Word mẫu. Từ các trường nhận được ở cuối file Word mẫu (tên trường bắt đầu bằng dấu $), bạn chép chúng đến các vị trí mong muốn và định dạng theo ý thích. Chép xong xóa các trường cuối file đi, lưu, đóng lại.
– Bấm Trộn để tiến hành. Các file đã trộn được đặt tên theo tên đối tác, lưu cùng đường dẫn với file Word mẫu.
CẬP NHẬT 29/07/2021: Sửa code để tăng tốc độ khi trộn hàng loạt toàn bộ dòng
CẬP NHẬT 07/12/2021: Giữ số 0 đầu số chứng minh nhân dân hoặc số điện thoại
CẬP NHẬT 17/05/2022: Trộn thông tin 1 người vào nhiều mẫu .docx khác nhau bằng hộp thoại chọn file. Văn bản đã trộn được lưu ở thư mục con có tên của người trộn. Nếu thư mục chưa tồn tại thì tự động được tạo mới. Tải file đính kèm tại bài #97
CẬP NHẬT 12/06/2022: Làm gọn code và dùng userform để chọn tham số đáp ứng tất cả yêu cầu của các thành viên từ trước đến nay trong chủ đề.
CẬP NHẬT 14/06/2022: Ô chứa text >255 ký tự vẫn trộn đầy đủ thông tin và không thi hành với các dòng ẩn.
CẬP NHẬT 18/06/2022: Tăng tốc với trường hợp trộn nhiều dòng nhiều văn bản và sửa lỗi lấy sai vùng làm việc với trường hợp trộn tất cả file Word trong folder.
CẬP NHẬT 03/03/2023: Thêm chức năng chuyển sang trộn theo kiểu Mail Merge truyền thống với file Word mẫu có sẵn các trường theo cách bên trên.
CẬP NHẬT 29/06/2023: Tách riêng mỗi thủ tục cho 1 tùy chọn để dễ bảo trì code. Sửa lỗi không mở được đường dẫn mặc định.
CẬP NHẬT 07/08/2023: Thêm thao tác chèn bảng Excel vào Word. Thêm các cột $Table1$, $Table2$ … vào bảng dữ liệu trộn và bố trí bảng cần chèn kèm trên trên đầu bảng như file đính kèm.
CẬP NHẬT 08/08/2023: Tạo bảng Word rồi chép dữ liệu của bảng Excel vào bảng Word. Bảng Word giữ được màu font chữ của trường giữ chỗ.
CẬP NHẬT 13/08/2023: Hoàn thiện code, thêm chức năng ghép file, và gộp các công việc chung 1 file
CẬP NHẬT 15/08/2023: Định dạng phân cách hàng nghìn cho bảng Word dựa vào định dạng các cột của bảng Excel.
CẬP NHẬT 30/09/2023: Mở luôn file Word kết quả khi trộn 1 dòng 1 file. Có thể chép 1 bảng vào nhiều vị trí khác nhau của file kết quả (như yêu cầu tại bài #432).
File đính kèm
Lần chỉnh sửa cuối:
How to automate Word with Visual Basic to create a Mail Merge
More Information
Data access methods
To programmatically set up a data source for a Word mail merge document, you first call the OpenDataSource method of a MailMerge object. The syntax for the OpenDataSource method is as follows:
.OpenDataSource(Name, [Format], [ConfirmConversions], [ReadOnly], [LinkToSource], [AddToRecentFiles], [PasswordDocument], [PasswordTemplate], [Revert],[WritePasswordDocument], [WritePasswordTemplate], [Connection], [SQLStatement], [SQLStatement1], [OpenExclusive], [SubType])
Note
For a complete description of each argument, refer to the Microsoft Word Visual Basic online Help. Of primary interest for connecting to an external data source are the Name, Connection, and SubType arguments. Different combinations of these three arguments represent different data access methods for the mail merge.
Using OLEDB
OLEDB is the recommended data access method. To specify OLEDB as the data access method with OpenDataSource, supply the Name argument with the path and the file name to either the database or an Office DataSource Connection (.odc). If you provide a database for the Name argument, Word will automatically use OLEDB if there is an OLEDB provider installed that supports the database format.
Example
.OpenDataSource Name:="C:\MyDB.mdb", _ SQLStatement:="SELECT * FROM [MyTable]"
or
.OpenDataSource Name:="C:\MyDataSource.odc", _ SQLStatement:="SELECT * FROM [MyTable]"
Word and other Office XP applications use the Office DataSource Object (ODSO) for OLEDB access to external data sources. ODSO is the only mechanism by which Word can access data by using OLEDB for a mail merge. ODSO requires that the Name argument for OpenDataSource be either a complete path to a database or a complete path to a valid ODC file. ODSO ignores any information in the Connection argument.
Using ODBC
You can use ODBC for your mail merge to access data for which a user data source name (DSN) has been set up on the system. To specify ODBC as the data access method with OpenDataSource, supply an empty string for the Name argument, an ODBC connection string for the Connection argument, and wdMergeSubTypeWord2000 for the SubType argument.
Example
.OpenDataSource Name:= "", _ Connection:= "DSN=MySQLServerDSN;DATABASE=pubs;uid=sa;pwd=;", _ SQLStatement:= "Select au_id, au_lname, au_fname from authors", _ SubType:= wdMergeSubTypeWord2000
Using DDE
You can use DDE to access data in Microsoft Access databases or Microsoft Excel workbooks. To specify DDE as the data access method with OpenDataSource, supply the path and the file name to the database or the workbook for the Name argument, and wdMergeSubTypeWord2000 for the SubType argument.
Example
.OpenDataSource Name:="C:\MyDB.mdb", _ SQLStatement:="SELECT * FROM [MyTable]", _ SubType:=wdMergeSubTypeWord2000
Automation sample
The following sample code creates and executes a mail merge for form letters by using OLEDB (by way of ODSO). The data source that is used is the sample Access database Northwind.mdb. If Northwind is not installed, start Microsoft Access 2002 or Microsoft Office Access 2003. On the Help menu, click Sample Databases, and then choose Northwind Sample Database to install this feature.
To run this sample, follow these steps:
-
Start a new Standard EXE project in Visual Basic. By default, Form1 is created.
-
On the Project menu, click References.
-
Click Microsoft Word 2000 Object Library in the list of references, and then click OK.
Note To use the Microsoft Office Word 2003 Object, add the Microsoft Word 11.0 Object Library in the list of references and then Click OK.
-
Add a CommandButton control to Form1.
-
Add the following code to the code module for Form1.
Note If it is necessary, modify the path to Northwind.mdb to match your installation for Office XP.
Dim WithEvents oApp As Word.Application Private Sub Form_Load() 'Start Word. Set oApp = CreateObject("Word.Application") End Sub Private Sub Command1_Click() Dim oMainDoc As Word.Document Dim oSel As Word.Selection Dim sDBPath as String 'Start a new main document for the mail merge. Set oMainDoc = oApp.Documents.Add With oMainDoc.MailMerge .MainDocumentType = wdFormLetters 'Set up the mail merge data source to Northwind.mdb. sDBPath = "C:\Program Files\Microsoft Office\" & _ "OfficeXP\Samples\Northwind.mdb" .OpenDataSource Name:=sDBPath, _ SQLStatement:="SELECT * FROM [Customers]" 'Add the field codes to the document to create the form letter. With .Fields Set oSel = oApp.Selection .Add oSel.Range, "CompanyName" oSel.TypeParagraph .Add oSel.Range, "Address" oSel.TypeParagraph .Add oSel.Range, "City" oSel.TypeText ", " .Add oSel.Range, "Country" oSel.TypeParagraph oSel.TypeParagraph oSel.TypeText "Dear " .Add oSel.Range, "ContactName" oSel.TypeText "," oSel.TypeParagraph oSel.TypeParagraph oSel.TypeText " This letter is to inform you..." oSel.TypeParagraph oSel.TypeParagraph oSel.TypeText "Sincerely, [Your Name Here]" End With End With 'Perform the mail merge to a new document. With oMainDoc .MailMerge.Destination = wdSendToNewDocument .MailMerge.Execute Pause:=False End With End Sub Private Sub oApp_MailMergeAfterMerge(ByVal Doc As Word.Document, ByVal DocResult As Word.Document) 'When the mail merge is complete, 1) make Word visible, '2) close the mail merge document leaving only the resulting document 'open and 3) display a message. Doc.Close False oApp.Visible = True MsgBox "Mail Merge Complete: " & oApp.ActiveDocument.Name End Sub Private Sub Form_Unload(Cancel As Integer) Set oApp = Nothing End Sub
-
Press F5 to run the program.
-
Click the CommandButton control on Form1 to perform the mail merge.
When the code completes, Word is made visible with a new document open. The new document contains form letters that result from a mail merge containing data that is extracted from the Customers table in Northwind.mdb.
References
For more information, view the article in the Microsoft Knowledge Base:
285176 How to automate Word to perform a client-side Mail Merge using XML from SQL Server
Tạo Đoạn Văn Ngẫu Nhiên Nhanh Chóng Trong Word
Tạo Đoạn Văn Ngẫu Nhiên Nhanh Chóng Trong Word Khi soạn thảo văn bản word đôi khi bạn cần tạo một đoạn văn ngẫu nhiên để phục vụ một mục…
Các bạn biết đấy, thông thường nhắc tới mail merge thì người ta thường nghĩ tới việc kết hợp giữa excel và word, như ở bài hướng dẫn mail merge trong word, nhưng trong nhiều trường hợp các bạn không muốn sử dụng word, hay nói cách khác là mail merge không cần mở file word.
Cụ thể như các bạn có một form soạn thảo từ excel chứa rất nhiều chỉ tiêu vô định, việc sử dụng trên excel sẽ khiến các bạn dễ dàng hơn vì có thể sử dụng công thức dò tìm các chỉ tiêu không cố định này, như các bạn in thư mời khách hàng dựa vào một danh sách cố định, in toàn bộ giấy phép của nhân viên…
Hôm nay TTV sẽ chia sẻ với các bạn một thủ thuật excel thú vị đó là “mail merge từ excel sang excel” bằng cách sử dụng VBA excel, bạn mà giỏi VBA thì hiệu xuất làm việc của bạn sẽ tăng lên rất nhiều. Cùng theo dõi bài viết bên dưới nào.
Trong ví dụ sau, mình có Form thông tin như hình dưới, có hai giá trị bôi vàng sẽ thay đổi, và muốn in hàng loạt form này theo từng khách hàng khác nhau dựa vào danh sách khách hàng, nếu bạn cứ gõ từng khách rồi in thì có lẽ với hàng ngàn khách hàng bạn sẽ mất cả ngày làm việc.Nhưng TTV sẽ hướng dẫn các bạn in toàn bộ trong một click chuột “mail merge từ excel sang excel”.File này mình có 2 sheet FORM và DANH SÁCH tương ứng 2 hình sau:
Đây là danh sách khách hàng chứa các thông tin tương ứng cần điền vào form mẫu.– Bước 1: Đầu tiên bạn cố định lại vùng cần in, để khi in không lẫn những vùng khác vào.– Bước 2: Bây giờ ở ngoài vùng in các bạn làm như sau, ở ô M2 các bạn tô vàng lên, và để trống vậy, tiếp theo ô O1 và O2 các bạn dùng để gõ mã số khách hàng cần in hàng loạt, hoặc toàn bộ.Còn các chỉ tiêu thay đổi như khách hàng, tiền… các bạn cứ sử dụng công thức dò dựa vào Mã khách hàng ở ô M2 và sheet Danh Sách khách hàng như thông thường. Để biết công thức đúng hay sai, hãy gõ một Mã khách hàng bất kỳ vào ô M2.– Bước 3: Tiếp theo các bạn vào Insert – vùng Illustrations – Shapes và chọn một hình bất kỳ để vẽ vào một vùng ngoài vùng cần in ra.– Rồi gõ nội dung gì tùy bạn, cơ bản là như thế này– Bước 4: Xong rồi hãy click chuột phải vào nó và chọn Assign Macro– Ở hộp thoại Assign Macro tại Macro Name hãy đặt tên là PRINT_PRINT sau đó vào New– Bước 5: Bạn thấy vùng trống ở giữa Sub PRINT_PRINT() và End Sub chứ, hãy copy đoạn code bên dưới dán vào giữa chúng, các bạn chú ý copy đúng và đầy đủ, tránh bị bỏ sót ký tự, nếu không code sẽ không hoạt động được.Code:Dim p1, p2, i&p1 = Sheet1.Range(“O1”).Valuep2 = Sheet1.Range(“O2”).Value
If IsNumeric(p1) = False Or IsNumeric(p2) = False Thentb = MsgBox(“So code phai la so.”, , “Thông báo”)Exit SubEnd If
If p1 > p2 Thentb = MsgBox(“So code sau phai >= so code truoc.”, , “Thông báo”)Exit SubEnd If
If p1 < 1 Or p2 < 1 Thentb = MsgBox(“So code phai >= 1.”, , “Thông báo”)Exit SubEnd If
If p1 <= p2 ThenFor i = p1 To p2Sheet1.Range(“M2”).Value = iSheet1.PrintOutNextEnd If– Bước 6: Tắt cửa sổ vba excel đi và quay lại file excel, lúc này bạn muốn in từ khách hàng nào tới khách hàng nào thì cứ việc gõ Mã khách hàng vào ô O1, và O2, sau đó nhấn vào nút In vừa tạo.
Chỉ với 1 đoạn Code như trên thì chúng ta đã có thể mail merge từ excel sang excel rồi, giờ thì chỉ cần 1 click chuột là bạn có thể in được danh sách phiếu khách hàng tương ứng. Và bạn đừng quên lưu file dưới dạng Macro (.xlsm) đấy nhé.
TTV chúc các bạn thành công!
——————————–
TRUNG TÂM ĐÀO TẠO TIN HỌC TRÍ TUỆ VIỆT
CS1: 451 Điện Biên Phủ, Phường 25 – Quận Bình Thạnh – TP.HCMCS2: 213 Đường 3/2, Phường 9 – Quận 10 – TP.HCMCS3: 84T/8 Trần Đình Xu – Quận 1 – TP.HCMHotline: 0902.936.936
I have a macro in an Excel workbook that currently does the following:
- Create a data.csv file with data in the first two rows (for a mail merge)
- Pull a template of a selected Word document and make the data.csv file the source for the mail merge
- If the user chooses, it finishes the merge for the document
- If the user chooses, it opens the document when the macro is complete. If they don’t choose to open, the word documents all close.
I’ve been running into a couple major issues:
- The macro only seems to run smoothly if Word is entirely closed beforehand. My current workaround is a popup message if Word is open, telling the user to close word, but this is not ideal because it disrupts flow for some users who may have several instances of Word open.
- The macro has been running slowly, especially for some of the document templates that have thousands of merge fields pre-entered in the template. It sometimes take longer than a minute, and sometimes completely freezes.
Would the macro would run more smoothly if I have the Excel VBA open the Word template and have most of the code for setting up and finishing the mail merge in Word VBA? I’m much less familiar with Word VBA – can anyone help me with bringing over my code to word (but still initiated by Excel)? Also, if you can figure out why the macro struggles when Word is already open, I’d greatly appreciate it.
I didn’t include the entire code for proprietary reasons, but please let me know if there’s something else you need to see.
Thank you!!
Sub Mail_Merge_Dynamic() Dim mergeFile, tempFilePath As String Dim WordDoc, WordApp As Object Dim tempPath, mergePath, finalPath, curDir As String Dim mergeFilePath, finalFilePath As String Dim dataPath, FileNameCell, PrincCertCell, MMPrefix As String Dim FileCount As Integer Dim Close_Choice, ActiveWindow As String Dim WarningMsg, WarningMsg2 As String Dim NotFound, Overwrite1, Overwrite2 As Boolean Dim oBook As Workbook 'Update csv file for Data Merge narrative_merge Call WarpSpeed_On Sheets("Navigation").Select Range("Merge_File_1").Select Set WordApp = CreateObject("Word.Application") '//////////////////////////////MAIL MERGE MACRO\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 'Set up Mail Merge Documents from Template Folder based on selections on Navigation tab For i = 1 To FileCount FileNameCell = "Merge_File_" & i If Range(FileNameCell) = "" Then Else mergeFile = Range(FileNameCell) tempFilePath = tempPath & mergeFile mergeFilePath = mergePath & "MM_" & mergeFile finalFilePath = finalPath & mergeFile 'Activate Mail Merge If Range("MM_Activate") = 0 Then Else Set WordDoc = WordApp.Documents.Open(tempFilePath) With WordDoc.MailMerge .MainDocumentType = wdFormLetters 'Set up the mail merge data source dataPath = curDir & "\data.csv" .OpenDataSource Name:=dataPath 'Show values in the mail merge fields .ViewMailMergeFieldCodes = wdToggle End With 'WordDoc.ShowFieldCodes = False 'WordDoc.MailMerge.ViewMailMergeFieldCodes = False WordDoc.SaveAs FileName:=mergeFilePath End If ' Finish mail merge If Range("MM_Finish") = 0 Then Else With WordDoc.MailMerge .Destination = wdSendToNewDocument .SuppressBlankLines = True .Execute Pause:=False End With WordDoc.Application.ActiveDocument.SaveAs finalFilePath End If End If Next i Call CloseWordDocuments 'Make word visible if an Open command has been selected If Range("MM_Open_Merge") = 1 Or Range("MM_Open_Doc") = 1 Then curDir = ThisWorkbook.Path Set WordApp = CreateObject("Word.Application") For i = 1 To FileCount FileNameCell = "Merge_File_" & i If Range(FileNameCell) = "" Then Else mergeFile = Range(FileNameCell) mergeFilePath = curDir & "\Merge-Active Forms\" & "MM_" & mergeFile finalFilePath = curDir & "\Merge-Complete Forms\" & mergeFile If Range("MM_Open_Merge") = 1 Then Set WordDoc = WordApp.Documents.Open(mergeFilePath) End If If Range("MM_Open_Doc") = 1 Then Set WordDoc = WordApp.Documents.Open(finalFilePath) End If End If Next i WordApp.Visible = True 'Windows(mergeFile).Activate End If GoTo Reset Reset: Call WarpSpeed_Off End Sub Sub WarpSpeed_On_Calcs_Off() 'Optimize Macro Speed Application.ScreenUpdating = False Application.EnableEvents = False Application.Calculation = xlCalculationManual ' Turn off display alerts Application.DisplayAlerts = False End Sub Sub WarpSpeed_On() 'Optimize Macro Speed Application.ScreenUpdating = False Application.EnableEvents = False ' Turn off display alerts Application.DisplayAlerts = False End Sub Sub WarpSpeed_Off() 'Reset Macro Optimization Settings Application.EnableEvents = True Application.ScreenUpdating = True Application.DisplayAlerts = True Application.Calculation = xlCalculationAutomatic End Sub
Keywords searched by users: vba excel mail merge
Categories: Cập nhật 84 Vba Excel Mail Merge
See more here: kientrucannam.vn
See more: https://kientrucannam.vn/vn/