Как автоматизировать Word из Visual Basic для создания слияния для почтовых меток
Аннотация
В этой статье описывается, как автоматизировать Microsoft Office Word из приложения Microsoft Visual Basic для создания и выполнения слияния для почтовых меток.
Дополнительная информация
В примере кода в этой статье для источника данных используется текстовый файл с разделителями-табуляции. Текстовый файл содержит следующие поля:
- Contact_Name
- Address
- City
- Postal_Code
- Страна
Для создания источника данных текстового файла можно использовать любой текстовый редактор. Например, можно использовать Блокнот.
При создании источника данных не забудьте разделить поля (столбцы) с помощью символа вкладки и разделять записи (строки) с помощью возврата каретки. Ниже приведен пример того, как может отображаться текстовый файл:
Contact_NameAddress City Postal_Code Country
Maria AndersObere Str. 57 Berlin 12209 Germany
Thomas Hardy120 Hanover Sq. London WA1 1DP UK
Hanna MoosForsterstr. 57 Mannheim 68306 Germany
Laurence Lebihan 12, rue des Bouchers Marseille 13008 France
Примечание.
Вместо текстового файла с разделителями-вкладками можно использовать любой другой источник данных. Например, можно использовать базу данных Microsoft Access.
Пошаговый пример
- Запустите новый стандартный проект EXE в Visual Basic. По умолчанию создается форма с именем Form1.
- Добавьте CommandButton в Form1.
- Выберите библиотеку объектов Microsoft Word для версии Word, которую планируется автоматизировать, и нажмите кнопку "ОК".
- Скопируйте следующий код в окно кода Form1.
Аргумент Name для метода OpenDataSource в этом коде ссылается на источник данных как c:\data.txt. Если источник данных имеет другой путь или другое имя файла, измените эту строку в коде соответствующим образом.Private Sub Command1_Click() Dim oApp As Word.Application Dim oDoc As Word.Document 'Start a new document in Word Set oApp = CreateObject("Word.Application") Set oDoc = oApp.Documents.Add With oDoc.MailMerge 'Insert the mail merge fields temporarily so that 'you can use the range that contains the merge fields as a layout 'for your labels -- to use this as a layout, you can add it 'as an AutoText entry. With .Fields .Add oApp.Selection.Range, "Contact_Name" oApp.Selection.TypeParagraph .Add oApp.Selection.Range, "Address" oApp.Selection.TypeParagraph .Add oApp.Selection.Range, "City" oApp.Selection.TypeText " " .Add oApp.Selection.Range, "Postal_Code" oApp.Selection.TypeText " -- " .Add oApp.Selection.Range, "Country" End With Dim oAutoText As Word.AutoTextEntry Set oAutoText = oApp.NormalTemplate.AutoTextEntries.Add("MyLabelLayout", oDoc.Content) oDoc.Content.Delete 'Merge fields in document no longer needed now 'that the AutoText entry for the label layout 'has been added so delete it. 'Set up the mail merge type as mailing labels and use 'a tab-delimited text file as the data source. .MainDocumentType = wdMailingLabels .OpenDataSource Name:="C:\data.txt" 'Specify the data source here 'Create the new document for the labels using the AutoText entry 'you added -- 5160 is the label number to use for this sample. 'You can specify the label number you want to use for the output 'in the Name argument. oApp.MailingLabel.CreateNewDocument Name:="5160", Address:="", _ AutoText:="MyLabelLayout", LaserTray:=wdPrinterManualFeed 'Execute the mail merge to generate the labels. .Destination = wdSendToNewDocument .Execute 'Delete the AutoText entry you added oAutoText.Delete End With 'Close the original document and make Word visible so that 'the mail merge results are displayed oDoc.Close False oApp.Visible = True 'Prevent save to Normal template when user exits Word oApp.NormalTemplate.Saved = True End Sub
- Нажмите клавишу F5, чтобы запустить программу, и нажмите кнопку Command1. Документ с меткой рассылки создается с помощью данных, взятых из источника данных.
Ссылки
Чтобы получить дополнительные сведения об автоматизации Word или о создании документов слияния, щелкните следующие номера статей, чтобы просмотреть статьи в базе знаний Майкрософт:
220911 Как автоматизировать Microsoft Word для выполнения слияния с помощью Visual C++ и MFC
212034 создание почтовых меток с помощью слияния в Word