Macro para abrir más de 300 libros de excel y pegar una fila en libro nuevo

Tengo esta macro y me mando error en esta línea de referencia no valida o sin calificar me ayudan please.

ThisWorkbook.Sheets("layout1").Range(.Cells(r, 1), .Cells(r, 132)) = b.Sheets(1).Range("A4:EB4")

Sub Open_Files()
Dim Hoja As Object
Dim r As Long
Dim b As Workbook
    Application.ScreenUpdating = False
       'Definir la variable como tipo Variante
       Dim X As Variant
       'Abrir cuadro de dialogo
       r = ThisWorkbook.Sheets("layout1").Cells(Rows.Count, 1).End(xlUp).Row
       X = Application.GetOpenFilename _
           ("Excel Files (*.xlsx), *.xlsx", 2, "Abrir archivos", , True)
        'Validar si se seleccionaron archivos
        If IsArray(X) Then ' Si se seleccionan
          'Crea Libro nuevo
        '*/********************
       For y = LBound(X) To UBound(X)
       Application.StatusBar = "Importando Archivos: " & X(y)
         Workbooks.Open X(y)
         b = ActiveWorkbook
         ThisWorkbook.Sheets("layout1").Range(.Cells(r, 1), .Cells(r, 132)) = b.Sheets(1).Range("A4:EB4")
        b.Close False
       Next
       Application.StatusBar = "Listo"
    End If
    Application.ScreenUpdating = False
   End Sub
End Sub

Respuesta
2

Tiene varios detalles la macro, le hice cambios para que funcione, pero no sé si es lo que necesitas, prueba y me comentas.

Sub Open_Files()
    Application.ScreenUpdating = False
    r = ThisWorkbook.Sheets("layout1").Cells(Rows.Count, 1).End(xlUp).Row + 1
    'Abrir cuadro de dialogo
    X = Application.GetOpenFilename _
        ("Excel Files (*.xlsx), *.xlsx", 2, "Abrir archivos", , True)
    'Validar si se seleccionaron archivos
    If IsArray(X) Then ' Si se seleccionan
        For y = LBound(X) To UBound(X)
            Application.StatusBar = "Importando Archivos: " & X(y)
            Workbooks.Open X(y)
            Set b = ActiveWorkbook
            With ThisWorkbook.Sheets("layout1")
                .Range(.Cells(r, 1), .Cells(r, 132)).Value = b.Sheets(1).Range("A4:EB4").Value
            End With
            b.Close False
        Next
        Application.StatusBar = "Listo"
    End If
    Application.ScreenUpdating = False
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Hola muchas gracias, deja te comento tengo mas de 100 libros de excel cada libro tiene 2 hojas una se llama ALTA GENERAL  y la otra se llama LayOut1 de la hoja de LayOut1 necesito que se copia la 4ta fila de todos los libros y la pegue en un libro nuevo espero me ayas entendido.

gracias mil

Bueno la macro hace parte de eso.

En el libro con la macro debes tener una hoja llamada "layout1", en esa hoja se van a copiar la fila 4 de cada uno de los libros

Ejecuta la macro y selecciona los 100 libros.

Si eso no es lo que necesitas, tengo que hacer una nueva macro, mejor me explicas paso a paso qué requieres y te creo una macro nueva. Valora esta respuesta y crea una nuevo con la explicación.

1 respuesta más de otro experto

Respuesta
1

Prueba esta macro y comentas

Sub copiar_archivos()
Set HA = ActiveWorkbook.Worksheets("layout")
Set datos = HA.Range("A4").CurrentRegion
 X = Application.GetOpenFilename _
           ("Excel Files (*.xlsx), *.xlsx", 2, "Abrir archivos", , True)
        If IsArray(X) Then
        For i = 1 To UBound(X)
         Application.StatusBar = "Importando Archivos: " & X(i)
            filas = HA.Range("A4").CurrentRegion.Rows.Count
            COLUMNAS = HA.Range("A4").CurrentRegion.Columns.Count
            Workbooks.Open X(i)
            Set c = ActiveWorkbook:  Set b = Range("a4").CurrentRegion
            If filas = 1 And COLUMNAS = 1 Then
                datos.Resize(1, 132).Value = b.Value
            Else
                If filas = 1 Then
                    datos.Rows(2).Resize(1, 132).Value = b.Value
                Else
                    datos.Rows(filas + 1).Resize(1, 132).Value = b.Value
                End If
            End If
            filas = datos.CurrentRegion.Rows.Count:   c.Close False
        Next i
         Application.StatusBar = "Listo"
        End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas