generador de documentos a la carta - excel avanzado
DESCRIPTION
generar en wordTRANSCRIPT
Uso de CookiesUtilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando,
consideramos que acepta su uso. Más información en la Generador de documentos a la carta
Acepto
Generador de documentos a la carta
Uno de los principales objetivos de la informática es automatizar en lo posible aquellos trabajos que resulten
altamente repetitivos. De hecho, muchas empresas y profesionales precisan generar una gran cantidad de
documentos copiando y pegando bloques de texto de otros documentos existentes.
Hemos pensado en como aportar algún recurso para que los usuarios puedan automatizar estos procesos, y entre
muchas opciones hemos encontrado la que hoy presentamos y que consideramos en particular interesante: un
documento que permita crear de forma automatizada nuevos documentos a la carta, combinando bloques de texto a
petición del usuario.
No es una solución definitiva, ni de lejos lo pretende. Creemos que puede ser un punto de partida en muchos casos, y
que puede abrir nuevas opciones a otros muchos usuarios.
Y sí, estamos de acuerdo: es raro en un blog de Excel mostrar una solución hecha en Word. Pero es que somos así
de originales
Mostrar la ficha Programador
Antes que nada, dado que necesitaremos incorporar algunos botones y otros elementos especiales (conocidos como
controles) a nuestro documento, debemos activar la ficha Programador.
Desde la ficha Archivo > Opciones > Personalizar cinta de opciones activamos en la lista de la derecha la ficha
Programador.
A partir de este momento, dispondremos de una nueva ficha en nuestro Word que nos permitirá insertar controles,
grabar macros y acceder al editor VBA de forma rápida y sencilla.
El panel de control del Generador
Llamaremos Generador al documento generador de documentos a la carta. Y vamos a crear uno paso a paso.
El proceso de creación de este documento requiere algunos conocimientos altamente técnicos, que esperamos suplir
con nuestros comentarios y las imágenes que aportamos. Si seguimos todo paso a paso fielmente, el resultado debe
ser el éxito. Comencemos.
En los siguientes pasos crearemos un nuevo documento en blanco, al que agregaremos los botones y controles
necesarios, y los textos que formarán los bloques que se utilizarán para los nuevos documentos.
Crea un nuevo documento en blanco (ficha Archivo > Nuevo > Documento en blanco > Crear)
Para que nos resulte fácil posicionar los controles en la hoja, insertaremos una tabla de 5×5 celdas (Ficha Insertar
> Tabla, desplaza el ratón sin hacer clic hasta que selecciones un rectángulo de 5×5 celdas, y haz clic )
Buscar...
Sé el primero de tus amigos en indicar que legusta esto.
Excel Avanzado3590 Me gusta
Me gusta esta página Compartir
ENTRADAS RECIENTES
Lista desplegable condicionada en Excel
Diagrama de Gantt en Excel
Seleccionar los datos de una lista en Excel
Generador de documentos a la carta
Cambiar el formato de celda con una combinaciónde teclas en Excel
ARCHIVOS
junio 2015
mayo 2015
octubre 2013
abril 2013
marzo 2013
febrero 2013
enero 2013
CATEGORÍAS
2003
2007
2010
Atajos de teclado
Controles ActiveX
Excel
Gráficos
Macros
Word
RECOMENDAMOS…
INICIO WORDPRESS EXCEL
> Tabla, desplaza el ratón sin hacer clic hasta que selecciones un rectángulo de 5×5 celdas, y haz clic )
Combina las celdas señaladas con una flecha roja en la imagen (selecciona dos o más celdas y activa desde la ficha
Herramientas de tabla > Presentación > Combinar celdas) para que presente este aspecto:
Selecciona todas las celdas de la tabla (sitúa el ratón sobre cualquier celda de la tabla; en la esquina superior
izquierda se muestra un botón con una cruz de cuatro flechas azul; haz clic sobre ese botón) y aplica a todas las
celdas alineación centro-centro (ficha Herramientas de tabla > Presentación > Grupo Alineación > Alinear
verticalmente)
Si no lo está, activa desde la ficha Herramientas de tabla > Presentación > Ver cuadrículas
Con toda la tabla seleccionada, elimina los bordes desde la ficha Herramientas de tabla > Diseño > Bordes > Sin
borde
Insertar los controles
Bien, ya tenemos preparada la estructura donde vamos a colocar los controles; sigamos paso a paso y con cuidado
todos los puntos siguientes.
Haz clic en la primera celda (arriba a la izquierda)
Inserta un control Botón de alternar mediante el siguiente procedimiento:
Selecciona desde la ficha Programador > grupo Controles > Herramientas heredadas > Botón de alternar
(control ActiveX)
Si no se muestra, activa la ventana Propiedades desde la ficha Programador > grupo Controles > Propiedades
Desde la ventana propiedades, establece o cambia las siguientes propiedades:
(Name) a Bt01 (letras Bt, números 01)
Caption a Texto 1
Height a 25 (seguramente tras pulsar Intro o cambiar a otra propiedad mostrará un valor ligeramente distinto)
Width a 70 (seguramente tras pulsar Intro o cambiar a otra propiedad mostrará un valor ligeramente distinto)
Motor de reservas para pequeños y
medianos hoteles, hostales, pensiones y
albergues
ETIQUETAS
activex Atajo de teclado
automatizar Bordes de celda Celda con
desplegable Columnas Compartir Condición
controles Diagramas documentos Fechas Fijar filas o columnas Filas
Formato de celda Gantt generador Graficos
Horas Inmovilizar paneles Libro Lista desplegable
macros Red Tabla validar word
Selecciona y copia el botón de alternar insertado
Haz clic en la segunda celda de la primera fila
Pega; en la ventana propiedades, cambia su propiedad (Name) a Bt02, y su propiedad Caption a Texto 2
Repite este último punto en el resto de celdas hasta un total de 16 botones (el último será el botón Bt16, Texto 16)
y obtener un resultado como el mostrado en la siguiente imagen:
Haz clic en la celda vacía superior derecha
Inserta un control Botón de comando mediante el siguiente procedimiento:
Selecciona desde la ficha Programador > grupo Controles > Herramientas heredadas > Botón de comando
(control ActiveX)
Si no se muestra, activa la ventana Propiedades desde la ficha Programador > grupo Controles > Propiedades
Desde la ventana propiedades, establece o cambia las siguientes propiedades:
(Name) a BtCrear.
Caption a Crear documento.
Height a 50 (seguramente tras pulsar Intro o cambiar a otra propiedad mostrará un valor ligeramente distinto)
Width a 100 (seguramente tras pulsar Intro o cambiar a otra propiedad mostrará un valor ligeramente
distinto)
Haz clic en la celda justo debajo.
Inserta un control Casilla de verificación mediante el siguiente procedimiento:
Selecciona desde la ficha Programador > grupo Controles > Herramientas heredadas > Casilla de verificación
(control ActiveX).
Si no se muestra, activa la ventana Propiedades desde la ficha Programador > grupo Controles > Propiedades.
Desde la ventana propiedades, establece o cambia las siguientes propiedades:
(Name) a ChkIntros
Caption a Añadir Intros
Height a 25 (seguramente tras pulsar Intro o cambiar a otra propiedad mostrará un valor ligeramente distinto)
Width a 90 (seguramente tras pulsar Intro o cambiar a otra propiedad mostrará un valor ligeramente distinto)
Haz clic en la celda justo debajo
Inserta un control Casilla de verificación mediante el siguiente procedimiento:
Selecciona desde la ficha Programador > grupo Controles > Herramientas heredadas > Casilla de verificación
Selecciona desde la ficha Programador > grupo Controles > Herramientas heredadas > Casilla de verificación
(control ActiveX)
Si no se muestra, activa la ventana Propiedades desde la ficha Programador > grupo Controles > Propiedades
Desde la ventana propiedades, establece o cambia las siguientes propiedades:
(Name) a ChkRestableceTodo
Caption a Reestablecer todo al terminar
Font cambia a tamaño 8 haciendo un clic en el botón con 3 puntos mostrado al hacer clic sobre la propiedad
Height a 25 (seguramente tras pulsar Intro o cambiar a otra propiedad mostrará un valor ligeramente distinto)
Width a 90 (seguramente tras pulsar Intro o cambiar a otra propiedad mostrará un valor ligeramente distinto)
Haz clic en la celda larga de la última fila
Teclea el texto Guardar como
Pulsa Intro dos veces
Teclea el texto Dejar vacío para no guardar el documento automáticamente; el documento se guarda en la carpeta
por defecto, y cambia su tamaño a 8 puntos
Cambia la alineación de la celda desde ficha Herramientas de tabla > Presentación > Grupo Alineación > Alinear
en el centro a la izquierda
Haz clic en la línea en blanco entre las dos líneas de texto recien insertadas
Inserta un control Cuadro de texto mediante el siguiente procedimiento:
Selecciona desde la ficha Programador > grupo Controles > Herramientas heredadas > Cuadro de texto (control
ActiveX)
Si no se muestra, activa la ventana Propiedades desde la ficha Programador > grupo Controles > Propiedades
Desde la ventana propiedades, establece o cambia las siguientes propiedades:
(Name) a NomDoc
Height a 25 (seguramente tras pulsar Intro o cambiar a otra propiedad mostrará un valor ligeramente distinto)
Width a 425 (seguramente tras pulsar Intro o cambiar a otra propiedad mostrará un valor ligeramente
distinto)
La parte de agregar los controles ya ha finalizado. Si quieres, podemos dar un par de toques para mejorar el acabado,
como por ejemplo, hacer las filas un poco más altas, para que los botones se muestren un poco más separados
(selecciona la tabla, y desde la ficha Herramientas de tabla > Presentación > grupo Tamaño de celda > Alto de fila de
tabla puedes establecerlo, por ejemplo, a 1,1 cm.)
Guardar el documento habilitado para macros
Creemos que va siendo hora de que guardemos el documento. Nosotros lo hemos hecho con el nombre Generador
de Documentos Automatizado.
Al guardarlo, en la propiedad Tipo selecciona Documento habilitado con macros de Word (*.docm).
Es muy importante, ya que si no lo hacemos así, el documento no podrá guardar ni ejecutar macros.
Los bloques de texto
Ahora vamos a agregar los bloques de textos. Cada bloque de texto podrá estar formado por uno o más párrafos,
puede contener imágenes, tablas, etc.
Lo importante es delimitar cada bloque para que la macro pueda encontrarlo para copiarlo y pegarlo al nuevo
documento, sin cometer errores.
Los bloques de texto los vamos a delimitar con un párrafo al principio del bloque que contendrá el delimitador Texto
n, y otro párrafo al final del bloque que contendrá el delimitador Fin de texto n, en donde n va a ser un número del 1
al 16, que identifica cada bloque de texto. Con este sencillo truco, podemos fácilmente delimitar los bloques.
al 16, que identifica cada bloque de texto. Con este sencillo truco, podemos fácilmente delimitar los bloques.
Mientras decides qué textos vas a agregar a tu generador, quizás quieras antes probar con texto simulado. Veamos
como hacerlo:
Haz clic justo debajo del panel del Generador (la tabla)
Inserta un párrafo vacío
Teclea Texto 1 y pulsa Intro
Teclea =rand(2,3) y pulsa Intro
Teclea Fin Texto 1 y pulsa Intro
Selecciona los 4 párrafos y copia
Pega 15 veces; en cada una de ellas, cambia el número correspondiente en ambos párrafos delimitadores a 2, 3,
4… hasta el 16
Una forma sencilla para distinguir los textos que de momento son iguales es aplicarles un fondo de color o un color
de texto distinto a cada bloque, como muestra la imagen. Más tarde podrás sustituirlos por los tuyos propios.
El código macro VBA
Vamos a agregar el código necesario para que este invento funcione. Si era importante ser preciso en todos los pasos
que hemos dado hasta llegar aquí, en esta fase del proyecto debemos esforzarnos un poco más.
Empecemos por hacer un doble clic sobre el botón Crear documento de nuestro panel.
Como se aprecia en la imagen, al hacer doble clic sobre el control se muestra el editor VBA (Visual Basic para
Aplicaciones) a la espera de que le indiquemos el código a asignar al evento Click (cuando hacemos clic) sobre el botón
BtCrear. El código debe escribirse dentro del procedimiento BtCrear_Click().
Teclea, o preferiblemente, copia desde aquí y pega en el editor VBA, este código:
Teclea, o preferiblemente, copia desde aquí y pega en el editor VBA, este código:
Private Sub BtCrear_Click()
Dim c As String
' Si se ha marcado el botón almaceno en c su número
If Me.Bt01.Value Then c = c & "1,"
If Me.Bt02.Value Then c = c & "2,"
If Me.Bt03.Value Then c = c & "3,"
If Me.Bt04.Value Then c = c & "4,"
If Me.Bt05.Value Then c = c & "5,"
If Me.Bt06.Value Then c = c & "6,"
If Me.Bt07.Value Then c = c & "7,"
If Me.Bt08.Value Then c = c & "8,"
If Me.Bt09.Value Then c = c & "9,"
If Me.Bt10.Value Then c = c & "10,"
If Me.Bt11.Value Then c = c & "11,"
If Me.Bt12.Value Then c = c & "12,"
If Me.Bt13.Value Then c = c & "13,"
If Me.Bt14.Value Then c = c & "14,"
If Me.Bt15.Value Then c = c & "15,"
If Me.Bt16.Value Then c = c & "16,"
' Si se ha marcado alguno
If c > "" Then
' Quito la última coma sobrante de c
c = Left(c, Len(c) - 1)
' Creo el nuevo documento con los textos solicitados
BuscarPegarTextos c, Me.ChkIntros.Value, Me.NomDoc.Text
' si se ha marcado reestablecer, reinicio todo
If Me.ChkRestableceTodo Then
Me.Bt01.Value = False
Me.Bt02.Value = False
Me.Bt03.Value = False
Me.Bt04.Value = False
Me.Bt05.Value = False
Me.Bt06.Value = False
Me.Bt07.Value = False
Me.Bt08.Value = False
Me.Bt09.Value = False
Me.Bt10.Value = False
Me.Bt11.Value = False
Me.Bt12.Value = False
Me.Bt13.Value = False
Me.Bt14.Value = False
Me.Bt15.Value = False
Me.Bt16.Value = False
Me.NomDoc.Text = ""
Me.ChkIntros.Value = False
End If
End If
End Sub
Debe quedar similar, no, sino exactamente igual al de la imagen:
El código está comentado para que podamos estudiarlo.
Tras examinar los botones, crea una variable de texto que contiene los número de aquellos que hemos pulsado. A
continuación llama al procedimiento BuscarPegarTextos al que le pasa tres variables:
1. una cadena de texto con los números de los bloques que queremos pegar en el nuevo documento, separados por
comas
2. un booleano que indica si queremos o no añadir un Intro tras de cada bloque pegado
3. una cadena con el nombre del documento, que puede estar o no vacía
Para implementar ese procedimiento necesitamos agregar un módulo Basic a nuestro proyecto.
En el editor de VBA selecciona desde el menú Insertar > Módulo.
Se muestra en el editor el nuevo módulo creado, en donde agregaremos el procedimiento BuscarPegarTextos.
Sub BuscarPegarTextos(cTextos As String, lConIntros As Boolean, cNomDoc As String)
Dim aTextos() As String, DocGenerador As Document, DocNuevo As Document
Set DocGenerador = ActiveDocument
' creo un documento en blanco
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
Set DocNuevo = ActiveDocument
' convierto la cadena cTextos en una matriz/array
aTextos = Split(cTextos, ",")
' Por cada elemento de la matriz
For n = 0 To UBound(aTextos)
' activo el generador de documentos
DocGenerador.Activate
DocGenerador.ActiveWindow.SetFocus
' Salto al inicio
Selection.HomeKey Unit:=wdStory
' busco el bloque de texto
' delimitado por Texto n y Fin Texto n correspondiente
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Texto " & aTextos(n) & "^13(*)^13Fin Texto " & aTextos(n) & "^13"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute
' lo copio
Selection.Copy
' activo el documento nuevo
DocNuevo.Activate
DocNuevo.ActiveWindow.SetFocus
' Pego el texto
Selection.PasteAndFormat (wdFormatOriginalFormatting)
' Elimino los delimitadores del bloque en el texto pegado
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Texto " & aTextos(n) & "^13"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Find.ClearFormatting
With Selection.Find
.Text = "Fin Texto " & aTextos(n) & "^13"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute
Selection.Delete Unit:=wdCharacter, Count:=1
' si debo añadir un Intro, lo agrego ahora
If lConIntros Then Selection.TypeParagraph
Next
' activo el generador de documentos
DocGenerador.Activate
DocGenerador.ActiveWindow.SetFocus
' Salto al inicio
Selection.HomeKey Unit:=wdStory
' Reinicio la ventana de búsquedas
Selection.Find.ClearFormatting
' activo el nuevo documento
DocNuevo.Activate
DocNuevo.ActiveWindow.SetFocus
' Salto al inicio
Selection.HomeKey Unit:=wdStory
' si se escribió un nombre lo guardo
If cNomDoc > "" Then
' Guardo el nuevo documento creado
ActiveDocument.SaveAs2 FileName:=cNomDoc, FileFormat:= _
wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False, CompatibilityMode:=14
End If
' Desmarcar la siguiente línea para cerrar el nuevo documento
' ActiveWindow.Close
MsgBox "Proceso terminado; si se especificó un nombre" & vbCrLf & _
"el documento se ha guardado en la carpeta por defecto.", _
vbInformation, "Generador de documentos"
End Sub
De nuevo la imagen nos muestra como debe quedar nuestro trabajo:
De nuevo la imagen nos muestra como debe quedar nuestro trabajo:
Ya hemos terminado. El código está comentado, para ayudar en su comprensión.
El procedimiento crea un documento nuevo
A continuación, crea una matriz a partir de la cadena que le hemos pasado con los números de los bloques de
texto a copiar en el nuevo documento
Entra en el bucle en que
Realiza una búsqueda de los delimitadores mediante la herramienta de búsqueda del propio Word, pero
activando el uso de comodines. Utilizando las expresiones regulares de Word podemos seleccionar todo el
texto contenido entre la marca de inicio y la de fin con una sola busqueda.
El texto buscado queda seleccionado, lo que nos permite copiarlo, pasar al documento nuevo y pegarlo
Utilizamos el mismo sistema para eliminar los delimitadores en el texto pegado del documento nuevo.
Finalmente, tras repetir el proceso para cada bloque de texto seleccionado, activamos cada uno de los
documentos y forzamos situarnos al inicio del mismo.
Si se especificó un nombre, el nuevo documento se guardará en la carpeta por defecto de Word, o en la última
utilizada de forma automática.
Si deseas que el documento se cierre automáticamente, puedes eliminar el comentario de la línea indicada (quitar
la comilla simple)
Para terminar, mostramos un diálogo de aviso para que el usuario se dé por enterado de que el trabajo se ha
realizado.
Y nuestro trabajoi con las macros ha terminado. ya podemos cerrar el editor VBA.
De nuevo, creemos que es conveniente volver a guardar el documento para que se almacenen todos los cambios
realizados
Último paso
Tan sólo nos queda comprobar que todo funciona correctamente.
Para probar el Generador es preferible cerrar y volver a abrir el documento. En alguna ocasión, si no lo hemos hecho
así, las macros no han funcionado adecuadamente, por lo que recomendamos este sistema para evitar problemas y
hacerlo más fácil.
Al abrir el documento, y dependiendo de nuestra configuración de seguridad de macros, es posible que se presente
un mensaje como el siguiente:
Alex León 20/08/2015 a las 05:34
Para que la macro pueda ejecutarse, tenemos que hacer clic sobre Habilitar contenido. Esta opción se almacenará
para este documento, y no debería preguntarse de nuevo, salvo que cambiemos de carpeta el documento, o
cambiemos su nombre.
Ya puedes marcar algunas de las opciones (por ejemplo, haz clic sobre los botones de opción Texto 3, Texto 7 y Texto
12), y haz clic sobre el botón Crear documento.
Si todo ha ido bien, debemos obtener un nuevo documento con los textos correspondientes.
Puedes descargar el documento que hemos creado para este tutorial haciendo clic aquí:
Generador-de-documentos-automatizado.zip.
También puedes descargar este otro modelo en el que hemos incluído distintos tipos de textos para que realices más
pruebas:
Generador-de-documentos-automatizado-modelo.zip.
Si te ha gustado, deja tu comentario y/o compártelo en las redes sociales.
Un comentario en “Generador de documentos a la carta”
Esta muy padre el código, una pregunta:
¿Como podría implementarlo para jalar 3 imágenes de excel a cuadros de texto en word?
Ejemplo: tengo 1 archivo de word con varios cuadros de texto y quiero meter 3 imágenes que se encuentran
cada una en una celda de una tabla de excel. Espero puedas ayudarme. Gracias y felicidades!
Responder
Deja un comentario
Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *
Nombre *
Correo
electrónico *
Web
Comentario
Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title="">
<acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em>
<i> <q cite=""> <s> <strike> <strong>
Powered By: SBS | AccessPress LiteCopyright © 2015 avanzado.es
PUBLICAR COMENTARIO