Macro para imprimir varias "fichas"

10/01/2008 - 13:13 por vitobacon | Informe spam
Hola a todos.
Tengo un libro con una hoja que hace de base de datos y otra que contiene un
formulario.
En el formulario tengo en la celda G3 una lista de validación. Seleccionando
un elemento me cambia todas las casillas del formulario (leyendo la base de
datos).
La lista desplegable tiene muchos elementos y los tengo que imprimir todos.
Me gustaría saber si es posible crear una macro que vaya seleccionando uno a
uno los elementos de la celda G3 e imprimiendo la hoja del formulario, así
me ahorraría el tedioso proceso de seleccionar un ítem e imprimir la hoja,
seleccionar el siguiente ítem e imprimir, etc.
Un saludo y gracias por vuestra dedicación.

Preguntas similare

Leer las respuestas

#1 Ivan
10/01/2008 - 16:06 | Informe spam
hola

... tengo en la celda G3 una lista de validación. Seleccionando




un elemento me cambia todas las casillas del formulario (leyendo la base de
datos).
si es posible crear una macro que vaya seleccionando uno a
uno los elementos de la celda G3 e imprimiendo la hoja del formulario,... <<<



si quieres prueba a ver si te vale el codigo que te pongo al final
tras modifgicar segun las caracteristicas de tu archivo las partes que
te comento:

:a) aqui => ' For Each celda In Range("Items")'

cambia Range("Items") por el rango de donde G3 toma la lista de
validacion. Si como parece esta en otro libro deberias poner algo
tipo=>

For each celda in
Workbooks("NombreDelLibro").Worksheets("NombreDeLaHoja").Rabge("RangoDeLaLista")

OJO= en una sola linea o con caracter de continuacion de linea)


b) aqui y en la siguiente linea => 'Worksheets("Hoja1").[G3] = celda'

cambia "Hoja1" por el nombre de la hoja donde esta el formulario a
imprimir (y G3, claro). Tambien entre comillas

c) pegalo en un modulo NORMAL (por si no sabes como => abre el editor
de VBa [alt+F11] => menu Insertar => Modulo [a secas] => aqui copias/
pegas lo siguiente y realizas los cambios comentados, asegurandote de
dejar el resto igual)

NOTA: no se si sera necesario el uso de DoEvnts, pero al ser tantas
hojas, creo recordar haber leido por aqui que no sobra, para
refrescasr el proceso)

''Pega desde aqui--
Sub TestImprimirFichas()
Dim celda As Range
For Each celda In Range("Items")
DoEvents
Worksheets("Hoja1").[G3] = celda
Worksheets("Hoja1").PrintOut
Next
End Sub
''Pega hasta aqui--

espero te ayude

un saludo
Ivan
Respuesta Responder a este mensaje
#2 vitobacon
10/01/2008 - 19:56 | Informe spam
Gracias, Iván: funciona perfectamente.
Muchas gracias por el código.

A ver si me puedes ayudar un poco más.
La impresión la hago a fichero PDF para luego juntar todas las fichas en un
solo libro.
En el proceso de impresión generado por la macro se va parando en cada
archivo y me va pidiendo un nombre para el PDF a crear.
¿Sería posible mandarle un nombre automáticamente y no tener que estar
introduciendo uno para cada impresión de ficha?
Álvaro
Respuesta Responder a este mensaje
#3 Ivan
10/01/2008 - 22:13 | Informe spam
hola Alvaro,

...La impresión la hago a fichero PDF para luego juntar todas las fichas en un






solo libro.
¿Sería posible mandarle un nombre automáticamente y no tener que estar
introduciendo uno para cada impresión de ficha? ..<<<



aunque no estoy muy seguro de si quieres imprimir cada ficha en un pdf
o si las quieres todas en uno solo, y ademas la verdad es que nunca lo
he hecho, viendo la ayuda (F1) sobre el metodo PrintOut, creo que
podrias añdir/especificar los argumentos 'PrintToFile' y
'prPrintToFile' [si quieres echales un ojo en dicha ayuda] y hacer
algo asi=>

para un solo pdf=>

Worksheets("Hoja1").PrintOut PrintToFile:=True, _
prPrintToFile:="Aqui_Ruta_Nombre_Y_Extension_DeTuArchivoPDF"

para un nuevo PDF por ficha (y teniendo cuidado de guardarlo en una
carpeta que no pueda contener otros pdf con el mismo nombre), podrias
montar un nombre por ejemplo con el nombnre del Libro de excel (si
quieres ) y el dato introducido en G3, que se supone que sera unico
para cada registro. Podria quedar +/- asi=>

Dim Ruta as string, Nombre as string
Ruta = "C:\Mis Documentos\CarpetaFichas\"
Nombre = Thisworkbook.Name & "_" & Celda
Worksheets("Hoja1").PrintOut PrintToFile:=True, _
prPrintToFile:=Ruta & Nombre & ".pdf"

ya te digo que nunca lo he probado y ademas sobre pdf no tengo ni idea
pero creo que mas o menos deberia funcionarte

un saludo
Ivan
Respuesta Responder a este mensaje
#4 Ivan
10/01/2008 - 23:45 | Informe spam
hola de nuevo Alvaro

por un lado el argumento prPrintToFile no es tal sino 'PrToFileName'.
Disculpa el error

por otro lado, al menos en mis pruebas, aunque si me guarda el archivo
como pdf, sin embargo luego no me permite abrirlo, diciendome que no
es un formato valido. Si a ti si te lo permite no se como sera.

de todas formas por ej. cambiando la linea del printOut por esta otra
hace lo que creo que pides guardandolo en la misma carpeta del libro y
con el nombre contenido en G3 para cada ficha <ojo a los repetidos>

Worksheets("Hoja1").PrintOut PrintToFile:=True, _
PrToFileName:=ThisWorkbook.Path & "\" & celda & ".pdf"


aunque ya te digo que a mi no me permite abrir el pdf, quizas la
exrtension sea otra

. Lo que es [creo que] seguro es que si por ej. decides imprimirlo a
un archivo excel normal ".xls" no te dara problemas (solo tendrias que
cambiar la extension en el codigo


si te he entendido mal si quieres comentas, y si alguien sabe como
hacerlo, como siempre sera bienvenido

un saludo
Ivan
Respuesta Responder a este mensaje
#5 vitobacon
11/01/2008 - 10:47 | Informe spam
Hola, Iván.
Estoy probando lo del PrintToFile:=True y todo eso.
Me pasa lo mismo que a tí: crea los PDF pero no son válidos.

Me parece que esto es por lo siguiente:

- cuando en una impresora 'convencional' diriges la salida a fichero,
convierte la información que se destina a la impresora, para que esta
imprima, en un paquete de datos especial (tipo fichero .plt) que luego
podemos enviar de nuevo a la impresora, ya desde fuera de excel, con un
"copy to prn" desde el prompt de ms-dos.

- cuando en una impresora 'virtual' (como es Adobe PDF) imprimes normal, la
salida YA VA A FICHERO, así que cuando diriges la salida de nuevo a fichero
hace algo que desconozco, pero el resultado en realidad no es un pdf, sino
un paquete de datos para que luego podamos imprimirlo desde otro lugar.

- conclusión: hay que buscar un argumento para él método printout cuando se
utiliza con impresoras 'virtuales' (como es el caso de Adobe PDF) capaz de
sumininstrarle un nombre, pero al margen del argumento prToFileName, que
convierte el flujo de datos de impresión en un fichero.

No sé si me he explicado, pero creo que el problema está ahí.
Bueno, seguiremos investigando.
Gracias, Iván.

Álvaro
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida