Help and Support

How To Automate Microsoft Word to Perform Mail Merge from Visual Basic

Article ID:220607
Last Review:January 24, 2007
Revision:6.3
This article was previously published under Q220607
On This Page

SUMMARY

This article demonstrates how to use Microsoft Word to create a mail-merged document by using Automation from Microsoft Visual Basic.

Back to the top

MORE INFORMATION

There are two ways to control an Automation server: by using late binding or by using early binding. With late binding, methods are not bound until runtime and the Automation server is declared as Object. With early binding, your application knows at design-time the exact type of object it will be communicating with and can declare its objects as a specific type. This sample uses early binding, which is considered better in most cases because it affords greater performance and better type safety.

To early bind to an Automation server, you have to set a reference to that server's type library. In Visual Basic, this is done through the References dialog box. To open the References dialog box, click References on the Project menu. For this sample, you have to add a reference to the type library for Word before you can run the code.

Back to the top

Building the Automation Sample

1.Start Visual Basic, and create a new Standard EXE project. Form1 is created by default.
2.Add a CommandButton control to Form1.
3.On the Project menu, click References to open the References dialog box.
4.Select Microsoft Word 11.0 Object Library to create a reference to the Microsoft Office Word 2003 type library. For Word 2002, select Microsoft Word 10.0 Object Library. For Word 2000, select Microsoft Word 9.0 Object Library. For Word 97, select Microsoft Word 8.0 Object Library.
5.Click OK to close the References dialog box.
6.In the code window for Form1, add the following code:
Option Explicit
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document

Private Sub Command1_Click()
  Dim wrdSelection As Word.Selection
  Dim wrdMailMerge As Word.MailMerge
  Dim wrdMergeFields As Word.MailMergeFields

  Dim StrToAdd As String
  
' Create an instance of Word, and make it visible.
  Set wrdApp = CreateObject("Word.Application")
  wrdApp.Visible = True
  
' Add a new document.

  Set wrdDoc = wrdApp.Documents.Add
  wrdDoc.Select
  
  Set wrdSelection = wrdApp.Selection
  Set wrdMailMerge = wrdDoc.MailMerge
  
' Create the MailMerge Data file.
  CreateMailMergeDataFile
  
' Create a string, and insert it into the document.
  StrToAdd = "State University" & vbCr & _
           "Electrical Engineering Department"
  wrdSelection.ParagraphFormat.Alignment = wdAlignParagraphCenter
  wrdSelection.TypeText StrToAdd
   
  InsertLines 4
   
' Insert merge data.
  wrdSelection.ParagraphFormat.Alignment = wdAlignParagraphLeft
  Set wrdMergeFields = wrdMailMerge.Fields
  wrdMergeFields.Add wrdSelection.Range, "FirstName"
  wrdSelection.TypeText " "
  wrdMergeFields.Add wrdSelection.Range, "LastName"
  wrdSelection.TypeParagraph

  wrdMergeFields.Add wrdSelection.Range, "Address"
  wrdSelection.TypeParagraph
  wrdMergeFields.Add wrdSelection.Range, "CityStateZip"
    
  InsertLines 2
  
' Right align the line, and insert a date field
' with the current date.
  wrdSelection.ParagraphFormat.Alignment = _
        wdAlignParagraphRight
  wrdSelection.InsertDateTime _
        DateTimeFormat:="dddd, MMMM dd, yyyy", _
        InsertAsField:=False
        
  InsertLines 2
  
' Align the rest of the document.
  wrdSelection.ParagraphFormat.Alignment = _
        wdAlignParagraphJustify

  

  wrdSelection.TypeText "Dear "
  wrdMergeFields.Add wrdSelection.Range, "FirstName"
  wrdSelection.TypeText ","
  InsertLines 2
  
  ' Create a string, and insert it into the document.
  StrToAdd = "Thank you for your recent request for next " & _
      "semester's class schedule for the Electrical " & _
      "Engineering Department. Enclosed with this " & _
      "letter is a booklet containing all the classes " & _
      "offered next semester at State University.  " & _
      "Several new classes will be offered in the " & _
      "Electrical Engineering Department next semester.  " & _
      "These classes are listed below."
  wrdSelection.TypeText StrToAdd
  
  InsertLines 2
  
  ' Insert a new table with 9 rows and 4 columns.
  wrdDoc.Tables.Add wrdSelection.Range, NumRows:=9, _
       NumColumns:=4
  With wrdDoc.Tables(1)
    ' Set the column widths
    .Columns(1).SetWidth 51, wdAdjustNone
    .Columns(2).SetWidth 170, wdAdjustNone
    .Columns(3).SetWidth 100, wdAdjustNone
    .Columns(4).SetWidth 111, wdAdjustNone
    ' Set the shading on the first row to light gray.
    .Rows(1).Cells.Shading.BackgroundPatternColorIndex = _
       wdGray25
    ' Format the first row in bold.
    .Rows(1).Range.Bold = True
    ' Center the text in Cell (1,1).
    .Cell(1, 1).Range.Paragraphs.Alignment = wdAlignParagraphCenter
    
    ' Fill each row of the table with data.
    FillRow wrdDoc, 1, "Class Number", "Class Name", "Class Time", _
       "Instructor"
    FillRow wrdDoc, 2, "EE220", "Introduction to Electronics II", _
       "1:00-2:00 M,W,F", "Dr. Jensen"
    FillRow wrdDoc, 3, "EE230", "Electromagnetic Field Theory I", _
       "10:00-11:30 T,T", "Dr. Crump"
    FillRow wrdDoc, 4, "EE300", "Feedback Control Systems", _
       "9:00-10:00 M,W,F", "Dr. Murdy"
    FillRow wrdDoc, 5, "EE325", "Advanced Digital Design", _
       "9:00-10:30 T,T", "Dr. Alley"
    FillRow wrdDoc, 6, "EE350", "Advanced Communication Systems", _
       "9:00-10:30 T,T", "Dr. Taylor"
    FillRow wrdDoc, 7, "EE400", "Advanced Microwave Theory", _
       "1:00-2:30 T,T", "Dr. Lee"
    FillRow wrdDoc, 8, "EE450", "Plasma Theory", _
       "1:00-2:00 M,W,F", "Dr. Davis"

    FillRow wrdDoc, 9, "EE500", "Principles of VLSI Design", _
       "3:00-4:00 M,W,F", "Dr. Ellison"
  End With
  
  ' Go to the end of the document.
  wrdApp.Selection.GoTo wdGoToLine, wdGoToLast
  InsertLines 2
  
  ' Create a string, and insert it into the document.
  StrToAdd = "For additional information regarding the " & _

             "Department of Electrical Engineering, " & _
             "you can visit our Web site at "
  wrdSelection.TypeText StrToAdd
  ' Insert a hyperlink to the Web page.
  wrdSelection.Hyperlinks.Add Anchor:=wrdSelection.Range, _
     Address:="http://www.ee.stateu.tld"
  ' Create a string, and insert it into the document.
  StrToAdd = ".  Thank you for your interest in the classes " & _
             "offered in the Department of Electrical " & _
             "Engineering.  If you have any other questions, " & _
             "please feel free to give us a call at " & _
             "555-1212." & vbCr & vbCr & _
             "Sincerely," & vbCr & vbCr & _
             "Kathryn M. Hinsch" & vbCr & _
             "Department of Electrical Engineering" & vbCr
  wrdSelection.TypeText StrToAdd
   
