Foros del Web » Soporte técnico » Ofimática »

Evitar en la impresión las macro

Estas en el tema de Evitar en la impresión las macro en el foro de Ofimática en Foros del Web. Tengo un problema con unas hojas de excel, tengo una herramienta que tiene sus tablas y sus macros, pero quería que cuando se rellenen esas ...
  #1 (permalink)  
Antiguo 06/03/2006, 02:54
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 3 meses
Puntos: 0
Evitar en la impresión las macro

Tengo un problema con unas hojas de excel, tengo una herramienta que tiene sus tablas y sus macros, pero quería que cuando se rellenen esas tablas exista la posibilidad de imprimirlas (hasta ahí bien) pero que no se impriman las macros (ya que estos son botones con forma de lupa y demás).Es posible? muchas gracias
  #2 (permalink)  
Antiguo 06/03/2006, 03:15
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
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.
  #3 (permalink)  
Antiguo 06/03/2006, 03:57
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 3 meses
Puntos: 0
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
  #4 (permalink)  
Antiguo 06/03/2006, 04:42
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
A ver si esto es lo que necesitas...
Código:
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
Editado:
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
  #5 (permalink)  
Antiguo 06/03/2006, 05:31
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 3 meses
Puntos: 0
Muchas gracias, muy buen código, le estoy dando vueltas y me va perfectamente, le añadí al final
Sheets("hoja4").Select
Range("c1").Select
porque quería que después de imprimir fuera a esa celda.
Un saludo
  #6 (permalink)  
Antiguo 06/03/2006, 05:38
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Cita:
Iniciado por niconico
Sheets("hoja4").Select
De esa forma, si le cambias el nombre a la hoja, te dará error, ya que la hoja llamada "hoja4" ahora tiene otro nombre.

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
  #7 (permalink)  
Antiguo 06/03/2006, 05:50
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 3 meses
Puntos: 0
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
  #8 (permalink)  
Antiguo 06/03/2006, 06:14
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Cita:
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
Sí, claro, tienes que hacer cambios, porque ese código anterior, solo mira el rango A1 de todas las hojas.

Lo que quieres hacer sería así:
Código:
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
Salu2
  #9 (permalink)  
Antiguo 06/03/2006, 07:00
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 3 meses
Puntos: 0
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 ^_^
  #10 (permalink)  
Antiguo 06/03/2006, 08:26
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Pues en lugar de...
Código:
If Range("A5") <> "" Then ActiveWindow.SelectedSheets.PrintOut Copies:=1
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)...
Código:
If Range("A5") <> "" Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1
Creo que ya está todo contestado :)

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
  #11 (permalink)  
Antiguo 06/03/2006, 09:44
Avatar de niconico  
Fecha de Ingreso: enero-2006
Mensajes: 166
Antigüedad: 18 años, 3 meses
Puntos: 0
Un millón de gracias
  #12 (permalink)  
Antiguo 06/03/2006, 09:49
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
...de nada.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:57.