Seleccionar Varias hojas y copiar o mover a un nuevo libro

Necesito un código que seleccione varias hojas de un libro para mover o copiar a un libro nuevo la hojas seleccionadas, solo necesito seleccionar la varias hojas que están no estén vacías en la celda a1 de cada hoja, tengo este código pero no logro seleccionar múltiples hojas.

'
Sub EXCELeINFOGuardarHojaComoArchivoNuevo()
'
'Declaramos las variables.
Dim VentanasProtegidas As Boolean
Dim EstructuraProtegida As Boolean
Dim NombreHoja As String
Dim Confirmación As String
Dim NombreArchivo As String
Dim GuardarComo As Variant
'
'En caso de error.
On Error GoTo ErrorHandler
'
'Validamos si la ventana o la estructura del archivo están protegidos.
VentanasProtegidas = ActiveWorkbook.ProtectWindows
EstructuraProtegida = ActiveWorkbook.ProtectStructure
'
'En caso de estar protegidas mostramos mensaje.
If VentanasProtegidas = True Or EstructuraProtegida = True Then
MsgBox "No se puede ejecutar el comando cuando la estructura del archivo está protegida.", _
vbExclamation, "EXCELeINFO"
Else
'
'Copiamos la hoja y guardamos.
NombreHoja = ActiveSheet.Name
Confirmación = MsgBox("Desea guardar la hoja '" & NombreHoja & "' como archivo nuevo?", _
vbQuestion + vbYesNo, "EXCELeINFO")
Application.ScreenUpdating = False
If Confirmación = vbYes Then

'AQUÍ DEBERÍAS SELECCIONAR VARIAS HOJAS, tengo este código pero no me resulta.

'For Each hoja In ActiveWorkbook.Sheets
'If hoja.Range("A1").Value = "" Then hoja.Select
'Next

ActiveSheet.Select
ActiveSheet.Copy
NombreArchivo = ActiveWorkbook.Name
GuardarComo = Application.GetSaveAsFilename(InitialFileName:=NombreHoja, _
fileFilter:="Libro de Excel(*.xlsx), *.xlsx, Libro de Excel habilitado para macros(*.xlsm), *.xlsm, Libro de Excel 97-2003(*.xls), *.xls,CSV (delimitado por comas)(*.csv),*.csv", _
Title:="EXCELeINFO - guardar hoja activa como archivo nuevo.")
If GuardarComo = False Then
Workbooks(NombreArchivo).Close SaveChanges:=False
Else
ActiveWorkbook.SaveAs GuardarComo
End If
Else
End If
'
End If
'
Exit Sub
'
'En caso de error mostramos un mensaje.
ErrorHandler:
MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "EXCELeINFO"
Workbooks(NombreArchivo).Close SaveChanges:=False
'
End Sub

1 Respuesta

Respuesta
1

Así quedaría tu macro completa:

Sub EXCELeINFOGuardarHojaComoArchivoNuevo()
'
'Declaramos las variables.
Dim VentanasProtegidas As Boolean
Dim EstructuraProtegida As Boolean
Dim NombreHoja As String
Dim Confirmación As String
Dim NombreArchivo As String
Dim GuardarComo As Variant
'
'En caso de error.
On Error GoTo ErrorHandler
'
'Validamos si la ventana o la estructura del archivo están protegidos.
VentanasProtegidas = ActiveWorkbook.ProtectWindows
EstructuraProtegida = ActiveWorkbook.ProtectStructure
'
'En caso de estar protegidas mostramos mensaje.
If VentanasProtegidas = True Or EstructuraProtegida = True Then
    MsgBox "No se puede ejecutar el comando cuando la estructura del archivo está protegida.", _
    vbExclamation, "EXCELeINFO"
Else
    'Copiamos la hoja y guardamos.
    NombreHoja = ActiveSheet.Name
    Confirmación = MsgBox("Desea guardar la hoja '" & NombreHoja & "' como archivo nuevo?", _
    vbQuestion + vbYesNo, "EXCELeINFO")
    Application.ScreenUpdating = False
    If Confirmación = vbYes Then
        Set l1 = ActiveWorkbook
        Set l2 = Workbooks.Add
        l1.Activate
        For Each hoja In l1.Sheets
            If hoja.Range("A1").Value <> "" Then
                hoja.Copy After:=l2.Sheets(l2.Sheets.Count)
            End If
        Next
        NombreArchivo = l1.Name
        GuardarComo = Application.GetSaveAsFilename(InitialFileName:=NombreHoja, _
        fileFilter:="Libro de Excel(*.xlsx), *.xlsx, Libro de Excel habilitado para macros(*.xlsm), *.xlsm, Libro de Excel 97-2003(*.xls), *.xls,CSV (delimitado por comas)(*.csv),*.csv", _
        Title:="EXCELeINFO - guardar hoja activa como archivo nuevo.")
        If GuardarComo = False Then
            Workbooks(NombreArchivo).Close SaveChanges:=False
        Else
            ActiveWorkbook.SaveAs GuardarComo
        End If
    End If
End If
Exit Sub
'
'En caso de error mostramos un mensaje.
ErrorHandler:
MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "EXCELeINFO"
Workbooks(NombreArchivo).Close SaveChanges:=False
End Sub

Saludos. Dante Amor
Si es lo que necesitas.

si lo necesito que lo guarde automático de la misma forma, pero con un nombre "LIBROBILATERAL2" mas la fecha de hoy? , debo hacer una nueva pregunta?

Saludos

Cambia esta línea

NombreHoja = ActiveSheet.Name

por esta

NombreHoja = "LIBROBILATERAL2 " & Format(Date, "dd-mm-yyyy")

Pero automático me refería que no saliera la venta de guardar como, que solo se guardara en un ubicación determinada con la extensión xls, (97-2003).

Saludos

Entonces cambia esta línea

ActiveWorkbook. SaveAs GuardarComo

Por esta

ActiveWorkbook.SaveAs Filename:=l1.Path & "\LIBROBILATERAL2 " & Format(Date, "dd-mm-yyyy"), _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

Estimado:

Sabes no me funciona, no guarda el libro nuevo en ninguna parate, hay que guardarlo manual

Saludos

Cambia tu macro por esta.

Lo que quieres es guardar todas las hojas en un libro, solamente necesitas esto:

Sub guardarhoja()
'Por.DAM
Application.ScreenUpdating = False
    Set l1 = ActiveWorkbook
    Set l2 = Workbooks.Add
    For Each hoja In l1.Sheets
        If hoja.Range("A1").Value <> "" Then hoja.Copy After:=l2.Sheets(l2.Sheets.Count)
    Next
   l2.SaveAs Filename:=l1.Path & "\LIBROBILATERAL2 " & Format(Date, "dd-mm-yyyy")
End Sub

No olvides finalizar la pregunta.

Lo ultimo, es que la extensión debería ser xls osea formato 97-2003, y el libro nuevo que crea trae 3 hojas(hoja1,hoja2,hoja3) y debería solo dejar las hoja que copio

Saludos

¿Qué versión tienes de excel?

¿Tienes 2007 y quieres que se guarde como 2003?

Usa esta:

Sub guardarhoja()
'Por.DAM
Application.ScreenUpdating = False
Application.DisplayAlerts = False
    Set l1 = ActiveWorkbook
    Set l2 = Workbooks.Add
    Set h = ActiveSheet
    For Each hoja In l1.Sheets
        If hoja.Range("A1").Value <> "" Then hoja.Copy After:=l2.Sheets(l2.Sheets.Count)
    Next
    If l2.Sheets.Count > 1 Then l2.Sheets(h.Name).Delete
    archivo = l1.Path & "\LIBROBILATERAL2 " & Format(Date, "dd-mm-yyyy")
    l2.SaveAs Filename:=archivo, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
End Sub

al final llegue a esto:

Sub guardarhoja21()

'Por.DAM
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ActiveWorkbook
Set l2 = Workbooks.Add
Set h = ActiveSheet
For Each hoja In l1.Sheets
If hoja.Range("A1").Value <> "" Then hoja.Copy After:=l2.Sheets(l2.Sheets.Count)
Next
archivo = l1.Path & "\LIBROBILATERAL2 " & Format(Date, "dd-mm-yyyy")
l2.SaveAs Filename:=archivo, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ActiveWorkbook
For Each hoja In l1.Sheets
If hoja.Range("A1").Value = "" Then hoja.Delete
Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveWorkbook.Sabe
ActiveWorkbook.Close
End Sub

agregue que eliminara todas las hojas en blanco o que están en blanco en la celda a1 y guarda y cierra el libro,

Pero muchas gracias por todo, te pasaste por tu pronta respuesta.

Muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas