Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Word / Mailmerge and Fax / April 2005

Tip: Looking for answers? Try searching our database.

lock/unlink MailMerge.fields in header

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
S.P. - 01 Apr 2005 15:57 GMT
I want to do a one-time (no update) MailMerge, into the existing document.
The permanent "locking" almost works with

Set myFields = ActiveDocument.Fields    ' or ActiveDocument.MailMerge.Fields
?!?
For Each fn in myFields
   If fn.type = wdFieldMergeField Then
       fn.Unlink
   End If
Next fn

Problem: the Fields in the header are not affected (which is good for page
numbers...but for that I have the " If fn.type = ..." ).

--> How can I unlink Mergefields in headers?

I just can't find the ActiveDocument.Fields  equivalent for headers.
Charles Kenyon - 01 Apr 2005 16:21 GMT
The following works for Ref field updating and should give you a leg up.
Private Sub RefFieldUpdateAllStory()
'   Written by Charles Kyle Kenyon 15 November 2001
'   repaired by Jezebel
'   All Story Field Updater - Ref fields
   Dim oField As Field
   Dim oStory As Range
'
   For Each oStory In ActiveDocument.StoryRanges
   ' This goes into headers and footers as well as the regular document
       Do
           For Each oField In oStory.Fields
               If oField.Type = wdFieldRef Then
                   oField.Update
               End If
           Next oField
           Set oStory = oStory.Next
       Loop Until oStory Is Nothing
   Next oStory
End Sub

Signature

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://www.mvps.org/word 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.

>I want to do a one-time (no update) MailMerge, into the existing document.
> The permanent "locking" almost works with
[quoted text clipped - 13 lines]
>
> I just can't find the ActiveDocument.Fields  equivalent for headers.
S.P. - 01 Apr 2005 17:37 GMT
Thank you so much!
I found your own (!) examples at
http://www.addbalance.com/word/faq_supplement.htm#updatefields
The solution was the "StoryRanges", and the nested loop
Here's the working Script:

Set MM = ActiveDocument.MailMerge

MM.OpenDataSource Name:="c:\pdb.mer"
MM.ViewMailMergeFieldCodes = False
MM.DataSource.Close

For Each SR In ActiveDocument.StoryRanges
   For Each F In SR.Fields
       If F.Type = wdFieldMergeField Then
           F.Unlink
       End If
   Next F
Next SR

End Sub

> The following works for Ref field updating and should give you a leg up.
> Private Sub RefFieldUpdateAllStory()
[quoted text clipped - 34 lines]
>>
>> I just can't find the ActiveDocument.Fields  equivalent for headers.
Charles Kenyon - 01 Apr 2005 17:53 GMT
There is a difference between unlink and lock. The difference is that
locking maintains the field structure and you can later unlock. This may not
matter with what you are doing. For me, it often does matter. Unlinking,
essentially, is permanent. On the other hand, it is a method rather than a
property.
Signature

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://www.mvps.org/word 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.

> Thank you so much!
> I found your own (!) examples at
[quoted text clipped - 57 lines]
>>>
>>> I just can't find the ActiveDocument.Fields  equivalent for headers.
Charles Kenyon - 01 Apr 2005 16:24 GMT
I haven't tested this yet:

Sub MergeFieldLockAllStory()
'   Written by Charles Kyle Kenyon 1 April 2005
'
'   All Story Field Locker - Merge fields
   Dim oField As Field
   Dim oStory As Range
'    On Error Resume Next
   For Each oStory In ActiveDocument.StoryRanges
   ' This goes into headers and footers as well as the regular document
       Do
           For Each oField In oStory.Fields
               If oField.Type = wdFieldMergeField Then
                   oField.Lock
               End If
           Next oField
           Set oStory = oStory.Next
       Loop Until oStory Is Nothing
   Next oStory
End Sub
Signature

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://www.mvps.org/word 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.

