Se presento la necesidad de llenar un formato de Word automáticamente sin utilizar el ya conocido Mail Merge el cual requiere mas pasos que la opción que les muestro en este articulo que es con VBScript, claro presenta un poco mas de trabajo inicial pero para los siguientes documentos el proceso sera mucho mas rápido y fácil para el usuario final.
VBScript para Excel que llene un formato de Word automáticamente con marcadores
Consiste en tener datos en Excel capturados el cual debemos escribir en Word cuando se tenga completa la información de cada renglón del documento Excel, como ya hay datos ingresados de días anteriores solo deberá exportar o enviar la información del renglón seleccionado.
Para este proceso vamos a crear dos archivos el documento Word que vamos usar como plantilla y un documento Excel con macros habilitados, veamos paso a paso que proceso lleva cada documento.
Trabajando con el documento Word
Tengo una plantilla [Ver Imagen] con los siguientes campos que requiero llenar automáticamente en total son 5 campos.
Ponemos el cursor donde vamos a insertar el primer marcador y después vamos a poner un marcador para cada campo, Los marcadores los localizamos en Insertar > Marcadores.
Posicionados en el primer campo damos clic en Marcadores.
Nos mostrara una ventana donde damos el nombre al Marcador [1] y añadimos [2], si ya hemos añadido alguno al documento los mostrara en el recuadro de abajo.
Ahora si queremos ver donde se han colocado marcadores podemos habilitar la opción en la configuracion de Word.
Estos marcadores los debemos mantener ya que los vamos a ingresar en el Código VBScript.
Trabajando con el documento Excel
Vamos a abrir el documento Excel donde tenemos la información que vamos a estar exportando a Word, por ejemplo voy a mostrar solo los datos con los que llenamos el encabezado (lo que es información publica).
Ahora abrimos el Editor de VBScript presionando la combinación de teclas [keybt]ALT[/keybt]+[keybt]F11[/keybt] y sobre la Hoja 1 (Sheet 1) pegamos el Código VBScript.
Editamos las siguientes lineas marcadas en la imagen, no las marco con numeración ya que en la sección EntireRow vas a ingresar una linea por cada marcador que hayas ingresado en el documento Word.
La primer linea marcada en el código que inicia con Const myDoc debemos declarar la ruta donde se encuentra el documento Word que usaremos como plantilla.
En la sección de los marcadores encontramos 4 lineas en mi ejemplo; en el cual se indica en el numero 1 es el nombre del marcador que dimos en el documento Word y el numero 2 es la letra de la columna del documento Excel donde se encuentra el dato que corresponde al marcador de Word.
La ultima linea marcada en la imagen el cual comienza con doc.SaveAs debemos indicar donde se guarda el documento en este caso indicando ThisWorkbook.Path indicamos al script que debe guardar el nuevo documento en la misma ruta donde se encuentra la plantilla de Word, después yo agrego la fecha y finalizo con el .docx que es la extensión de los documentos Word.
Cabe aclarar que puedes añadir lo que sea en el nombre solo agregando & y el texto a ingresar entre comillas “Texto” por ejemplo:
doc.SaveAs ThisWorkbook.Path & "" & "Documento de entrega con fecha: " & Format(Date, "yyyymmdd") & ".docx"
Para finalizar debemos guardar el documento Excel con macros habilitados.
Otro tip yo he agregado un acceso directo para ejecutar el código, ve como añadir un acceso directo para ejecutar el código VBScript las instrucciones del articulo son de Outlook mas es igual el proceso:
Ya realizado el proceso las Instrucciones de uso son simples:
1.- Seleccionas la linea donde se encuentra la información a exportar al documento Word.
2.- Ejecutas el Script el cual puede ser agregando el acceso directo o directamente del editor.
3.- Se abre la plantilla de Word, se llenan los datos automáticamente y te crea un archivo en la ruta indicada.
4.- Listo con esto ya has optimizado una tarea de tu trabajo.
Código VBScript de Excel para llenar campos de documento Word automáticamente
Option Explicit Sub test() Dim wd As Object Dim doc As Object Dim rng As Range Set rng = Selection Const myDoc = "C:UsersFernando OPlantilla Ejemplo.docx" 'indica la ruta del formato Set wd = CreateObject("Word.application") wd.Visible = True Set doc = wd.Documents.Open(myDoc) With Selection.EntireRow doc.Bookmarks("BMEmpresa").Range.Text = Range("A" & rng.Row).Value doc.Bookmarks("BMDireccion1").Range.Text = Range("B" & rng.Row).Value doc.Bookmarks("BMDireccion2").Range.Text = Range("C" & rng.Row).Value doc.Bookmarks("BMFolio").Range.Text = Range("L" & rng.Row).Value End With doc.SaveAs ThisWorkbook.Path & "" & Format(Date, "yyyymmdd") & ".docx" 'doc.Close False 'wd.Quit Set doc = Nothing Set wd = Nothing End Sub