Cómo Imprimir algunas hojas de mi libro?

Tengo un libro con 19 hojas, cada hoja tiene un nombre distinto y necesito imprimir solo algunas. Ej de la hoja2 a la hoja17

1 respuesta

Respuesta
1

Te anexo mi aplicación para seleccionar una o varias hojas, para después imprimirlas o enviarlas a pdf o enviarlas a un archivo de excel.

Crea un Userform con lo siguiente

La macro:

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()
'Por.Dante Amor
    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

El archivo:

https://www.dropbox.com/s/za4o1oww0sxz1bs/Enviar%20Varias%20Hojas%20de%20un%20Libro%20de%20Excel%20a%20imprimir%20o%20archivo.xlsm?dl=0 

Para ver más documentación, descarga el siguiente archivo:

Guía para imprimir varias hojas


.

.

Ya había visto esa solución pero no me parece la más óptima, ya que siempre debo imprimir y excluir las mismas hojas. O tal vez debería preguntar cómo no imprimir una hoja de Excel ??

Esta solución es nueva, habrás visto la versión anterior.

Con esta nueva versión puedes incluir siempre las mismas hojas, en tu caso, si pones los 10 ó 15 nombres de hojas en la relación, siempre aparecerán marcadas para imprimir, y de ahí podrás agregar otras hojas. Pero siempre estarán marcadas las que tu quieras.

 'Hojas que siempre se deben considerar
 hojas = Array("Hoja A", "Hoja B")

Y también puedes excluir hojas:

            Case "AC", "AS" 'Poner las 2 primeras letras de las
                            'hojas que no deben aparecer en la lista

Descarga los nuevos archivos para que veas la versión.

Nueva versión:

https://drive.google.com/file/d/1EuqMWvNmONrPNs0YrczbtcYcqdwhhia-/view?usp=sharing 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas