![]() |
|
#1
|
|||
|
|||
|
EDIT: This was not a macro issue, but an issue with the data source. Re-saving as a xslx file fixed the problem. Thanks for the help, though.
------------------ Hi. I have a document that I have been using for a number of years in word for windows (both 2003 and 2010). This document contains legacy form fields and I have been successfully using this macro to run a mail merge to create a new document with the form fields intact: Code:
Sub PreserveMailMergeFormFieldsNewDoc()
Dim fFieldText() As String
Dim iCount As Integer
Dim fField As FormField
Dim sWindowMain, sWindowMerge As String
On Error GoTo ErrHandler
' Store Main merge document window name.
sWindowMain = ActiveWindow.Caption
' Because the document contains form fields,
' it should be protected, so unprotect document.
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect
End If
' Loop through all text form fields
' in the main mail merge document.
For Each aField In ActiveDocument.FormFields
' If the form field is a text form field...
If aField.Type = wdFieldFormTextInput Then
' Redim array to hold contents of text field.
ReDim Preserve fFieldText(2, iCount + 1)
' Place content and name of field into array.
fFieldText(0, iCount) = aField.Result
fFieldText(1, iCount) = aField.Name
fFieldText(2, iCount) = aField.TextInput.Default
' Select the form field.
aField.Select
' Replace it with placeholder text.
Selection.TypeText "<" & fFieldText(1, iCount) & "PlaceHolder>"
' Increment icount
iCount = iCount + 1
End If
Next aField
' Perform mail merge to new document.
ActiveDocument.MailMerge.Destination = wdSendToNewDocument
ActiveDocument.MailMerge.Execute
' Find and Replace placeholders with form fields.
doFindReplace iCount, fField, fFieldText()
' Protect the merged document.
ActiveDocument.Protect Password:="xxxx", NoReset:=True, _
Type:=wdAllowOnlyFormFields
' Set zoom to 100 on merged document
ActiveWindow.ActivePane.View.Zoom.Percentage = 100
' Get name of final merged document.
sWindowMerge = ActiveWindow.Caption
' Reactivate the main merge document.
Windows(sWindowMain).Activate
' Find and replace placeholders with form fields.
doFindReplace iCount, fField, fFieldText()
' Switch back to the merged document.
Windows(sWindowMerge).Activate
ErrHandler:
End Sub
Sub doFindReplace(iCount As Integer, fField As FormField, fFieldText() As String)
' Go to top of document.
Selection.HomeKey Unit:=wdStory
' Initialize Find.
Selection.Find.ClearFormatting
With Selection.Find
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
' Loop form fields count.
For i = 0 To iCount
' Execute the find.
Do While .Execute(FindText:="<" & fFieldText(1, i) _
& "PlaceHolder>") = True
' Replace the placeholder with the form field.
Set fField = Selection.FormFields.Add _
(Range:=Selection.Range, Type:=wdFieldFormTextInput)
' Restore form field contents and bookmark name.
fField.Result = fFieldText(0, i)
fField.Name = fFieldText(1, i)
fField.TextInput.Default = fFieldText(2, i)
Loop
' Go to top of document for next find.
Selection.HomeKey Unit:=wdStory
Next
End With
End Sub
Really, I am out of my league here, so any help would be appreciated. Please note that I did not write the original macro, but got it from doing some googling. Thanks in advance for any help that anyone can give me. Last edited by iiiiifffff; 04-03-2013 at 12:44 PM. Reason: Add note to solution... |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
Excel 2003 Macro compatibilty with Windows 7
|
Chayes | Excel Programming | 1 | 07-15-2012 09:05 AM |
Why it works but the macro is error in VB?
|
tinfanide | Excel Programming | 5 | 12-03-2011 12:53 AM |
Works to word
|
Janette | Word | 1 | 11-12-2011 08:23 AM |
| Converting from Works | Menno Hershberger | Office | 0 | 09-01-2010 11:33 PM |
MS Works 2000
|
mommu | Office | 4 | 01-23-2006 02:40 PM |