Enviar varias hojas de un libro de Excel a imprimir o archivo

Por

Es común que tengas un libro con muchas hojas y solamente quieras enviar  algunas de ellas a un archivo a imprimir o archivo PDF o a otro archivo de Excel.

Con un formulario (UserForm) se pueden listar todas las hojas, cada hoja con la opción de  poder seleccionarla y un botón para procesar.

La idea es esta, presionas un botón en alguna hoja de tu excel y que te aparezca esta ventana con todas las hojas de tu libro.

enviar-varias-hojas-a-imprimir-excel-1

Para crear el formulario sigue los siguientes pasos:

Instrucciones para crear un UserForm

  1. Abre tu hoja de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / UserForm
  4. En el panel del UserForm creas los siguientes controles un Label, un ListBox y un botón.
  5. Para crear un control selecciona el control del cuadro de herramientas y arrástralo al userform

enviar-varias-hojas-a-imprimir-excel-2

  1. Después de poner el control puedes hacerlo más grande.
  2. Presiona el botón "Ver Código"

enviar-varias-hojas-a-imprimir-excel-3

  1. En el panel que te abre, pega el siguiente código:
Dim hojas

Dim cargando

'Private Sub CommandButton1_Click()

'Por.Dante Amor

Dim Pdfhojas()

Dim HojasOcultas()

Application.ScreenUpdating = False

Application.DisplayAlerts = False

'    hojaactiva = ActiveSheet.Name

n = -1

m = -1

For i = 0 To ListBox1.ListCount - 1

If ListBox1.Selected(i) Then

h = ListBox1.List(i)

n = n + 1

ReDim Preserve Pdfhojas(n)

Pdfhojas(n) = h

wvis = Sheets(h).Visible

If wvis <> -1 Then

m = m + 1

ReDim Preserve HojasOcultas(m)

HojasOcultas(m) = h

Sheets(h).Visible = -1

End If

End If

Next

If n > -1 Then

ruta = ThisWorkbook.Path & "\"

arch = "varias hojas"

'        'Guarda archivo PDF

If CheckBox1.Value = True Then

Sheets(Pdfhojas).Select

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _

Filename:=ruta & arch & ".pdf", _

Quality:=xlQualityStandard, IncludeDocProperties:=True, _

IgnorePrintAreas:=False, OpenAfterPublish:=False

End If

'        'Imprime las hojas

If CheckBox2.Value = True Then

Sheets(Pdfhojas).PrintOut

End If

'        'Guarda archivo como xlsx

If CheckBox3.Value = True Then

Sheets(hojas).Copy

ActiveWorkbook.SaveAs _

Filename:=ruta & arch & ".xlsx", _

FileFormat:=xlExcel12, CreateBackup:=False

ActiveWorkbook.Close False

End If

'Guarda archivo como Binario

'Sheets(hojas).Copy

'ActiveWorkbook.SaveAs _

Filename:=ruta & arch, _

FileFormat:=xlExcel12, CreateBackup:=False

'ActiveWorkbook.Close False

'        'Oculta nuevamente las hojas

If m > -1 Then

Sheets(HojasOcultas).Visible = 0

End If

End If

Sheets(hojaactiva).Select

MsgBox "Proceso terminado", vbInformation

End Sub

'Private Sub ListBox1_Change()

 

If cargando Then Exit Sub

cargando = True

For i = 0 To ListBox1.ListCount - 1

For j = LBound(hojas) To UBound(hojas)

If LCase(ListBox1.List(i)) = LCase(hojas(j)) Then

ListBox1.Selected(i) = True

Exit For

End If

Next

Next

cargando = False

End Sub

'Private Sub UserForm_Activate()

'Por.Dante Amor

'Hojas que siempre se deben considerar

hojas = Array("Hoja A", "Hoja B")

cargando = True

ListBox1.MultiSelect = 1

ListBox1.ListStyle = 1

For Each h In Sheets

Select Case Left(UCase(h.Name), 2)

Case "AC", "AS" 'Poner las 2 primeras letras de las

'hojas que no deben aparecer en la lista

'
Case Else

ListBox1.AddItem h.Name

For j = LBound(hojas) To UBound(hojas)

If LCase(h.Name) = LCase(hojas(j)) Then

ListBox1.Selected(ListBox1.ListCount - 1) = True

Exit For

End If

Next

End Select

Next

cargando = False

End Sub

  1. En esta versión, se tienen las siguientes consideraciones:
    • En la lista de hojas, también van a aparecer las hojas que se tienen ocultas.
    • En la macro puedes definir cuáles hojas siempre se deben procesar, solamente agrega el nombre de hojas en la siguiente línea de la macro:
hojas = Array("Hoja A", "Hoja B")
  • También en la macro puedes excluir hojas para no ser vistas en la lista, por ejemplo, si tienes varias hojas con el prefijo “AC” y no las deseas ver y por lo tanto no serán consideradas en el proceso; entonces puedes actualizar las letras en la siguiente línea de la macro:
Case "AC", "AS"
  1. Actualiza en la macro el nombre del archivo a generarse en esta línea.

arch = "varias hojas"

  1. Regresa a tu hoja de excel y realiza lo siguiente para poner un botón en una hoja y poder abrir el formulario.

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: abrir
  10. Para ejecutarla dale click a la imagen.

Macro para abrir el formulario

Sub Abrir()

UserForm1.Show

End Sub

Listo, presiona el botón de la hoja para ver la lista de hojas, selecciona una o varias hojas, marca la casilla o las casillas de lo deseado: “Generar Pdf”, “Imprimir”, “Generar archivo de Excel”  y presiona el botón “Aceptar”.

Descargar archivo.

Contenido relacionado:
Gerencie.com en su correo.

Suscríbase y nosotros colocaremos en su bandeja de entrada la mejor información que generamos diariamente.


Déjenos su opinión

4 Opiniones
  1. Camilo Lopez Dice:

    hola mil gracias por el aporte..... pero se me presenta un error en la linea de codigo cuando quiero usar la opcion de imprimir, se detiene el proceso aca:
    If CheckBox3.Value = True Then
    Sheets(hojas).Copy
    ActiveWorkbook.SaveAs _
    Filename:=ruta & arch & ".xlsx", _
    FileFormat:=xlExcel12, CreateBackup:=False
    ActiveWorkbook.Close False
    End If

    Responder
    • Dante Amor Dice:

      Qué mensaje de error te aparece?

      Responder
  2. Favio Valdez Dice:

    Hola Dante. Lo hice para mi trabajo y me sale proceso terminado pero no me lo graba.

    Responder
    • Dante Amor Dice:

      Hola, perdona la demora.
      Sigues teniendo problemas?
      Intentaste con las 3 opciones de imprimir, generar pdf y generar excel?

      Responder
En Gerencie.com está permitido opinar, criticar, discutir, controvertir, disentir, etc., pero debe hacerlo con respeto, sin insultar y sin ofender a otros.

Información legal aplicable para Colombia.