>>>... 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
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
>>>>...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
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
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
gracias por la informacion. La verdad es que en cuentop me sacas de 2
o 3 cosillas intrinsecas de excel me pierdo.
de todas formas, y a la espera de alguien que pueda echarte un cable,
si quieres echale un ojo a estas conversaciones que quizas te den
alguna pista (yo solo las he mirado muy por encima y solo algunas),
pues mas o menos tratan el tema