Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
Preserve Bookmark in Mailmerge
I am using a system that interfaces with MS/Word. The system allows me to
create some mailmerge documents. The first document is a source document that holds a single merge field on a line as the only content. { MERGEFIELD Reference_Number } When this resolves it creates a document C:\TEMP\\LAP\\INTDLIFE.DOC containing the value of a database field called Reference_Number. A second document (also a mailmerge), pulls in the first document using { INCLUDETEXT "c:\\temp\\LAP\\INTDLIFE.DOC" } Now the problem is, when it includes the document it also includes the paragraph marker following the mergefield, and thus in the final resolved document their is an unwanted line break inserted, resulting in a blank line. I have read that this can be removed by defining a bookmark in the original document containing the merge field, by defining the bookmark over the mergefield but excluding the paragraph marker. Then in the second document expanding the INCLUDETEXT as follows { INCLUDETEXT "c:\\temp\\LAP\\INTDLIFE.DOC" BookmarkName } I tried this however it returned the message "Bookmark not found" or wording similar to this. This being because when the first document resolves into c:\ \temp\\LAP\\INTDLIFE.DOC, the bookmark is not preserved into that resolved document. I understand this is due to the bookmark name requiring to be unique, however I have seen some code posted elsewhere that duplicates the bookmark into the resolved document. I just cannot figure out how to do this though in my situation. I have no direct control over the documents other than creating them. The system actually automates the production of the final document initiating all the various steps of the mailmerge processes along the way. I am hoping it is possible to insert some VBA in the initial document containing the merge field, so that the bookmark is preserved in its resolved document, so that the document containing the INCLUDETEXT can find it. Is this possible? Many thanks Stephen Lasham |
#2
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
Preserve Bookmark in Mailmerge
' Macro created by Doug Robbins to "preserve" bookmarks during a MailMerge
' Dim abm As Bookmark, bmrange As Range, i As Long, Result As Document, j As Long, k As Long, linkrange As Range, linktarget As String Dim Source As Document Set Source = ActiveDocument i = 1 For j = 1 To Source.MailMerge.DataSource.RecordCount For Each abm In ActiveDocument.Range.Bookmarks System.PrivateProfileString("c:\bookmarks.txt", "bookmarkNames", "bookmark" & i) = abm.Name & Format(j) i = i + 1 Next Next j For Each abm In ActiveDocument.Range.Bookmarks abm.Range.InsertBefore "#" abm.Range.InsertAfter "#" Next With ActiveDocument.MailMerge .Destination = wdSendToNewDocument .Execute End With Set Result = ActiveDocument k = 1 Selection.HomeKey wdStory Selection.Find.ClearFormatting With Selection.Find Do While .Execute(FindText:="#*#", MatchWildcards:=True, Wrap:=wdFindContinue, Forward:=True) = True Set bmrange = Selection.Range bmrange.Characters(bmrange.Characters.Count).Delet e bmrange.Characters(1).Delete Result.Bookmarks.Add System.PrivateProfileString("c:\bookmarks.txt", "bookmarkNames", "bookmark" & k), bmrange k = k + 1 Loop End With For i = 1 To Result.Hyperlinks.Count linktarget = Result.Hyperlinks(i).SubAddress Set linkrange = Result.Hyperlinks(i).Range linkrange.Select linktarget = linktarget & Format(Selection.Information(wdActiveEndSectionNum ber)) Result.Hyperlinks.Add Result.Hyperlinks(i).Range, "", linktarget Next i Source.Activate Selection.HomeKey wdStory Selection.Find.ClearFormatting With Selection.Find Do While .Execute(FindText:="#*#", MatchWildcards:=True, Wrap:=wdFindContinue, Forward:=True) = True Set bmrange = Selection.Range bmrange.Characters(bmrange.Characters.Count).Delet e bmrange.Characters(1).Delete Loop End With -- 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 "Slash" u36791@uwe wrote in message news:76ff84b94c64f@uwe... I am using a system that interfaces with MS/Word. The system allows me to create some mailmerge documents. The first document is a source document that holds a single merge field on a line as the only content. { MERGEFIELD Reference_Number } When this resolves it creates a document C:\TEMP\\LAP\\INTDLIFE.DOC containing the value of a database field called Reference_Number. A second document (also a mailmerge), pulls in the first document using { INCLUDETEXT "c:\\temp\\LAP\\INTDLIFE.DOC" } Now the problem is, when it includes the document it also includes the paragraph marker following the mergefield, and thus in the final resolved document their is an unwanted line break inserted, resulting in a blank line. I have read that this can be removed by defining a bookmark in the original document containing the merge field, by defining the bookmark over the mergefield but excluding the paragraph marker. Then in the second document expanding the INCLUDETEXT as follows { INCLUDETEXT "c:\\temp\\LAP\\INTDLIFE.DOC" BookmarkName } I tried this however it returned the message "Bookmark not found" or wording similar to this. This being because when the first document resolves into c:\ \temp\\LAP\\INTDLIFE.DOC, the bookmark is not preserved into that resolved document. I understand this is due to the bookmark name requiring to be unique, however I have seen some code posted elsewhere that duplicates the bookmark into the resolved document. I just cannot figure out how to do this though in my situation. I have no direct control over the documents other than creating them. The system actually automates the production of the final document initiating all the various steps of the mailmerge processes along the way. I am hoping it is possible to insert some VBA in the initial document containing the merge field, so that the bookmark is preserved in its resolved document, so that the document containing the INCLUDETEXT can find it. Is this possible? Many thanks Stephen Lasham |
#3
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
Preserve Bookmark in Mailmerge
Thanks, this is the same Macro as I had found in another thread, but it
doesn't have a macro name to it, and I do not know how to cause this to auto run when the application I mentioned does all the mailmerge stuff. I am guessing this needs to be encompassed in a function or subroutine, with a begin sub and end sub statement, and that this will be a special subroutine that word recongises to auto run, is this the case? Doug Robbins - Word MVP wrote: ' Macro created by Doug Robbins to "preserve" bookmarks during a MailMerge ' Dim abm As Bookmark, bmrange As Range, i As Long, Result As Document, j As Long, k As Long, linkrange As Range, linktarget As String Dim Source As Document Set Source = ActiveDocument i = 1 For j = 1 To Source.MailMerge.DataSource.RecordCount For Each abm In ActiveDocument.Range.Bookmarks System.PrivateProfileString("c:\bookmarks.txt", "bookmarkNames", "bookmark" & i) = abm.Name & Format(j) i = i + 1 Next Next j For Each abm In ActiveDocument.Range.Bookmarks abm.Range.InsertBefore "#" abm.Range.InsertAfter "#" Next With ActiveDocument.MailMerge .Destination = wdSendToNewDocument .Execute End With Set Result = ActiveDocument k = 1 Selection.HomeKey wdStory Selection.Find.ClearFormatting With Selection.Find Do While .Execute(FindText:="#*#", MatchWildcards:=True, Wrap:=wdFindContinue, Forward:=True) = True Set bmrange = Selection.Range bmrange.Characters(bmrange.Characters.Count).Delet e bmrange.Characters(1).Delete Result.Bookmarks.Add System.PrivateProfileString("c:\bookmarks.txt", "bookmarkNames", "bookmark" & k), bmrange k = k + 1 Loop End With For i = 1 To Result.Hyperlinks.Count linktarget = Result.Hyperlinks(i).SubAddress Set linkrange = Result.Hyperlinks(i).Range linkrange.Select linktarget = linktarget & Format(Selection.Information(wdActiveEndSectionNu mber)) Result.Hyperlinks.Add Result.Hyperlinks(i).Range, "", linktarget Next i Source.Activate Selection.HomeKey wdStory Selection.Find.ClearFormatting With Selection.Find Do While .Execute(FindText:="#*#", MatchWildcards:=True, Wrap:=wdFindContinue, Forward:=True) = True Set bmrange = Selection.Range bmrange.Characters(bmrange.Characters.Count).Delet e bmrange.Characters(1).Delete Loop End With I am using a system that interfaces with MS/Word. The system allows me to create some mailmerge documents. [quoted text clipped - 50 lines] Stephen Lasham -- Message posted via OfficeKB.com http://www.officekb.com/Uwe/Forums.a...merge/200708/1 |
#4
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
Preserve Bookmark in Mailmerge
The above routine also appears to handle in the middle, the creation of the
new document, but this is done by the application I referred to. So I am guessing this script isn't going to work for me. Would you agree? Doug Robbins - Word MVP wrote: ' Macro created by Doug Robbins to "preserve" bookmarks during a MailMerge ' Dim abm As Bookmark, bmrange As Range, i As Long, Result As Document, j As Long, k As Long, linkrange As Range, linktarget As String Dim Source As Document Set Source = ActiveDocument i = 1 For j = 1 To Source.MailMerge.DataSource.RecordCount For Each abm In ActiveDocument.Range.Bookmarks System.PrivateProfileString("c:\bookmarks.txt", "bookmarkNames", "bookmark" & i) = abm.Name & Format(j) i = i + 1 Next Next j For Each abm In ActiveDocument.Range.Bookmarks abm.Range.InsertBefore "#" abm.Range.InsertAfter "#" Next With ActiveDocument.MailMerge .Destination = wdSendToNewDocument .Execute End With Set Result = ActiveDocument k = 1 Selection.HomeKey wdStory Selection.Find.ClearFormatting With Selection.Find Do While .Execute(FindText:="#*#", MatchWildcards:=True, Wrap:=wdFindContinue, Forward:=True) = True Set bmrange = Selection.Range bmrange.Characters(bmrange.Characters.Count).Delet e bmrange.Characters(1).Delete Result.Bookmarks.Add System.PrivateProfileString("c:\bookmarks.txt", "bookmarkNames", "bookmark" & k), bmrange k = k + 1 Loop End With For i = 1 To Result.Hyperlinks.Count linktarget = Result.Hyperlinks(i).SubAddress Set linkrange = Result.Hyperlinks(i).Range linkrange.Select linktarget = linktarget & Format(Selection.Information(wdActiveEndSectionNu mber)) Result.Hyperlinks.Add Result.Hyperlinks(i).Range, "", linktarget Next i Source.Activate Selection.HomeKey wdStory Selection.Find.ClearFormatting With Selection.Find Do While .Execute(FindText:="#*#", MatchWildcards:=True, Wrap:=wdFindContinue, Forward:=True) = True Set bmrange = Selection.Range bmrange.Characters(bmrange.Characters.Count).Delet e bmrange.Characters(1).Delete Loop End With I am using a system that interfaces with MS/Word. The system allows me to create some mailmerge documents. [quoted text clipped - 50 lines] Stephen Lasham -- Message posted via OfficeKB.com http://www.officekb.com/Uwe/Forums.a...merge/200708/1 |
#5
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
Preserve Bookmark in Mailmerge
I doubt that you should be using mailmerge for this application.
-- 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 "Slash via OfficeKB.com" u36791@uwe wrote in message news:7701c3c1788b0@uwe... The above routine also appears to handle in the middle, the creation of the new document, but this is done by the application I referred to. So I am guessing this script isn't going to work for me. Would you agree? Doug Robbins - Word MVP wrote: ' Macro created by Doug Robbins to "preserve" bookmarks during a MailMerge ' Dim abm As Bookmark, bmrange As Range, i As Long, Result As Document, j As Long, k As Long, linkrange As Range, linktarget As String Dim Source As Document Set Source = ActiveDocument i = 1 For j = 1 To Source.MailMerge.DataSource.RecordCount For Each abm In ActiveDocument.Range.Bookmarks System.PrivateProfileString("c:\bookmarks.txt", "bookmarkNames", "bookmark" & i) = abm.Name & Format(j) i = i + 1 Next Next j For Each abm In ActiveDocument.Range.Bookmarks abm.Range.InsertBefore "#" abm.Range.InsertAfter "#" Next With ActiveDocument.MailMerge .Destination = wdSendToNewDocument .Execute End With Set Result = ActiveDocument k = 1 Selection.HomeKey wdStory Selection.Find.ClearFormatting With Selection.Find Do While .Execute(FindText:="#*#", MatchWildcards:=True, Wrap:=wdFindContinue, Forward:=True) = True Set bmrange = Selection.Range bmrange.Characters(bmrange.Characters.Count).Delet e bmrange.Characters(1).Delete Result.Bookmarks.Add System.PrivateProfileString("c:\bookmarks.txt", "bookmarkNames", "bookmark" & k), bmrange k = k + 1 Loop End With For i = 1 To Result.Hyperlinks.Count linktarget = Result.Hyperlinks(i).SubAddress Set linkrange = Result.Hyperlinks(i).Range linkrange.Select linktarget = linktarget & Format(Selection.Information(wdActiveEndSectionN umber)) Result.Hyperlinks.Add Result.Hyperlinks(i).Range, "", linktarget Next i Source.Activate Selection.HomeKey wdStory Selection.Find.ClearFormatting With Selection.Find Do While .Execute(FindText:="#*#", MatchWildcards:=True, Wrap:=wdFindContinue, Forward:=True) = True Set bmrange = Selection.Range bmrange.Characters(bmrange.Characters.Count).Delet e bmrange.Characters(1).Delete Loop End With I am using a system that interfaces with MS/Word. The system allows me to create some mailmerge documents. [quoted text clipped - 50 lines] Stephen Lasham -- Message posted via OfficeKB.com http://www.officekb.com/Uwe/Forums.a...merge/200708/1 |
#6
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
Preserve Bookmark in Mailmerge
This makes it pretty hard to do.
The only way I can think of is to use Word's MailMerge Events to alter the output document before the calling process saves it. It is certainly worth a try. In your Mail Merge Main Document you will need a. to add a Class Module, e.g. in the VBA Editor, with the Mail Merge Main document open, use Insert-Class Module b. In the module's properties (you may see these in a window at the bottom left) change the module name to ECM (short for Event Class Module) c. In that module, insert the following code: Public WithEvents App As Word.Application Private Sub App_MailMergeAfterMerge(ByVal Doc As Document, ByVal DocResult As Document) ActiveDocument.Range(Start:=0, End:=ActiveDocument.Range.End - 1).Bookmarks.Add "bkmbody" End Sub d. Create an ordinary module (e.g. Insert-Module and insert the following code: Public X As ECM Sub Register_Event_Handler() Set X = New ECM Set X.App = Word.Application End Sub Sub Unregister_Event_Handler() Set X.App = Nothing Set X = Nothing End Sub Sub autoopen() Call Register_Event_Handler End Sub Sub autoclose() Call Unregister_Event_Handler End Sub e. save and close the Mail Merge Main document. When it is opened, the mail merge events should be enabled , so that when the calling process finishes merging, the bookmark should be set. However, be aware that 1. the calling applicaiton needs to be able to open documents that contain macros without a dialog popping up 2. the calling applicaiton probably needs to /close/ the document for the application-wide event handler to close down properly 3. you may need to tweak the event handling code to deal with, e.g. a situaition where the merge fails, etc. In other words, this is just a starting point. -- Peter Jamieson http://tips.pjmsn.me.uk "Slash" u36791@uwe wrote in message news:76ff84b94c64f@uwe... I am using a system that interfaces with MS/Word. The system allows me to create some mailmerge documents. The first document is a source document that holds a single merge field on a line as the only content. { MERGEFIELD Reference_Number } When this resolves it creates a document C:\TEMP\\LAP\\INTDLIFE.DOC containing the value of a database field called Reference_Number. A second document (also a mailmerge), pulls in the first document using { INCLUDETEXT "c:\\temp\\LAP\\INTDLIFE.DOC" } Now the problem is, when it includes the document it also includes the paragraph marker following the mergefield, and thus in the final resolved document their is an unwanted line break inserted, resulting in a blank line. I have read that this can be removed by defining a bookmark in the original document containing the merge field, by defining the bookmark over the mergefield but excluding the paragraph marker. Then in the second document expanding the INCLUDETEXT as follows { INCLUDETEXT "c:\\temp\\LAP\\INTDLIFE.DOC" BookmarkName } I tried this however it returned the message "Bookmark not found" or wording similar to this. This being because when the first document resolves into c:\ \temp\\LAP\\INTDLIFE.DOC, the bookmark is not preserved into that resolved document. I understand this is due to the bookmark name requiring to be unique, however I have seen some code posted elsewhere that duplicates the bookmark into the resolved document. I just cannot figure out how to do this though in my situation. I have no direct control over the documents other than creating them. The system actually automates the production of the final document initiating all the various steps of the mailmerge processes along the way. I am hoping it is possible to insert some VBA in the initial document containing the merge field, so that the bookmark is preserved in its resolved document, so that the document containing the INCLUDETEXT can find it. Is this possible? Many thanks Stephen Lasham |
#7
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
Preserve Bookmark in Mailmerge
This makes it pretty hard to do.
By "this" I meant: I have no direct control over the documents other than creating them. The system actually automates the production of the final document initiating all the various steps of the mailmerge processes along the way. -- Peter Jamieson http://tips.pjmsn.me.uk "Peter Jamieson" wrote in message ... This makes it pretty hard to do. The only way I can think of is to use Word's MailMerge Events to alter the output document before the calling process saves it. It is certainly worth a try. In your Mail Merge Main Document you will need a. to add a Class Module, e.g. in the VBA Editor, with the Mail Merge Main document open, use Insert-Class Module b. In the module's properties (you may see these in a window at the bottom left) change the module name to ECM (short for Event Class Module) c. In that module, insert the following code: Public WithEvents App As Word.Application Private Sub App_MailMergeAfterMerge(ByVal Doc As Document, ByVal DocResult As Document) ActiveDocument.Range(Start:=0, End:=ActiveDocument.Range.End - 1).Bookmarks.Add "bkmbody" End Sub d. Create an ordinary module (e.g. Insert-Module and insert the following code: Public X As ECM Sub Register_Event_Handler() Set X = New ECM Set X.App = Word.Application End Sub Sub Unregister_Event_Handler() Set X.App = Nothing Set X = Nothing End Sub Sub autoopen() Call Register_Event_Handler End Sub Sub autoclose() Call Unregister_Event_Handler End Sub e. save and close the Mail Merge Main document. When it is opened, the mail merge events should be enabled , so that when the calling process finishes merging, the bookmark should be set. However, be aware that 1. the calling applicaiton needs to be able to open documents that contain macros without a dialog popping up 2. the calling applicaiton probably needs to /close/ the document for the application-wide event handler to close down properly 3. you may need to tweak the event handling code to deal with, e.g. a situaition where the merge fails, etc. In other words, this is just a starting point. -- Peter Jamieson http://tips.pjmsn.me.uk "Slash" u36791@uwe wrote in message news:76ff84b94c64f@uwe... I am using a system that interfaces with MS/Word. The system allows me to create some mailmerge documents. The first document is a source document that holds a single merge field on a line as the only content. { MERGEFIELD Reference_Number } When this resolves it creates a document C:\TEMP\\LAP\\INTDLIFE.DOC containing the value of a database field called Reference_Number. A second document (also a mailmerge), pulls in the first document using { INCLUDETEXT "c:\\temp\\LAP\\INTDLIFE.DOC" } Now the problem is, when it includes the document it also includes the paragraph marker following the mergefield, and thus in the final resolved document their is an unwanted line break inserted, resulting in a blank line. I have read that this can be removed by defining a bookmark in the original document containing the merge field, by defining the bookmark over the mergefield but excluding the paragraph marker. Then in the second document expanding the INCLUDETEXT as follows { INCLUDETEXT "c:\\temp\\LAP\\INTDLIFE.DOC" BookmarkName } I tried this however it returned the message "Bookmark not found" or wording similar to this. This being because when the first document resolves into c:\ \temp\\LAP\\INTDLIFE.DOC, the bookmark is not preserved into that resolved document. I understand this is due to the bookmark name requiring to be unique, however I have seen some code posted elsewhere that duplicates the bookmark into the resolved document. I just cannot figure out how to do this though in my situation. I have no direct control over the documents other than creating them. The system actually automates the production of the final document initiating all the various steps of the mailmerge processes along the way. I am hoping it is possible to insert some VBA in the initial document containing the merge field, so that the bookmark is preserved in its resolved document, so that the document containing the INCLUDETEXT can find it. Is this possible? Many thanks Stephen Lasham |
#8
Posted to microsoft.public.word.mailmerge.fields
|
|||
|
|||
Preserve Bookmark in Mailmerge
Thanks for this, it seems the application is using MS/Word VBA code behind
the scenes as when I added this in it caused the VBA editor to pop up with all the applications code showing, very interesting. If I now look at the two sets of solutions you have provided for me I may be able to see where I can adjust the suppliers code, and then send them though some changes. Thank you so much for the time you have given, it is greatly appreciated. Stephen Peter Jamieson wrote: This makes it pretty hard to do. By "this" I meant: I have no direct control over the documents other than creating them. The system actually automates the production of the final document initiating all the various steps of the mailmerge processes along the way. This makes it pretty hard to do. [quoted text clipped - 111 lines] Stephen Lasham -- Message posted via OfficeKB.com http://www.officekb.com/Uwe/Forums.a...merge/200708/1 |
Reply |
Thread Tools | |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
how to preserve the bookmark while using mailmerge feature | Mailmerge | |||
My noteref to valid bookmark says "Error! Bookmark not defined."? | Microsoft Word Help | |||
The Insert Bookmark box shouldnt vanish after adding a bookmark. | Microsoft Word Help | |||
Word should preserve cycles of track changes | Microsoft Word Help | |||
Preserve Formatting of TOC | Microsoft Word Help |