Visual Basic - Loop de copiar y pegar informacion en un archivo nuevo para crear una base

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Loop de copiar y pegar informacion en un archivo nuevo para crear una base

Publicado por Pedro Canales (4 intervenciones) el 07/09/2023 00:21:28
Buenas tardes, les platico un poco de mi caso:
Tengo que hacer una macro que abra todos los archivos de una carpeta, tiene que hacer unas sumas, copiar unos datos y pegarlos en un el archivo donde tengo al macro, para hacer una base de datos en un archivo nuevo ese archivo nuevo la primera hoja quiero usarla para poner las instrucciones la segunda estara la base
Tengo mi codigo pero me aparece el error '9' subindice fuera del intervalo meaparece el error en la fila "Wb.Sheets("Datos Trabajador").Range("B1").Copy Wb.Sheets("Hoja2").Cells(FilaActual, 8) y para los consiguientes

Me pueden ayudar por fa?

Les muestro mi codigo:

Sub ProcesarArchivosEnCarpeta()
Dim Carpeta As String
Dim Archivo As String
Dim Wb As Workbook
Dim Ws As Worksheet
Dim FilaActual As Long

' Definir la carpeta donde se encuentran los archivos
Carpeta = "direccion de carpeta en cuestion" ' Cambia esto a la ruta de tu carpeta

' Inicializar la fila actual
FilaActual = 3

' Ciclo para recorrer los archivos en la carpeta
Archivo = Dir(Carpeta & "\*.xlsx") ' Cambia el tipo de archivo según tus necesidades

Do While Archivo <> ""
' Abrir el archivo
Set Wb = Workbooks.Open(Carpeta & "\" & Archivo)

' Copiar el valor de B1 a Hoja2, celda H
Wb.Sheets("Datos Trabajador").Range("B1").Copy Wb.Sheets("Hoja2").Cells(FilaActual, 8)

' Realizar las sumas y pegar los resultados en Hoja2
Wb.Sheets("Hoja2").Cells(FilaActual, 7).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("N3:T3", Wb.Sheets("Datos trabajador").Range("T3").End(xlDown)))
Wb.Sheets("Hoja2").Cells(FilaActual, 10).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("AG3:AJ3", Wb.Sheets("Datos trabajador").Range("AJ3").End(xlDown)))
Wb.Sheets("Hoja2").Cells(FilaActual, 11).Value = Wb.Sheets("Hoja2").Cells(FilaActual, 7).Value - Wb.Sheets("Hoja2").Cells(FilaActual, 10).Value
Wb.Sheets("Hoja2").Cells(FilaActual, 12).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("Y3", Wb.Sheets("Datos trabajador").Range("Y3").End(xlDown)))
Wb.Sheets("Hoja2").Cells(FilaActual, 13).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("AA3", Wb.Sheets("Datos trabajador").Range("AA3").End(xlDown)))
Wb.Sheets("Hoja2").Cells(FilaActual, 14).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("AB3", Wb.Sheets("Datos trabajador").Range("AB3").End(xlDown)))
Wb.Sheets("Hoja2").Cells(FilaActual, 15).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("AE3", Wb.Sheets("Datos trabajador").Range("AE3").End(xlDown)))
Wb.Sheets("Hoja2").Cells(FilaActual, 16).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("AF3", Wb.Sheets("Datos trabajador").Range("AF3").End(xlDown)))

' Cerrar el archivo sin guardar cambios
Wb.Close SaveChanges:=False

' Incrementar la fila actual
FilaActual = FilaActual + 1

' Obtener el siguiente archivo en la carpeta
Archivo = Dir
Loop
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Loop de copiar y pegar informacion en un archivo nuevo para crear una base

Publicado por Antoni Masana (558 intervenciones) el 07/09/2023 14:39:41
Veamos la macro la veo un poco liara.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Sub ProcesarArchivosEnCarpeta()
    Dim Carpeta As String
    Dim Archivo As String
    Dim Wb As Workbook
    Dim Ws As Worksheet
    Dim FilaActual As Long
 
    ' ---&--- Definir la carpeta donde se encuentran los archivos
    Carpeta = "direccion de carpeta en cuestion" ' ---&--- Cambia esto a la ruta de tu carpeta
 
    ' ---&--- Inicializar la fila actual
    FilaActual = 3
 
    ' ---&--- Ciclo para recorrer los archivos en la carpeta
    Archivo = Dir(Carpeta & "\*.xlsx") ' ---&--- Cambia el tipo de archivo según tus necesidades
 
    Do While Archivo <> ""
        ' ---&--- Abrir el archivo
        Set Wb = Workbooks.Open(Carpeta & "\" & Archivo)
 
        ' ---&--- Copiar el valor de B1 a Hoja2, celda H
        Wb.Sheets("Datos Trabajador").Range("B1").Copy Wb.Sheets("Hoja2").Cells(FilaActual, 8)
 
        ' ---&--- Realizar las sumas y pegar los resultados en Hoja2
        Wb.Sheets("Hoja2").Cells(FilaActual,  7).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("N3:T3"  , Wb.Sheets("Datos trabajador").Range("T3").End(xlDown)))
        Wb.Sheets("Hoja2").Cells(FilaActual, 10).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("AG3:AJ3", Wb.Sheets("Datos trabajador").Range("AJ3").End(xlDown)))
 
        Wb.Sheets("Hoja2").Cells(FilaActual, 11).Value = Wb.Sheets("Hoja2").Cells(FilaActual, 7).Value - Wb.Sheets("Hoja2").Cells(FilaActual, 10).Value
 
        Wb.Sheets("Hoja2").Cells(FilaActual, 12).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("Y3"     , Wb.Sheets("Datos trabajador").Range("Y3").End(xlDown)))
        Wb.Sheets("Hoja2").Cells(FilaActual, 13).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("AA3"    , Wb.Sheets("Datos trabajador").Range("AA3").End(xlDown)))
        Wb.Sheets("Hoja2").Cells(FilaActual, 14).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("AB3"    , Wb.Sheets("Datos trabajador").Range("AB3").End(xlDown)))
        Wb.Sheets("Hoja2").Cells(FilaActual, 15).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("AE3"    , Wb.Sheets("Datos trabajador").Range("AE3").End(xlDown)))
        Wb.Sheets("Hoja2").Cells(FilaActual, 16).Value = Application.WorksheetFunction.Sum(Wb.Sheets("Datos trabajador").Range("AF3"    , Wb.Sheets("Datos trabajador").Range("AF3").End(xlDown)))
 
        ' ---&--- Cerrar el archivo sin guardar cambios
        Wb.Close SaveChanges:=False
 
        ' ---&--- Incrementar la fila actual
        FilaActual = FilaActual + 1
 
        ' ---&--- Obtener el siguiente archivo en la carpeta
        Archivo = Dir
    Loop
End Sub

Dices que tiene que copiar los datos del archivo abierto por la macro al libro que contiene la macro.
Supongo que la Hoja2 es la hoja del libro que contiene la macro pero ¿Donde se lo dices a la macro?

Veras:

1
2
3
4
5
Wb.Sheets("Datos Trabajador").Range("B1").Copy Wb.Sheets("Hoja2").Cells(FilaActual, 8)
^                                              ^
| Origen: Libro abierto por la macro           | Destino: Libro abierto por la macro
 
Set Wb = Workbooks.Open(Carpeta & "\" & Archivo)

No veo en ninguna parte que te refieras al libro destino como el que contiene la macro, todo es a Wb.

Evidentemente si el libro que abre la macro no tiene la hoja Hoja2 da error.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar