Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
Hi all. I'm attempting to merge an existing Word template to an ODBC
connection, but would like each record to merge to a new, auto-named document (ie lastname, firstname Date.doc). I have gone through the VB boards as well as the majority of usergroups, but haven't found any promising answers so far. Any assistance or hints would be greatly appreciated. Thanks in advance. |
#2
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
Graham Mayor did the hard part for you. See
http://www.gmayor.com/individual_merge_letters.htm. -- Charles Kenyon Word New User FAQ & Web Directory: http://addbalance.com/word Intermediate User's Guide to Microsoft Word (supplemented version of Microsoft's Legal Users' Guide) http://addbalance.com/usersguide See also the MVP FAQ: http://word.mvps.org/FAQs/ which is awesome! --------- --------- --------- --------- --------- --------- This message is posted to a newsgroup. Please post replies and questions to the newsgroup so that others can learn from my ignorance and your wisdom. wrote in message ups.com... Hi all. I'm attempting to merge an existing Word template to an ODBC connection, but would like each record to merge to a new, auto-named document (ie lastname, firstname Date.doc). I have gone through the VB boards as well as the majority of usergroups, but haven't found any promising answers so far. Any assistance or hints would be greatly appreciated. Thanks in advance. |
#3
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
Thanks - the last macro on the page does most of what I was looking
for. The only problem I'm running into is this - the macro apparently assumes the documents is a single page, where as mine is actually 3 pages. Thus, after it reads the top line and creates the file, it errors trying to read the top line of the next page, which is actually part of the first document. Is there a way to programmatically assign the number of pages per document? I've copied the macro code below. Thanks again for you help in advance. Sub SplitMergeLetter() ' splitter Macro modified to save individual letters with ' information from data source. The filename data must be added to ' the top of the merge letter - see web article. Selection.EndKey Unit:=wdStory Letters = Selection.Information(wdActiveEndSectionNumber) Selection.HomeKey Unit:=wdStory Counter = 1 While Counter Letters Application.ScreenUpdating = False With Selection .HomeKey Unit:=wdStory .EndKey Unit:=wdLine, Extend:=wdExtend .MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend End With sName = Selection Docname = "F:\Datapath\" & sName & ".doc" ActiveDocument.Sections.First.Range.Cut Documents.Add With Selection .Paste .HomeKey Unit:=wdStory .MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend .Delete End With ActiveDocument.SaveAs FileName:=Docname, _ FileFormat:=wdFormatDocument ActiveWindow.Close Counter = Counter + 1 Application.ScreenUpdating = True Wend End Sub |
#4
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
If you don't get another response here, try posting in the vba.beginners
newsgroup. I didn't write the macro and I don't use it so I can't really help you with it. I just knew that it was there and written by someone who knows what he is doing. Things to keep in mind, a mail merge divides records by inserting a section break (new page), not a page break. Do you have multiple sections in your primary merge document? -- Charles Kenyon Word New User FAQ & Web Directory: http://addbalance.com/word Intermediate User's Guide to Microsoft Word (supplemented version of Microsoft's Legal Users' Guide) http://addbalance.com/usersguide See also the MVP FAQ: http://word.mvps.org/FAQs/ which is awesome! --------- --------- --------- --------- --------- --------- This message is posted to a newsgroup. Please post replies and questions to the newsgroup so that others can learn from my ignorance and your wisdom. "Teeroi" wrote in message oups.com... Thanks - the last macro on the page does most of what I was looking for. The only problem I'm running into is this - the macro apparently assumes the documents is a single page, where as mine is actually 3 pages. Thus, after it reads the top line and creates the file, it errors trying to read the top line of the next page, which is actually part of the first document. Is there a way to programmatically assign the number of pages per document? I've copied the macro code below. Thanks again for you help in advance. Sub SplitMergeLetter() ' splitter Macro modified to save individual letters with ' information from data source. The filename data must be added to ' the top of the merge letter - see web article. Selection.EndKey Unit:=wdStory Letters = Selection.Information(wdActiveEndSectionNumber) Selection.HomeKey Unit:=wdStory Counter = 1 While Counter Letters Application.ScreenUpdating = False With Selection .HomeKey Unit:=wdStory .EndKey Unit:=wdLine, Extend:=wdExtend .MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend End With sName = Selection Docname = "F:\Datapath\" & sName & ".doc" ActiveDocument.Sections.First.Range.Cut Documents.Add With Selection .Paste .HomeKey Unit:=wdStory .MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend .Delete End With ActiveDocument.SaveAs FileName:=Docname, _ FileFormat:=wdFormatDocument ActiveWindow.Close Counter = Counter + 1 Application.ScreenUpdating = True Wend End Sub |
#5
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
The macro assumes that each document is in a single section, not a single
page. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Teeroi" wrote in message oups.com... Thanks - the last macro on the page does most of what I was looking for. The only problem I'm running into is this - the macro apparently assumes the documents is a single page, where as mine is actually 3 pages. Thus, after it reads the top line and creates the file, it errors trying to read the top line of the next page, which is actually part of the first document. Is there a way to programmatically assign the number of pages per document? I've copied the macro code below. Thanks again for you help in advance. Sub SplitMergeLetter() ' splitter Macro modified to save individual letters with ' information from data source. The filename data must be added to ' the top of the merge letter - see web article. Selection.EndKey Unit:=wdStory Letters = Selection.Information(wdActiveEndSectionNumber) Selection.HomeKey Unit:=wdStory Counter = 1 While Counter Letters Application.ScreenUpdating = False With Selection .HomeKey Unit:=wdStory .EndKey Unit:=wdLine, Extend:=wdExtend .MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend End With sName = Selection Docname = "F:\Datapath\" & sName & ".doc" ActiveDocument.Sections.First.Range.Cut Documents.Add With Selection .Paste .HomeKey Unit:=wdStory .MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend .Delete End With ActiveDocument.SaveAs FileName:=Docname, _ FileFormat:=wdFormatDocument ActiveWindow.Close Counter = Counter + 1 Application.ScreenUpdating = True Wend End Sub |
#6
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
Thanks Doug. And actually - as much as I wanted to complete this
project myself - it may be more than I can handle with my basic Macro knowledge. To give a little overview, here is what I'm trying to accomplish: 1) Create an ODBC connection to a specific table on an AS400 system. 2) Based upon a specified value per record within the table, choose from one of 10 Word templates to merge to. 3) Split the merged document into individual documents per record. 4) Save the newly created documents with an automated name based on another value within the record. So far, I have parts 1 and 4 completed. I'm also able to select the appropriate records and merge the documents manually. However, the entire process needs to be automated with as little interaction as possible. And as nice as it would be to have someone simply create the procedure for me, I'm actually interested in learning how to do it myself. Suggestions anyone? |
#7
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
There is no doubt that it is possible to automate the whole process other
that the selection of which mail merge main document (template in your terminology) is to be used. For that, I would create a userform containing a listbox that lists the templates and the user would select the one that they wanted to use and then would click a button on the form and the rest would be done. Most of the code for the splitting and saving of the files is in the Addin that I created that can be downloaded from Graham's website that you have already looked at. It will be a good learning exercise. For the Userform part, See the article "How to create a Userform" at: http://word.mvps.org/FAQs/Userforms/CreateAUserForm.htm The following shows you how to load a listbox on a user form with the data and then determine which item from the list the user has selected This routine loads a listbox with client details stored in a table in a separate document (which makes it easy to maintain with additions, deletions etc.), that document being saved as Clients.Doc for the following code. On the UserForm, have a list box (ListBox1) and a Command Button (CommandButton1) and use the following code in the UserForm_Initialize() and the CommandButton1_Click() routines Private Sub UserForm_Initialize() Dim sourcedoc As Document, i As Integer, j As Integer, myitem As Range, m As Long, n As Long ' Modify the path in the following line so that it matches where you saved Clients.doc Application.ScreenUpdating = False ' Open the file containing the client details Set sourcedoc = Documents.Open(FileName:="e:\worddocs\Clients.doc" ) ' Get the number or clients = number of rows in the table of client details less one i = sourcedoc.Tables(1).Rows.Count - 1 ' Get the number of columns in the table of client details j = sourcedoc.Tables(1).Columns.Count ' Set the number of columns in the Listbox to match ' the number of columns in the table of client details ListBox1.ColumnCount = j ' Define an array to be loaded with the client data Dim MyArray() As Variant 'Load client data into MyArray ReDim MyArray(i, j) For n = 0 To j - 1 For m = 0 To i - 1 Set myitem = sourcedoc.Tables(1).Cell(m + 2, n + 1).Range myitem.End = myitem.End - 1 MyArray(m, n) = myitem.Text Next m Next n ' Load data into ListBox1 ListBox1.List() = MyArray ' Close the file containing the client details sourcedoc.Close SaveChanges:=wdDoNotSaveChanges End Sub Private Sub CommandButton1_Click() Dim i As Integer, Addressee As String Addressee = "" For i = 1 To ListBox1.ColumnCount ListBox1.BoundColumn = i Addressee = Addressee & ListBox1.Value & vbCr Next i ActiveDocument.Bookmarks("Addressee").Range.Insert After Addressee UserForm2.Hide End Sub The Initialize statement will populate the listbox with the data from the table and then when a client is selected in from the list and the command button is clicked, the information for that client will be inserted into a bookmark in the document. You may want to vary the manner in which it is inserted to suit our exact requirements, but hopefully this will get you started. To make it easy for you, the code has been written so that it will deal with any number of clients and any number of details about each client. It assumes that the first row of the table containing the client details is a header row. -- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Teeroi" wrote in message ups.com... Thanks Doug. And actually - as much as I wanted to complete this project myself - it may be more than I can handle with my basic Macro knowledge. To give a little overview, here is what I'm trying to accomplish: 1) Create an ODBC connection to a specific table on an AS400 system. 2) Based upon a specified value per record within the table, choose from one of 10 Word templates to merge to. 3) Split the merged document into individual documents per record. 4) Save the newly created documents with an automated name based on another value within the record. So far, I have parts 1 and 4 completed. I'm also able to select the appropriate records and merge the documents manually. However, the entire process needs to be automated with as little interaction as possible. And as nice as it would be to have someone simply create the procedure for me, I'm actually interested in learning how to do it myself. Suggestions anyone? |
#8
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
Thanks again Doug - tons of very helpful information in that last post.
And I may have been a bit cinfusing in my description of the mail merge process. Inside of each table is up to 10 different record "types", each of which requires a different mail merge main document. Ideally, I need Word to open the table, separate the records by type, then merge each record to its corresponding mail merge document, and save eash as its own individual document. As an example: A B C Bed Tom Wolfe Chair Sue Jones Wall Jim Smith Wall John Henry Each record where A=Bed would merge with bed.doc and save as "B C.doc" Each record where A=Chair would merge with chair.doc and save as "B C.doc" Each record where A=Wall would merge with wall.doc and save as "B C.doc" I've worked out the datasource connection, the mail merge itself, and the autosave and file naming process. The part I'm stuck on is choosing the mail merge main document based on record type. I hope this makes things a bit clearer. |
#9
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
To automate this, it's going to be a "roll your own" situation.
-- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Teeroi" wrote in message oups.com... Thanks again Doug - tons of very helpful information in that last post. And I may have been a bit cinfusing in my description of the mail merge process. Inside of each table is up to 10 different record "types", each of which requires a different mail merge main document. Ideally, I need Word to open the table, separate the records by type, then merge each record to its corresponding mail merge document, and save eash as its own individual document. As an example: A B C Bed Tom Wolfe Chair Sue Jones Wall Jim Smith Wall John Henry Each record where A=Bed would merge with bed.doc and save as "B C.doc" Each record where A=Chair would merge with chair.doc and save as "B C.doc" Each record where A=Wall would merge with wall.doc and save as "B C.doc" I've worked out the datasource connection, the mail merge itself, and the autosave and file naming process. The part I'm stuck on is choosing the mail merge main document based on record type. I hope this makes things a bit clearer. |
#10
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
Thanks Doug - I was afraid you might say that. How would I contact you
directly if I wanted to have you put a proposal together for a project such as this? |
#11
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
There's something fairly OBVIOUS to be removed from my email address.
-- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Teeroi" wrote in message oups.com... Thanks Doug - I was afraid you might say that. How would I contact you directly if I wanted to have you put a proposal together for a project such as this? |
#12
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
MS Word - Creat a new document for each record
There's something fairly OBVIOUS to be removed from my email address.
-- Hope this helps. Please reply to the newsgroup unless you wish to avail yourself of my services on a paid consulting basis. Doug Robbins - Word MVP "Teeroi" wrote in message oups.com... Thanks Doug - I was afraid you might say that. How would I contact you directly if I wanted to have you put a proposal together for a project such as this? |
Reply |
Thread Tools | |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
How can Word display full path of a file in the title bar? | Microsoft Word Help | |||
Does Word have a QuickCorrect/Quick Word option like WordPerfect? | New Users | |||
In Word, how do I surpress headers and footers on page 2 | Microsoft Word Help | |||
Envelope Address | New Users | |||
Macros - Keyboard Commands | Microsoft Word Help |