** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Imprimir solamente las celdas que conteng
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoImprimir solamente las celdas que conteng

 Responder Responder Página  12>
Autor
Mensaje
gautxori Ver desplegable
Nuevo
Nuevo


Unido: 25/Mayo/2011
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Tema: Imprimir solamente las celdas que conteng
    Enviado: 26/Mayo/2011 a las 15:53
Hola, amigos.
Tengo una hoja Excel que se crea tomando datos de una tabla DBF.
La hoja tiene 16 páginas con fórmulas derivadas de la tabla. Pero sucede que no siempre se llenan las celdas de las 16 hojas (aunque sí están llenas con fórmulas) con datos, ya que la tabla puede contener un número de registros diferente cada vez.
Pero cuando tengo la hoja Excel en pantalla y quiero imprimirla pinchando en el icono de la impresora, me imprime las 16 páginas, aunque la mayor parte de ellas estén en blanco.
¿Existe la forma de que sólo imprima las páginas que realmente contienen datos?
Gracias por anticipado por vuestras respuestas.
Koldo.
Arriba
morenen Ver desplegable
Habitual
Habitual


Unido: 02/Mayo/2007
Localización: Navarra
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Enviado: 26/Mayo/2011 a las 16:41
Asi a botepronto, se me ocurre que puedes hacer una macro, que oculte las celdas que no tienen datos, que seguidamente imprima el resultado de esa operacion, y que al finallizar la impresion vuelva a mostrar las celdas/filas ocultas.
 
Un saludo.
Arriba
gautxori Ver desplegable
Nuevo
Nuevo


Unido: 25/Mayo/2011
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 26/Mayo/2011 a las 18:30
Hola, morenem.
¿Y cómo lo hago?
Soy un novato con ganas de aprender.
Gracias por anticipado.
Koldo.
Arriba
morenen Ver desplegable
Habitual
Habitual


Unido: 02/Mayo/2007
Localización: Navarra
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Enviado: 27/Mayo/2011 a las 12:02
Hola
Conmigo... aprender, lo que se dice aprender poco, ya que tengo poca idea.
 
Aqui tienes un codigo que he hecho
Es poco eficiente. Solo lo he probado con 20 filas. Esconde aquellas filas en las que no encuentre datos en su primera columna. Seguramente, te ofrezcan mejores soluciones. Si no es esto lo que buscas, indicame como tiene que buscar las celdas/filas vacias para ocultarlas, y vere si puedo adaptarlo.
 
Sub imprimirCeldasConDatos()
Dim i, filasTotales As Integer
    'Numero de filas con formulas. He hecho una prueba con 20 filas.
    filasTotales = 20
    'Recorro todas las filas desde la primera hasta la ultima (de la primera columna)
    For i = 1 To filasTotales
        'Si encuentra una celda vacia
        If Cells(i, 1) = "" Then
            'Oculta la fila entera
            Rows(i).EntireRow.Hidden = True
        End If
    Next i
   
    'preparar la hoja para la impresión
    With ActiveSheet.PageSetup
        .PrintArea = ""
        .Orientation = xlPortrait 'xlLandscape
        .PaperSize = xlPaperA4 'formato A4
        .BlackAndWhite = False 'incluir colores o no
        .FitToPagesWide = 1 'reduce el tamaño de la hoja (ancho)
        .FitToPagesTall = 1 'reduce el tamaño de la hoja (alto)
        .CenterHorizontally = False 'centrar horizontalmente
        .CenterVertically = False 'centrar verticalmente
    End With
 
    'imprimir las celdas seleccionadas (1 copia)
    ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True
 
    'Recorro todas las filas desde la primera hasta la ultima (de la primera columna)
    For i = 1 To filasTotales
        'Si encuentra una celda vacia
        If Cells(i, 1) = "" Then
            'Muestra la fila entera
            Rows(i).EntireRow.Hidden = False
        End If
    Next i
End Sub


Editado por morenen - 27/Mayo/2011 a las 12:03
Arriba
gautxori Ver desplegable
Nuevo
Nuevo


Unido: 25/Mayo/2011
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 31/Mayo/2011 a las 13:36
Hola, morenen.
He creado una macro con el código que mandaste, cambiando la columna 1 por la 2 y ampliando el número de filas a 500.
Todas las celdas de la hoja contienen fórmulas que extraen los datos de otra hoja del mismo libro.
He probado insertando una línea con la columna 2 vacía y en este caso funciona correctamente.
Pero como el resto de celdas contienen fórmulas (aunque no haya datos), me imprime todas las filas de la hoja.
Espero tus noticias y gracias por anticipado.
Koldo.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5771
Enlace directo a este mensaje Enviado: 31/Mayo/2011 a las 14:43

¿La columna B tiene fórmulas?

En caso afirmativo, ¿Como es la fórmula?
Saludos desde Tenerife.

Mi sitio_web con ejemplos Excel.
Arriba
morenen Ver desplegable
Habitual
Habitual


Unido: 02/Mayo/2007
Localización: Navarra
Estado: Sin conexión
Puntos: 104
Enlace directo a este mensaje Enviado: 31/Mayo/2011 a las 15:07
Eso comenta cual es la formula.
Y dinos cual es el valor que devuelve cuando se tiene que quedar en blanco.
 
Un saludo.
Arriba
gautxori Ver desplegable
Nuevo
Nuevo


Unido: 25/Mayo/2011
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 31/Mayo/2011 a las 15:43
Hola, amigos.
Os cuento el caso concreto, ya que me imagino que la solución me servirá para otras hojas.
Tengo una hoja, llamada Sondas, que toma los datos de otra llamada Sondaux. Esta última se rellena importando una base de datos DBF. Y ambas están dentro del mismo Libro.
La hoja Sondas tiene 5 columnas (A,B,C,D,E) y 500 filas. Todas las celdas, excepto las de cabecera, contienen fórmulas. Concretamente, en la columna B (que es la que utilizo para comparar) contiene la fórmula =sondaux!b2. La siguiente fila: =sondaux!b3, y así sucesivamente hasta 500.
Pero ocurre que en la hoja Sondaux puede haber un número de filas con datos diferente cada vez que tengo que usar la hoja Sondas para imprimirla.
Por seguir con el ejemplo, imaginaros que la hoja Sondaux tiene datos en 77 filas. En este caso, la hoja Sondas tendría 77 filas con datos como consecuencia de la aplicación de las fórmulas que contienen. El resto de las filas estarían visualmente vacías, pero contendrían la fórmula correspondiente.
Y lo que yo quiero es que al imprimir la hoja Sondas me imprima solamente las 77 filas donde se ven datos.
Espero haberme explicado bien.
Os agradezco de antemano vuestras respuestas.
Un afectuoso saludo.
Koldo.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5771
Enlace directo a este mensaje Enviado: 31/Mayo/2011 a las 16:17
 

Tu fórmula, cuando lee una celda vacia devuelve 0 (cero) incluso aunque no lo veas.

 
La fórmula...

=sondaux!b3

... sustitúyela por...

=SI(sondaux!B3="";"";sondaux!B3)

... y copia/pega hasta donde necesites.

 
Con esto te funcionará el código ofrecido por morenen.
 
 
Saludos desde Tenerife.

Mi sitio_web con ejemplos Excel.
Arriba
gautxori Ver desplegable
Nuevo
Nuevo


Unido: 25/Mayo/2011
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 03/Junio/2011 a las 19:32
Hola, amigos.
He hecho los cambios en la hoja, tal como me sugería AnSalVal.
Ahora tengo otro problema. ¿Cómo implemento el código de morenen en la hoja? Si utilizo Imprimir de la barra standard me sigue imprimiendo 16 hojas, la mayor parte en blanco.
Dentro de mi ignorancia, me imagino que tengo que colocar un botón de comando que me dé acceso al código de morenen, pero no sé cómo hacerlo.
¿Podéis ayudarme?
Gracias por anticipado.
Koldo.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5771
Enlace directo a este mensaje Enviado: 03/Junio/2011 a las 20:04

Tal como dices; una opción es con un botón el cual con boton derecho, Asignar macro... ejecutaría dicho código, pero siempre tendrías el handicap de que si pulsas el botón Imprimir de la aplicación, seguirías teniendo el mismo problema.

Quizás más radical sería captural el evento de impresión y redirigir hacia el código de morenen:

En el módulo Thisworbook:

Private Sub Workbook_BeforePrint(Cancel As Boolean) 
  If IsEmpty(Range("P10000").Value) Then 
    Cancel = True ' Cancelo la impresión ordinaria. 
    imprimirCeldasConDatos ' Llamada a impresión personalizada. 
  End If 
End Sub ' Workbook_BeforePrint

En el código de morenen añade lo que pongo en rojo:

     . . .
     Range("P10000").Value = "si" ' Permito impresión personalizada.
    'imprimir las celdas seleccionadas (1 copia)
     ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True
     Range("P10000").ClearContents ' Impido impresión ordinaria.
     . . .
 
 
Editado:  El problema de esta solución es que con Presentación preliminar también se ejecutaría el código.
 
 


Editado por AnSanVal - 03/Junio/2011 a las 20:19
Saludos desde Tenerife.

Mi sitio_web con ejemplos Excel.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5771
Enlace directo a este mensaje Enviado: 03/Junio/2011 a las 20:51
 

Para colocar un botón en la hoja (con Excel 2007):  Ficha: Programador*, Grupo: Controles > Insertar > Botón. En Asignar macro > Nombre de la macro; escribe imprimirCeldasConDatos.

 
Tambien puedes: Ficha: Insertar, Grupo: Ilustraciones > Formas > (la que prefieras). Botón derecho sobre la Forma > Asignar macro... > elige la macro y pulsa Aceptar.
 
 
* Si no está presente la ficha Programador: Botón de Office > Opciones de Excel > Más frecuentes > (activa la casilla de verificación) Mostrar ficha Programador en la cinta de opciones.
 
 
Saludos desde Tenerife.

Mi sitio_web con ejemplos Excel.
Arriba
gautxori Ver desplegable
Nuevo
Nuevo


Unido: 25/Mayo/2011
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 07/Junio/2011 a las 12:53
Hola, amigos.
Ante todo, perdón por retrasarme en la respuesta. He estado unos días fuera de casa y no he podido atender el foro.
En primer lugar os indico que trabajo con Excel 2000 y que hasta ahora nunca había trabajado con código, por lo que os pido nuevamente vuestra ayuda.
¿Cómo debo hacer para introducir el código en la hoja para posteriormente poder llamarlo desde un botón de comando?
Ya sé que para vosotros esto será coser y cantar, pero para mí supone un problema que no sé resolver.
Los pasos serían:
1. Introducir el código en la hoja.
2. Crear un botón en la propia hoja que active el código.
3. Guardar la hoja con los cambios introducidos.
Perdón por mi ignorancia y gracias por anticipado por vuestras respuestas.
Koldo.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5771
Enlace directo a este mensaje Enviado: 07/Junio/2011 a las 20:14
Intentaré se lo más explícito posible.
 
El código no va en la hoja. Debes ponerlo en el Editor de VBA. Para ello debes:
1.- Creo recordar que en versiones más  antiguas que 2007 ... Menú>Herramientas>Macros>Editor VBA... (o algo similar). No obstante en cualquier versión hasta el momento, lo puedes hacer con Alt+F11.
2.- El código de morenen lo debes poner en un módulo ordinario: Menú>Insertar>Módulo. Pegas el código en la ventana (en blanco) de la derecha.
3.- El código que te ofrecí (... Workbook_BeforePrint...) debes ponerlo en el módulo del libro, despues de hacer doble clic a la izquierda en ThisWorkbook, si no está visible; pulsa previamente Control+R.
4.- En la Hoja de cálculo, haces clic con el botón secundario sobre el botón  que has añadido y en el menú que se muestra elige Asignar macro...
 
Espero haber sido claro.
 
 
Saludos desde Tenerife.

Mi sitio_web con ejemplos Excel.
Arriba
gautxori Ver desplegable
Nuevo
Nuevo


Unido: 25/Mayo/2011
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 08/Junio/2011 a las 15:12
Hola, AnSanVal.
Tal como me aconsejas, he seguido tus recomendaciones. Te explico.
En el módulo ThisWorkbook tengo el siguiente código:
 
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If IsEmpty(Range("P10000").Value) Then
    Cancel = True     ' Cancelo la impresión ordinaria.
    imprimirCeldasConDatos ' Llamada a impresión personalizada.
End If
End Sub ' Workbook_BeforePrint
 
Y en el Módulo1, el código de morenen con las modificaciones que me indicaste:
 
Sub imprimirCeldasConDatos()
Dim i, filasTotales As Integer
    'Numero de filas con formulas.
    filasTotales = 500
    'Recorro todas las filas desde la primera hasta la ultima (de la cuarta columna)
    For i = 1 To filasTotales
        'Si encuentra una celda vacia
        If Cells(i, 4) = "" Then
            'Oculta la fila entera
            Rows(i).EntireRow.Hidden = True
        End If
    Next i
   
    'preparar la hoja para la impresión
    With ActiveSheet.PageSetup
        .PrintArea = ""
        .Orientation = xlPortrait 'xlLandscape
        .PaperSize = xlPaperA4 'formato A4
        .BlackAndWhite = False 'incluir colores o no
        ' .FitToPagesWide = 1 'reduce el tamaño de la hoja (ancho)
        ' .FitToPagesTall = 1 'reduce el tamaño de la hoja (alto)
        .CenterHorizontally = False 'centrar horizontalmente
        .CenterVertically = False 'centrar verticalmente
    End With
 
    'imprimir las celdas seleccionadas (1 copia)
    Range("P10000").Value = "si" ' Permito impresión personalizada.
    ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True
    Range("P10000").ClearContents ' Impido impresión ordinaria.

    'Recorro todas las filas desde la primera hasta la ultima (de la cuarta columna)
    For i = 1 To filasTotales
        'Si encuentra una celda vacia
        If Cells(i, 4) = "" Then
            'Muestra la fila entera
            Rows(i).EntireRow.Hidden = False
        End If
    Next i
End Sub
 
Pero, aunque analizando el código parece que todo está correcto, me sigue imprimiendo páginas en blanco.
¿Sabes dónde puede estar el problema?
Solamente indicarte que el libro consta de 4 hojas, pero es solamente en la Hoja1 donde tengo los resultados que quiero imprimir.
He probado a eliminar tu código de ThisWorkbook y colocarlo en Hoja1. Pero el problema sigue siendo el mismo.
Gracias por anticipado.
Koldo.
 
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable