Fusionar varias hojas en una excluyendo la portada

Necesito una macro que junte la información de varias hojas de un libro, no todas, ya que tengo una hoja que es de portada, en una nueva hoja. No se como excluir la hoja de portada.

1 Respuesta

Respuesta
1

.10.01.17

Buenas, Mony

Esta sería la estructura de tu rutina para excluir aquella hoja:

Sub JuntaHojas()
'---- Variables modificables ----
'=== MONI, modifica estos datos de acuerdo a tu proyecto:
    HojaFuera = "Portada" 'hoja a excluir
'---- fin Variables
'
'---- inicio de rutina:
'  
For Each LaHoja In Sheets
    If LaHoja.Name <> HojaFuera Then
    '
    'Aqui va tu rutina a funcionar con el resto de las hojas
    '  
    End If
Next
End Sub

Como verás es un procedimiento que evalúa el nombre de todas tus hojas y, cuando encuentra el que quieres excluir no la considera.

Si, eventualmente, fueran más de una hoja a excluir, podrías usar esta variante:

Sub JuntaHojas()
'---- Variables modificables ----
'=== MONI, modifica estos datos de acuerdo a tu proyecto:
    HojaFuera = "Portada" 'hoja a excluir
    HojaFuera2 = "Indice"
'---- fin Variables
'
'---- inicio de rutina:
'  
For Each LaHoja In Sheets
    Case LaHoja.Name
    Case HojaFuera, HojaFuera2
    'nada  
    Case Else
    '
    'Aqui va tu rutina a funcionar con el resto de las hojas
    '  
    End Select
Next
End Sub

Como verás en caso de coincidir con el nombre de hoja/s a excluir no hace nada.

De hecho, esta también serviría para el caso de que fuese una sola la hoja a omitir.

.

Fernando, estoy bien perdida... ayúdame a incorporar esta estructura en la macro que ya tenía para juntar todas las hojas.

Sub nueva()
Application.DisplayAlerts = False
For Each hoja In ActiveWorkbook.Sheets
If hoja.Name = "todas" Then hoja.Delete
Next
Sheets.Add before:=Sheets(1)
ActiveSheet.Name = "todas"
For x = 2 To Sheets.Count
Sheets(x).Select
Range("a1:o" & Range("a65000").End(xlUp).Row).Copy
Sheets("todas").Range("a65000").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlValues
Next
Sheets("todas").Select
End Sub

Te estaré eternamente agradecida!

Saludos.

Mony

.

Hola, de nuevo

En la siguiente rutina integré la tuya con la solución que te había propuesto:

Sub JuntaHojas()
'---- Variables modificables ----
'=== MONI, modifica estos datos de acuerdo a tu proyecto:
    HojaFuera = "Portada" 'hoja a excluir
    HojaFuera2 = "Indice"
'---- fin Variables
'
'---- inicio de rutina:
'  
Application.DisplayAlerts = False
'elimina la hoja "todas" existnte al iniciar el proceso:  
For Each hoja In ActiveWorkbook.Sheets
    If hoja.Name = "todas" Then hoja.Delete
Next
'crea nueva hoja de acumulación:  
Sheets.Add before:=Sheets(1)
ActiveSheet.Name = "todas"
'inicia proceso de acumulación de hojas:
'  
For x = 2 To Sheets.Count ' puedes cambiar x=2 por x=1
    Select Case Sheets(x).Name
        Case HojaFuera, HojaFuera2
            'nada
        Case Else
        Sheets(x).Select
        Range("A1:O" & Range("a65000").End(xlUp).Row).Copy
        With Sheets("todas").Range("a65000").End(xlUp).Offset(1, 0)
            .PasteSpecial Paste:=xlValues
            .PasteSpecial Paste:=xlFormats
        End With
    End Select
Next
Sheets("todas").Select
Cells.EntireColumn.AutoFit
End Sub

Espero que te funcione correctamente, como en las pruebas que hice.

Interesante eso de que me estés eternamente agradecida...

Pero tal vez no sea para tanto.

Un beso
Fer

.

¡Gracias! 

Funciona excelente. Tal vez lo de eternamente fue una exageración :) pero de todos modos te estoy súper agradecida.

.

Jajaja! Ya me parecía.
Me alegro de haberte ayudado.

Beso

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas