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.