' Perform mail merge.
  wrdMailMerge.Destination = wdSendToNewDocument
  wrdMailMerge.Execute False
  
' Close the original form document.
  wrdDoc.Saved = True
  wrdDoc.Close False
  
' Notify user we are done.
  MsgBox "Mail Merge Complete.", vbMsgBoxSetForeground
  
' Release references.
  Set wrdSelection = Nothing
  Set wrdMailMerge = Nothing
  Set wrdMergeFields = Nothing
  Set wrdDoc = Nothing
  Set wrdApp = Nothing
  
' Clean up the temp file.
  Kill "C:\DataDoc.doc"
End Sub

Public Sub InsertLines(LineNum As Integer)
  Dim iCount As Integer

' Insert "LineNum" blank lines.
  For iCount = 1 To LineNum
    wrdApp.Selection.TypeParagraph
  Next iCount
End Sub

Public Sub FillRow(Doc As Word.Document, Row As Integer, _
                   Text1 As String, Text2 As String, _
                   Text3 As String, Text4 As String)
                   
  With Doc.Tables(1)
    ' Insert the data into the specific cell.
    .Cell(Row, 1).Range.InsertAfter Text1
    .Cell(Row, 2).Range.InsertAfter Text2
    .Cell(Row, 3).Range.InsertAfter Text3
    .Cell(Row, 4).Range.InsertAfter Text4
  End With
End Sub

Public Sub CreateMailMergeDataFile()
  Dim wrdDataDoc As Word.Document
  Dim iCount As Integer
  
' Create a data source at C:\DataDoc.doc that contains the field data.
  wrdDoc.MailMerge.CreateDataSource Name:="C:\DataDoc.doc", _
        HeaderRecord:="FirstName, LastName, Address, CityStateZip"
' Open the file to insert the data.
  Set wrdDataDoc = wrdApp.Documents.Open("C:\DataDoc.doc")
  For iCount = 1 To 2
    wrdDataDoc.Tables(1).Rows.Add
  Next iCount
' Fill in the data.
  FillRow wrdDataDoc, 2, "Steve", "DeBroux", _
        "4567 Main Street", "Buffalo, NY  98052"
  FillRow wrdDataDoc, 3, "Jan", "Miksovsky", _
        "1234 5th Street", "Charlotte, NC  98765"
  FillRow wrdDataDoc, 4, "Brian", "Valentine", _
        "12348 78th Street  Apt. 214", "Lubbock, TX  25874"
' Save and close the file.
  wrdDataDoc.Save
  wrdDataDoc.Close False
End Sub
					
7.Press the F5 key and click the button to run the sample.

Back to the top

REFERENCES

For more information on Office Automation, visit the following Microsoft Office Development support site:
http://support.microsoft.com/ofd (http://support.microsoft.com/ofd)

Back to the top


APPLIES TO
Microsoft Visual Basic 6.0 Learning Edition
Microsoft Visual Basic 5.0 Learning Edition
Microsoft Visual Basic 6.0 Professional Edition
Microsoft Visual Basic 5.0 Professional Edition
Microsoft Visual Basic 6.0 Enterprise Edition
Microsoft Visual Basic 5.0 Enterprise Edition
Microsoft Office Standard Edition 2003
Microsoft Office XP Developer Edition
Microsoft Office 2000 Developer Edition
Microsoft Office Word 2003
Microsoft Word 2002 Standard Edition
Microsoft Word 2000 Standard Edition
Microsoft Word 97 Standard Edition

Back to the top

Keywords: 
kbautomation kbhowto KB220607

Back to the top

Article Translations

 

Other Support Options

  • Contact Microsoft
    Phone Numbers, Support Options and Pricing, Online Help, and more.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.