Automatización de Word desde Visual Basic para crear una combinación de correspondencia para etiquetas postales

Resumen

En este artículo se describe cómo automatizar Microsoft Office Word desde una aplicación de Microsoft Visual Basic para crear y ejecutar una combinación de correspondencia para etiquetas postales.

Más información

El código de ejemplo de este artículo usa un archivo de texto delimitado por tabulaciones para el origen de datos. El archivo de texto tiene los siguientes campos:

  • Contact_Name
  • Dirección
  • Ciudad
  • Postal_Code
  • País

Puede usar cualquier editor de texto para crear el origen de datos del archivo de texto. Por ejemplo, puede usar el Bloc de notas.

Al crear el origen de datos, recuerde separar los campos (columnas) mediante un carácter de tabulación y separar los registros (filas) mediante un retorno de carro. A continuación se muestra un ejemplo de cómo puede aparecer el archivo de texto:

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

Nota:

Puede usar cualquier otro origen de datos en lugar del archivo de texto delimitado por tabulaciones. Por ejemplo, puede usar una base de datos de Microsoft Access.

Ejemplo paso a paso

  1. Inicie un nuevo proyecto EXE estándar en Visual Basic. De forma predeterminada, se crea un formulario denominado Form1.
  2. Agregue un control CommandButton a Form1.
  3. Seleccione la biblioteca de objetos de Microsoft Word para la versión de Word que quiere automatizar y, a continuación, haga clic en Aceptar.
  4. Copie el código siguiente en la ventana de código de Form1.
    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
    
    
    El argumento Name del método OpenDataSource de este código hace referencia al origen de datos como c:\data.txt. Si el origen de datos tiene una ruta de acceso diferente o un nombre de archivo diferente, modifique esta línea en el código en consecuencia.
  5. Presione la tecla F5 para ejecutar el programa y, a continuación, haga clic en Comando1. Se crea un documento de etiqueta postal mediante datos tomados del origen de datos.

Referencias

Para obtener más información sobre cómo automatizar Word o sobre cómo crear documentos de combinación de correspondencia, haga clic en los números de artículo siguientes para ver los artículos en Microsoft Knowledge Base:

220911 Automatización de Microsoft Word para realizar una combinación de correspondencia mediante Visual C++ y MFC

212034 Creación de etiquetas postales mediante combinación de correspondencia en Word