>I want to do a one-time (no update) MailMerge, into the existing document.
> The permanent "locking" almost works with
[quoted text clipped - 13 lines]
>
> I just can't find the ActiveDocument.Fields  equivalent for headers.
Charles Kenyon - 01 Apr 2005 16:40 GMT
Correction:

Sub MergeFieldLockAllStory()
'   Written by Charles Kyle Kenyon 1 April 2005
'
'   All Story Field Locker - Merge fields
   Dim oField As Field
   Dim oStory As Range
'    On Error Resume Next
   For Each oStory In ActiveDocument.StoryRanges
   ' This goes into headers and footers as well as the regular document
       Do
           For Each oField In oStory.Fields
               If oField.Type = wdFieldMergeField Then
                   oField.Locked = True
               End If
           Next oField
           Set oStory = oStory.Next
       Loop Until oStory Is Nothing
   Next oStory
End Sub

Apparently there is not a lock method but there is a locked property. I now
have tested, briefly.
Signature

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://www.mvps.org/word 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.

>I haven't tested this yet:
>
[quoted text clipped - 34 lines]
>>
>> I just can't find the ActiveDocument.Fields  equivalent for headers.
Charles Kenyon - 01 Apr 2005 16:26 GMT
Otherwise, you might consider a more drastic option.

Sub UnmergeThis()
' Written 29 August 2002 by Charles Kyle Kenyon
' Updated 23 September 2002 to attach normal.dot
' Remove merge codes from document, remove from merge status
'
   ' Test for template - in template only disconnect from merge but leave
merge fields active
   '
   On Error Resume Next
   If ActiveDocument.Type = wdTypeTemplate Then
   '
   '   Test for merge document - do not run if not merge document
   '
       If MergeTest() = False Then ' private function call
           Exit Sub
       End If
   '
   '   Disconnect template from merge data
       ActiveDocument.MailMerge.MainDocumentType = wdNotAMergeDocument
       Application.CommandBars("MergeK").Visible = False
       Exit Sub
   End If
   '
   '   Test for merge document - do not run if not merge document
   '
   If MergeTest() = False Then
       Exit Sub
   End If
   '
   Dim oField As Field
   Dim vMsgBoxResponse As Variant
   Dim sUserTemplates As String
   '
   ' Double check with user because permanent operation
   '
   vMsgBoxResponse = MsgBox(Prompt:= _
       "This will disconnect this document from the merge file." _
       & vbCrLf & "This cannot be undone." & vbCrLf & vbCrLf _
       & "Continue?", Buttons:= _
       vbQuestion + vbYesNo + vbDefaultButton1, _
       Title:="Continue?")
   If vMsgBoxResponse <> vbYes Then
       MsgBox Prompt:="No changes made to document.", _
           Title:="Merge connection still active."
       Exit Sub
   End If
   '
   '   OK to continue
   '
   Application.ScreenUpdating = False
   '
   For Each oField In ActiveDocument.Fields
       If oField.Type = wdFieldMergeField Then
           oField.Unlink
       End If
   Next oField
   '
   ActiveDocument.MailMerge.MainDocumentType = wdNotAMergeDocument
   '
   '   Disconnect from template - attach normal.dot
   '
   sUserTemplates =
Application.Options.DefaultFilePath(wdUserTemplatesPath)
   If Right(sUserTemplates, 1) <> "\" Then
       sUserTemplates = sUserTemplates & "\"
   End If
   ' sUserTemplates =
Application.Options.DefaultFilePath(wdUserTemplatesPath) & "\"
   With ActiveDocument
       .UpdateStylesOnOpen = False
       .AttachedTemplate = sUserTemplates & "Normal.dot"
   End With
   Application.ScreenUpdating = True
   Application.ScreenRefresh
'
End Sub
Signature

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://www.mvps.org/word 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.

>I want to do a one-time (no update) MailMerge, into the existing document.
> The permanent "locking" almost works with
[quoted text clipped - 13 lines]
>
> I just can't find the ActiveDocument.Fields  equivalent for headers.
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.