Extraer hojas excel con macro

Tengo un libro que tiene 35 hojas, 31 de estas son los días del mes (1,2,3,4,5,6 etc) y las otras 4 nombradas A, B, C Y DE, ¿hay alguna forma con un botón (macro) por ejemplo seleccionar los días que se quieran extraer para que excel cree un nuevo libro con las hojas que se especifiquen?

Por ejemplo tengo los 31 días del mes más las hojas A, B, C Y DE, entonces solo quiero extraer los días del 8 al 11, y que excel extraiga esas hojas y cree un libro nuevo solo con las hojas del 8 al 11 y extraiga además por defecto a ese nuevo libro las hojas A, B, ¿C Y D?

1 Respuesta

Respuesta
1

Revisa la macro de esta respuesta:

Macro para desplegar lista y seleccionar hojas para exportar a otro libro de excel

En esta respuesta explico cómo crear el form:

MACRO de excel para imprimir varias hojas de un mismo libro

Sal u dos. No olvides valorar y like mis respuestas.

Funciona perfecto, ¿pero puedo seleccionar hojas por defecto automáticamente en el listbox? Por ejemplo en el listbox selecciono manualmente los días del reporte que me interesan, pero adicional a eso necesito poner 5 hojas por defecto con nombres a, b, c y DE, ¿es posible? Gracias

Revisar las macros en esta respuesta:

Macros para exportar a pdf hojas seleccionadas de un libro de excel

No olvides valorar la respuesta y like en las otras respuestas

No logro adaptar el codigo me sale error, lo tengo asi;

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim hojas()
n = -1
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
n = n + 1
ReDim Preserve hojas(n)
hojas(n) = ListBox1.List(i)
End If
Next
If n > -1 Then
Sheets(hojas).Copy
End If
End Sub

Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
Private Sub UserForm_Activate()
hojas = Array("Menu", "Listado personal", "Listado equipos", "Listado actividades", "FACTURACIÓN", "BASE DE DATOS")
ListBox1.MultiSelect = 1
ListBox1.ListStyle = 1
For Each h In Sheets
ListBox1. AddItem ("R01")
ListBox1. AddItem ("R02")
ListBox1. AddItem ("R03")
ListBox1. AddItem ("R04")
ListBox1. AddItem ("R05")
ListBox1. AddItem ("R06")
ListBox1. AddItem ("R07")
ListBox1. AddItem ("R08")
ListBox1. AddItem ("R09")
ListBox1. AddItem ("R10")
ListBox1. AddItem ("R11")
ListBox1. AddItem ("R12")
ListBox1. AddItem ("R13")
ListBox1. AddItem ("R14")
ListBox1. AddItem ("R15")
ListBox1. AddItem ("R16")
ListBox1. AddItem ("R17")
ListBox1. AddItem ("R18")
ListBox1. AddItem ("R19")
ListBox1. AddItem ("R20")
ListBox1. AddItem ("R21")
ListBox1. AddItem ("R22")
ListBox1. AddItem ("R23")
ListBox1. AddItem ("R24")
ListBox1. AddItem ("R25")
ListBox1. AddItem ("R26")
ListBox1. AddItem ("R27")
ListBox1. AddItem ("R28")
ListBox1. AddItem ("R29")
ListBox1. AddItem ("R30")
ListBox1. AddItem ("R31")
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
Next
End Sub

¿Qué debo corregir?

Ya no entendí qué quieres hacer.

Este es tu comentario:

Funciona perfecto,

No olvides valorar la respuesta.


Si quieres agregar hojas a la impresión o al pdf, tienes que hacerlo sobre este código:

Dim hojas
Dim cargando
'
Private Sub CommandButton1_Click()
'Por.Dante Amor
    Dim Pdfhojas()
    Dim HojasOcultas()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    ruta = ThisWorkbook.Path & "\"
    arch = "varias"
    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
            Sheets(h).PrintOut Copies:=1, Collate:=True
            'Sheets(h).Visible = wvis
        End If
    Next
    If n > -1 Then
        Sheets(Pdfhojas).Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=ruta & arch & ".pdf", _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, OpenAfterPublish:=False
        Sheets(HojasOcultas).Visible = 0
    End If
    MsgBox "Impresión terminada", 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 = Array("Print_page", "Hoja2", "index", "revision")
    cargando = True
    ListBox1.MultiSelect = 1
    ListBox1.ListStyle = 1
    For Each h In Sheets
        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
    Next
    cargando = False
End Sub

Solamente cambia las hojas que siempre quieras seleccionar en esta línea:

hojas = Array("Print_page", "Hoja2", "index", "revision")

Lo que pusiste en tu macro no lo entiendo.

La macro que te estoy enviando ya carga en el listbox todas tus hojas, no tienes que hacerlo una por una.


Sal u dos

Ese es el detalle en el que no me explique bien, lo que sucede es que yo tengo un libro con los 31 días del mes pero entre cada día hay dos hojas más que no utilizo, osea en excel sería así

Hoja R01 -> día 1

Hoja AC1 -> No la necesito en el nuevo archivo

Hoja AC2 -> Tampoco la necesito en el nuevo archivo

Hoja R02 -> día 2

Hoja AC2 -> No la necesito en el nuevo archivo

Hoja AS2 -> Tampoco la necesito en el nuevo archivo

Por que al cargar en el listbox todas las hojas del libro, el listado se vuelve muy extenso por que incluye también las hojas AC Y AS, entonces intente cargar item por item para solo cargar los días, las Hojas R01, R02 etc y así hacer más fácil la selección a la hora de seleccionar los días del mes que quiero generar, necesito que predeterminadamente a todos los archivos le cargue las hojas A, B Y DE por que son de listas desplegables y así que alimentan las hojas de los días (R01 Y R02 etc)

Luego el resultado final que necesito es un archivo guardado en formato binario en la misma ubicación del archivo original, que contenta los días seleccionados en el listbox + las hojas A, B y C, osea no necesito generar PDF ni imprimir nada, solo un archivo de excel con las hojas mencionadas anteriormente, gracias

Sin duda se pueden hacer muchas mejoras a la macro.

Esta es tu petición original:

Seleccionar los días que se quieran extraer para que excel cree un nuevo libro con las hojas que se especifiquen

Pero ahora estás solicitando otros temas. Con gusto te ayudo con todas tus peticiones pero vamos cerrando tema por tema. Crea un nuevo tema y te ayudo a adaptarlo en la macro.

La pregunta no admite más respuestas

Más respuestas relacionadas