Crear Cartas en Word desde Excel





Seguramente en varias oportunidades se ha tenido la necesidad de mandar una carta en serie a un listado del clientes que se tiene en una hoja de Excel, es bastante tedioso tener que estar haciéndolo uno por uno, hoy te presentó una macro que permite enviar una carta a un listado de personas que se tiene en una hoja de Excel utilizando Word; es decir la macro conecta Excel con Word y crea una carta o postal para cada uno de las personas listadas en Excel, ello presionando simplemente un botón.


Otros post relacionados con macros que permiten manejar Word desde Excel:
Como crear un archivo de Word con Excel
Como abrir un archivo de Word con Excel
Como conectar Excel con Word crear archivo e insertar texto en Word
Como dar formato a texto de Word desde Excel 
Como abrir modificar e imprimir archivo de Word con macro desde Excel
Como modificar una plantilla de Word con macro de Excel
Como rellenar pagare con datos de Excel conectando con Word
Como crear cartas en Word con clientes listados en Excel


Antes de continuar recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.


  


Invito a bajar el archivo comprimido (está la macro y plantilla con la carta en Word), desde el link del final, es totalmente gratuito y tiene el código abierto es decir se puede usar sin ninguna restricción, lo que permitirá comprender mejor el funcionamiento de la macro; también en el vídeo a continuación hay una explicación más detallada y visual del funcionamiento de esta macros que conectan Excel con Word y permite crear cartas automáticamente.

La macro en primer lugar abre una plantilla de Word que es donde se encuentra la carta propiamente dicha, luego crea un archivo para cada una de las cartas que va creando la macro, personalizada con cada una de las personas listadas en la hoja de Excel; para ello crea un bucle desde la primer fila con datos hasta la última fila con datos; posteriormente la macro recorre cada campo en Word reemplazando por los datos correspondientes que se encuentran en Excel; por último guarda el archivo con el nombre establecido previamente.

La macro de ejemplo tomará los datos del cliente que esta en la fila 3 de la hoja de Excel e incorporará en la carta que esta en una plantilla de Word, la fecha el destinatario en en este primer caso será "Dayra Sol Tomy Lee", luego la dirección, localidad, fecha de reunión, dirección de reunión, hora de reunión y por último el remitente, con esos datos se arma la carta y guarda un archivo en Word por cada carta creada; permitiendo esta macro denominada Crear cartas en Word desde Excel con datos incluidos en una hoja de Excel, realizar un sin números de cartas en forma automática en segundos con un solo click.

Suscribe a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo formulario que crea un listado de todas las hojas para poder luego seleccionarlasbuscar en listbox mientras escribes en textboxordenar hojas libro excel por su nombreconectar Excel con Access y muchos ejemplos más.






Código que se inserta en un módulo




Sub ManejaWordConfeccionaCarta()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim objWord As Word.Application, wdDoc As Word.Document
Dim datos(0 To 1, 0 To 9) As String
On Error Resume Next
Set a = Sheets(ActiveSheet.Name)
nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
ruta = ThisWorkbook.Path & "\" & nomarch & ".docx"
uf = a.Range("A" & Rows.Count).End(xlUp).Row
Set objWord = CreateObject("Word.Application")
objWord.DisplayAlerts = wdAlertsNone
objWord.Visible = True
For j = 3 To uf
Set wdDoc = objWord.Documents.Open(ruta)
nomfic = nomarch & " Desti " & a.Cells(j, "B")
rutainf = ThisWorkbook.Path & "\" & nomfic & ".docx"

'Asignamos a variables que se debe buscar y el texto por que se debe reemplazar
datos(0, 0) = "[Campo_Fecha]"
datos(1, 0) = Format(a.Cells(j, "A"), "dd ""de"" mmmm ""de"" yyyy")
datos(0, 1) = "[Campo_Destinatario]"
datos(1, 1) = a.Cells(j, "B")
datos(0, 2) = "[Campo_Direccion]"
datos(1, 2) = a.Cells(j, "B")
datos(0, 3) = "[Campo_Localidad]"
datos(1, 3) = a.Cells(j, "D")
datos(0, 4) = "[Campo_NombreDestinatario]"
datos(1, 4) = a.Cells(j, "E")
datos(0, 5) = "[Campo_FechaEncuentro]"
datos(1, 5) = Format(a.Cells(j, "F"), "dd ""de"" mmmm ""de"" yyyy")
datos(0, 6) = "[Campo_Objeto]"
datos(1, 6) = a.Cells(j, "G")
datos(0, 7) = "[Campo_DireccionOficina]"
datos(1, 7) = a.Cells(j, "H")
datos(0, 8) = "[Campo_Hora]"
datos(1, 8) = Format(a.Cells(j, "I"), "HH:MM")
datos(0, 9) = "[Campo_Remitente]"
datos(1, 9) = a.Cells(j, "J")
For I = 0 To UBound(datos, 2)
textobuscar = datos(0, I)
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=textobuscar
While objWord.Selection.Find.Found = True
objWord.Selection.Text = datos(1, I) 'texto a reemplazar
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=textobuscar
Wend
Next I

'Guarda el archivo con el nombre asignado
wdDoc.SaveAs Filename:=rutainf, FileFormat:=wdFormatXMLDocument
wdDoc.Close
Next j

MsgBox ("Las cartas se generaron con éxito para todos los destinatarios"), vbInformation, "AVISO"
wdDoc.Quit
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub






Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends