Macro para imprimir celdas con solo con datos

Tengo un problema quiero imprimir etiquetas en Excel pero solo las que contengan contenido, he echo esta pero imprime toda la columna no solo las que tienen datos creo que el problema es que las que aparentemente están vacías tienen una fórmula que no puedo quitar porque es necesaria como puedo hacer?

Desde ya muchas gracias.

Sub AreaImpresion()

Dim primera, ultima As Variant

Range("B1").Select
If ActiveCell.Value = "" Then
Selection.End(xlToRight).Select
End If
primera = ActiveCell.Address
ActiveCell.SpecialCells(xlLastCell).Select
ultima = ActiveCell.Address
ActiveSheet.PageSetup.PrintArea = (primera & ":" & ultima)
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
End Sub

1 respuesta

Respuesta
2

[H o l a y bienvenida a TodoExpertos.

¿En cuál celda tienes la fórmula?

Puedes poner aquí la fórmula.

También pon aquí una imagen para ver cómo se ve una etiqueta con datos y una etiqueta vacía. Procura que en la imagen se vean las filas y las columnas de la hoja de excel.

Para insertar imágenes utiliza el icono para añadir imagen.

hola  gracias por contestar 

la primera es donde se encuentran las etiquetas y la formula contiene los datos de la hoja con el nombre de plantilla y la plantilla los datos vienen de la tabla de bocadillos.

pero básicamente es que la macro va bien pero imprime todas las celdas que contiene esa formula y tiene que estar porque si no duplica las etiquetas no se si me he explicado bien porque es un poco lioso escribirlo. gracias

Bueno en tu imagen con fórmulas solamente aparece un dato.

La fórmula hace algo que no entiendo, si la celda B1 está vacía, entonces selecciona las celdas hacia la derecha:

  Range("B1").Select
  If ActiveCell.Value = "" Then
  Selection.End(xlToRight).Select
  End If

________________________________________-

Veamos si esto es lo que necesitas. Prueba la siguiente macro

Sub AreaImpresion()
  Dim lc As Long, primera As String, ultima As String
  lc = ActiveSheet.Rows(1).Find("*", , xlValues, , xlColumns, xlPrevious).Column
  primera = ActiveSheet.Columns(lc).Find("*", , xlValues, , xlByRows, xlPrevious).Address
  ultima = ActiveSheet.Rows(1).Find("*", , xlValues, , xlColumns, xlPrevious).Address
  Application.ScreenUpdating = False
  ActiveSheet.PageSetup.PrintArea = (primera & ":" & ultima)
  ActiveSheet.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub

Si solamente quieres ver el resultado de las etiquetas a imprimir, sin enviar a la impresora, puedes hacer una vista preliminar, entonces prueba con la siguiente macro:

Sub AreaImpresion()
  Dim lc As Long, primera As String, ultima As String
  lc = ActiveSheet.Rows(1).Find("*", , xlValues, , xlColumns, xlPrevious).Column
  primera = ActiveSheet.Columns(lc).Find("*", , xlValues, , xlByRows, xlPrevious).Address
  ultima = ActiveSheet.Rows(1).Find("*", , xlValues, , xlColumns, xlPrevious).Address
  Application.ScreenUpdating = False
  ActiveSheet.PageSetup.PrintArea = (primera & ":" & ultima)
  ActiveSheet.PrintPreview
End Sub

HOLA 

la primera macro va genial lo único como hago para poner el botón de imprimir en la hoja de bocadillo y que los datos sea la hoja de etiquetas.

y mil gracias por ayudarme 

Prueba así

Sub AreaImpresion()
  Dim lc As Long, primera As String, ultima As String
  With Sheets("ETIQUETAS")
    lc = .Rows(1).Find("*", , xlValues, , xlColumns, xlPrevious).Column
    primera = .Columns(lc).Find("*", , xlValues, , xlByRows, xlPrevious).Address
    ultima = .Rows(1).Find("*", , xlValues, , xlColumns, xlPrevious).Address
    Application.ScreenUpdating = False
    .PageSetup.PrintArea = (primera & ":" & ultima)
    .PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
  End With
End Sub

hola me sale este error 

Presiona el botón Depurar y dime cuál línea de la macro se pinta de amarillo.

También pon aquí la imagen de la hoja "ETIQUETAS" cuando ocurrió el error, para ver los datos que tienes.

Revisa que el nombre de tu hoja "ETIQUETAS" no tenga espacios del lado derecho.

Borra los espacios y prueba nuevamente.

hola lo he revisado y no hay nada a la derecha le he dejado el botón de imprimir en la hoja etiquetas te agradezco mucho la ayuda que me has dado. 

Envíame tu libro para revisar el nombre. Si tienes información confidencial, reemplázala por datos genéricos.

mi correo [email protected]

Edita el nombre y elimina el espacio

Te anexo una macro actualizada para que la utilices en la hoja "bocadillo"

Sub AreaImpresion()
  Dim lc As Long, primera As String, ultima As String
  With Sheets("ETIQUETAS")
    On Error Resume Next
    lc = .Rows(1).Find("*", , xlValues, , xlColumns, xlPrevious).Column
    If lc = 0 Then
      MsgBox "No hay etiquetas a imprimir"
      Exit Sub
    End If
    On Error GoTo 0
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    primera = .Columns(lc).Find("*", , xlValues, , xlByRows, xlPrevious).Address
    ultima = .Rows(1).Find("*", , xlValues, , xlColumns, xlPrevious).Address
    .PageSetup.PrintArea = (primera & ":" & ultima)
    .PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    Application.ScreenUpdating = True
  End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas