Eliminar primera fila de hoja copiada

Tengo este código que me permite cargar un libro nuevo a una hoja donde cargo toda la informacion, el detalles es que cada vez que cargo un nuevo libro me copia todo el encabezado de ella, lo cual ya lo tengo en la hoja principal, el objetivo es que no omita la primera fila para que no se vuelva a repetir en el excel principal, desde ya gracias:

Sub Open_Files()
Dim Hoja As Object
Dim Quest As String
Quest = MsgBox("Desea copiar una nueva hoja?", vbYesNo + vbInformation)
If Quest = vbYes Then
Application.ScreenUpdating = False
Dim X As Variant
X = Application.GetOpenFilename _
("Excel Files (*.xlsx), *.xlsx", 2, "Abrir archivos", , True)
If IsArray(X) Then
A = ActiveWorkbook.Name
'*/********************
For y = LBound(X) To UBound(X)
Application.StatusBar = "Importando Archivos: " & X(y)
Workbooks.Open X(y)
B = ActiveWorkbook.Name
For Each Hoja In ActiveWorkbook.Sheets
Hoja.Copy after:=Workbooks(A).Sheets(Workbooks(A).Sheets.Count)
Next
Workbooks(B).Close False
Next
Application.StatusBar = "Listo"
Call Unir_Hojas
Columns("A:AO").EntireColumn.AutoFit

End If
Application.ScreenUpdating = False
ElseIf Quest = vbNo Then
End If
MsgBox "Se copió la hoja completa", vbInformation
End Sub
Sub Unir_Hojas()
Dim Sig As Byte, Eliminar As Boolean
For Sig = 2 To Worksheets.Count
Worksheets(Sig).UsedRange.Copy _
Worksheets(1).Range("A1048576").End(xlUp).Offset(1)
Next
Application.DisplayAlerts = False
For Sig = 2 To Worksheets.Count
Worksheets(2).Delete
Next
Application.DisplayAlerts = True
End Sub

1 Respuesta

Respuesta
1

.13/09/16

Buenas, Juan

Mi propuesta para resolver eso es reemplazar la línea:

Worksheets(Sig).UsedRange.Copy _

por lo siguiente

With Worksheets(Sig).UsedRange
RangoCop = Range(Cells(.Row + 1, .Column), Cells(Worksheets(Sig).Range("A1048576").End(xlUp).Row, .Columns.Count)).Address
End With
Worksheets(Sig). Range(RangoCop). Copy_

Como verás, la variable RangoCop reescribe la dirección a copiar desde la segunda fila del rango usado.

Desde luego, hay diversas variantes para hacerlo, pero esta funciona OK.

Espero haberte ayudado.

Un abrazo

Fernando

.

¡Gracias! no me funciona pero igual gracias.

.

Hola, Juan

Si me comentaras qué rango es el que quieres copiar, podré revisar el código para ver por qué no te funciona.

Me interesa que sí lo haga, así que -si quieres- coméntame que es lo que hace o no.

Saludos

Fernando

.

A ver te comento:

lo que pasa es que con un botón abro un opendialog en donde cargo un libro excel que contiene X información, este código me permite copiar tooooooooooda información de una hoja especifica, el detalle es que se trata de un padrón el cual, por ende, tiene las columnas predeterminadas el caso es que cada vez que cargo una hoja nueva en me copia todas las filas incluyendo el encabezado, que es la primera fila, y es la que justamente no quiero que se copie porque ya la tengo en la hoja donde se va cargar. espero haber sido claro, el otro punto es que cuando cambio al codigo que me sugeriste, me sale este errror:

el codigo lo declaro asi

Sub Unir_Hojas()
Dim Sig As Byte, Eliminar As Boolean
For Sig = 2 To Worksheets.Count
'Este es el codigo anterior
'Worksheets(Sig).UsedRange.Copy _
'Worksheets(1).Range("A1048576").End(xlUp).Offset(1)

Este es el codigo que me sugieres
With Worksheets(Sig).UsedRange
RangoCop = Range(Cells(.Row + 1, .Column), Cells(Worksheets(Sig).Range("A1048576").End(xlUp).Row, .Columns.Count)).Address
End With
Worksheets(Sig).Range(RangoCop).Copy_ 'AQUI ME MARCA EL ERROR
Next
Application.DisplayAlerts = False
For Sig = 2 To Worksheets.Count
Worksheets(2).Delete
Next
Application.DisplayAlerts = True
End Sub

GRACIAS!!

.

Buenas, Juan

Revisé de nuevo el código y noté que use la instrucción UsedRange, que puede servir en algunos casos pero confundir en otros, y la reemplacé por CurrentRegion.

Lo único que haría falta es que le indiques una celda que usualmente forme parte de los rangos a copiar.

Entonces, la sentencia sería como sigue:

CeldaIn = "B3" ' indica una celda cualquiera que vaya a estar siempre en el rango a copiar.  
With Worksheets(Sig).Range(CeldaIn).CurrentRegion
    RangoCop = Range(Cells(.Row + 1, .Column), Cells(.Rows.Count, .Columns.Count)).Address
End With

Hasta donde probé reescribe el mismo rango, sin la primera fila.

Fijate si esto resuelve tu problema

Abrazo

Fernando

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas