> Thanks Peter. I think from the duplicate code you supplied in the section
> of code starting with ".OpenDataSource" and with the duplication of code
[quoted text clipped - 68 lines]
> a
> > > computer crash in the mean time. You can find the thread at:
> > > I wanted to report that the macro works beautifully! Thank you much.
> > > Through a link you provided in the post I also learned how to put a new
[quoted text clipped - 9 lines]
> > > Thank you for your help.
> > > Bob
Thanks Peter. That is much clearer. I have made the changes as you
described them. I just have one question.
Below you seem to suggest putting
oMMMD.Close SaveChanges:=False
Set oMMMD = Nothing
between
End With
anf
Exit Sub
finish:
Close #1
Ok, but in your initial code you had a line between there already. It was
.Execute Pause:=False
such that it looked like the following.
End With
.Execute Pause:=False
Exit Sub
finish:
Close #1
Do I need that line? If so, where in relation to this statement of
"Execute: Pause=False" do I put these two lines?
oMMMD.Close SaveChanges:=False
Set oMMMD = Nothing
Thank you Peter.
> If you use the oMMMD stuff, the End With should replace the existing End
> With that would match the With oMMMD.MailMerge, i.e. instead of
[quoted text clipped - 113 lines]
> > a
> > > > computer crash in the mean time. You can find the thread at:
http://groups.google.co.uk/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&frame=right&th=5ea
579dbc0a20510&seekm=%23PWmwws%23DHA.2412%40TK2MSFTNGP12.phx.gbl#link19
> > > > I wanted to report that the macro works beautifully! Thank you much.
> > > > Through a link you provided in the post I also learned how to put a
[quoted text clipped - 14 lines]
> > > > Thank you for your help.
> > > > Bob
Peter Jamieson - 10 May 2004 09:29 GMT
I suppose I should have just posted the entire thing :-) :But there were one
or two options. Here'sthe code with the oMMMD stuff inserted. I hope it's
correct:
Sub ModifyZipFieldName()
' Macro by PJ Jamieson, March 2004
' v1.1 Modified May 2004 to do a merge to a document
' This macro looks for a field name called "ZIP/Postal Code"
' in the header record of a mail merge data source and modifies
' the name so that Word automatically maps its ZIP/Postal code
' to the field.
' Written for use with Word 2003/Outlook 2003, but it may work
' in earlier versions
' Requires the "Microsoft Scripting Runtime" object library:
' You will need to use the VBA Editor menu command
' Tools|References to add a reference to this library
' This macro is intended to be used when a merge is initiated
' from Outlook. In that case, I believe the following assumptions
' can be made:
' The merge data file is a Unicode format text file
' (notice that by default it has a .doc extension)
' Outlook reconnects to the data source and removes any
' sort/filter options you may have defined
' The macro also assumes that it is OK to create/overwrite a
' file with the same name as the data source + ".tmp"
Dim oFileSystemObject As Scripting.FileSystemObject
Dim oSourceStream As Scripting.TextStream
Dim oDestStream As Scripting.TextStream
Dim sHeaderRecord As String
Dim sMergeDataSourceName As String
Dim vMergeType As WdMailMergeMainDocType
' v1.1 don't need this line any more
' Dim vMergeDestination As WdMailMergeDestination
Dim oMMMD As Word.Document
On Error GoTo finish
Set oMMMD = ActiveDocument
With oMMMD.MailMerge
If .MainDocumentType = wdNotAMergeDocument Then
MsgBox "This document is not a mail merge main document"
Else
' Save merge type
vMergeType = .MainDocumentType
' v1.1 don't need this line any more
' vMergeDestination = .Destination
sMergeDataSourceName = .DataSource.Name
.MainDocumentType = wdNotAMergeDocument
Set oFileSystemObject = CreateObject("Scripting.FileSystemObject")
With oFileSystemObject
' This assumes the file is Unicode format (I think)
Set oSourceStream = .OpenTextFile( _
FileName:=sMergeDataSourceName, _
IOMode:=ForReading, _
Create:=False, _
Format:=TristateTrue)
' Verify that the required string exists before going any further
sHeaderRecord = oSourceStream.ReadLine
If InStr(1, sHeaderRecord, "ZIP/Postal Code") = 0 Then
MsgBox "Could not find the field name 'ZIP/Postal Code'" & _
"in the merge data source." & _
vbCrLf & "You will need to match fields manually"
oSourceStream.Close
Set oSourceStream = Nothing
Else
' create the output file
Set oDestStream = .CreateTextFile( _
FileName:=sMergeDataSourceName + ".tmp", _
overwrite:=True, _
unicode:=True)
' Make the substitution. The field names "ZIP" and "Postcode"
' seem to be recognised automatically by Word
oDestStream.WriteLine _
Text:=Replace(sHeaderRecord, "ZIP/Postal Code", "ZIP")
' copy the rest of the file
Do Until oSourceStream.AtEndOfStream
oDestStream.WriteLine Text:=oSourceStream.ReadLine
Loop
' Close everything and replace the old file by the new one
oDestStream.Close
Set oDestStream = Nothing
oSourceStream.Close
Set oSourceStream = Nothing
oFileSystemObject.DeleteFile _
filespec:=sMergeDataSourceName, _
force:=True
oFileSystemObject.MoveFile _
Source:=sMergeDataSourceName + ".tmp", _
Destination:=sMergeDataSourceName
End If
End With
Set oFileSystemObject = Nothing
End If
' Set up the mail merge data source etc. again
' You may find that you need to save and restore
' other settings
.OpenDataSource Name:=sMergeDataSourceName
.MainDocumentType = vMergeType
' v1.1 don't restore the original destination,
' just make it a newdocument
' .Destination = vMergeDestination
.Destination = wdSendToNewDocument
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
oMMMD.Close SaveChanges:=False
Set oMMMD = Nothing
Exit Sub
Exit Sub
finish:
Close #1
MsgBox "Error " & Err.Number & _
" when trying to modify the ZIP field name: " & _
vbCrLf & Err.Description
Err.Clear
On Error Resume Next
Set oSourceStream = Nothing
Set oDestStream = Nothing
Set oFileSystemObject = Nothing
Set oMMMD = Nothing
End Sub

Signature
Peter Jamieson
> Thanks Peter. That is much clearer. I have made the changes as you
> described them. I just have one question.
[quoted text clipped - 28 lines]
>
> Thank you Peter.
<snip
Bob S - 10 May 2004 21:24 GMT
Thanks Peter for postnng the entire macro. It worked fine. Thanks again!
Bob
> I suppose I should have just posted the entire thing :-) :But there were one
> or two options. Here'sthe code with the oMMMD stuff inserted. I hope it's
[quoted text clipped - 168 lines]
> >
> <snip