| ||||
Si te refieres a que no se impriman los botones que has creado, para tus macros (creo haber entendido eso), pincha sobre el botón del macro, con el botón derecho del mouse, y selecciona Formato del control. A continuación selecciona la pestaña Propiedades, y quítale la muesca que tiene la opción Imprimir objeto. Por defecto, esta opción no sale como marcada. |
| ||||
Muchas gracias es justo lo que necesito. Ahora lo que intento es que sólo se impriman aquellas hojas que tengan las tablas cubiertas, es decir si yo rellené las tablas de las hojas 1, 5 y 8 pues que me imprimen sólo estas tres hojas. Mi idea es hacer una macro con un código de visual que para comprobar si una tabla está rellenada compruebe si hay algo en la primera celda de esa tabla (ya que sino se ha rellenado la primera celda se entiende que no se ha rellenado la celda). Creo que la función es printer.print, si me podéis echar una mano os lo agradezo muchas gracias |
| ||||
A ver si esto es lo que necesitas...
Código:
Editado:Sub Imprimir_solo_si_hay_datos() 'Ocultamos el proceso, para que no se vea como salta de hoja en hoja Application.ScreenUpdating = False 'Nos desplazamos hasta la primera hoja del libro (da igual el nombre que tenga la hoja, pues siempre será Hoja1) Hoja1.Select 'Que recorra todo el libro en búsqueda de todas las hojas For i = 1 To Sheets.Count 'Comprobamos que exista un dato en A1, para imprimir esa hoja 'aunque puedes controlar más celdas, añadiéndolas al condicional If Range("A1") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1 'Si no estamos en la última hoja, que avance a la siguiente pestaña (u hoja) If i < Sheets.Count Then ActiveSheet.Next.Select Next 'Mostramos el proceso Application.ScreenUpdating = True End Sub He incluido una línea, que es la que hace que nos desplacemos hasta la primera hoja, antes de hacer nada, ya que si el usuario está posicionado en la hoja 2 o siguientes, se produce un error (error evidente). Última edición por 3pies; 06/03/2006 a las 05:03 |
| ||||
Cita: De esa forma, si le cambias el nombre a la hoja, te dará error, ya que la hoja llamada "hoja4" ahora tiene otro nombre.
Iniciado por niconico Sheets("hoja4").Select Para evitar eso, pon esto otro, que no va a buscar la hoja por su nombre, sino la hoja nº 4, se llame como se llame:
Código:
Hoja4.Select |
| ||||
Muchas gracias por la aclaración, una duda que tengo en esta línea del código: If Range("A1") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1 puedo indicar más celdas, pero si lo que quiero es la celda a1 de la hoja1, la a5 de la hoja 2 y la c5 de la hoja 3? se deberían incorporar en el condicional? Muchas gracias |
| ||||
Cita: Sí, claro, tienes que hacer cambios, porque ese código anterior, solo mira el rango A1 de todas las hojas.
Iniciado por niconico Muchas gracias por la aclaración, una duda que tengo en esta línea del código: If Range("A1") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1 puedo indicar más celdas, pero si lo que quiero es la celda a1 de la hoja1, la a5 de la hoja 2 y la c5 de la hoja 3? se deberían incorporar en el condicional? Muchas gracias Lo que quieres hacer sería así:
Código:
Salu2 Sub Imprimir_solo_si_hay_datos() 'Ocultamos el proceso, para que no se vea como salta de hoja en hoja Application.ScreenUpdating = False 'Nos desplazamos hasta la primera hoja del libro (da igual el nombre que tenga la hoja, pues siempre será Hoja1) Hoja1.Select 'Que recorra todo el libro en búsqueda de todas las hojas For i = 1 To Sheets.Count 'Comprobamos que existan datos, para imprimir cada hoja If i = 2 Then 'Indicamos que cuando llega a la hoja 2 del bucle, mire el rango A5 If Range("A5") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1 ElseIf i = 3 Then 'Indicamos que cuando llega a la hoja 3 del bucle, mire el rango C5 If Range("C5") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1 Else 'Si estamos en otra hoja distinta a la 2, y la 3, que compruebe la celda A1 If Range("A1") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1 End If 'Si no estamos en la última hoja, que avance a la siguiente pestaña (u hoja) If i < Sheets.Count Then ActiveSheet.Next.Select Next 'Mostramos el proceso Application.ScreenUpdating = True End Sub |
| ||||
Muchas gracias, una última pregunta (de verdad) If i = 2 Then If Range("A5") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1 En este código para decirle que en vez de hacer una copia de la hoja haga una copia de la página 1 de esa hoja (que es donde se encuentra la tabla)? Siento haber abusado de tu paciencia, muchas gracias ^_^ |
| ||||
Pues en lugar de...
Código:
Pon esto (para hacer estas cosas, lo mejor, es utilizar la grabadora de macros, que es lo que he hecho yo ahora, quitándole algún código que no se necesita)...If Range("A5") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1
Código:
Creo que ya está todo contestado :)If Range("A5") <> "" Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1 Editado: Otra opción que puedes utilizar, es definir un rango de impresión. Por ejemplo, con este código, estás marcando como área de impresión desde A1 hasta D15:
Código:
ActiveSheet.PageSetup.PrintArea = "A1:D15" Última edición por 3pies; 06/03/2006 a las 08:50 |