Como hacer una macro para importar datos desde otro libros

Tengo una planilla y lo que deso hacer es importar datos desde otro libro, y cuando importe el ultimo registro siga importando datos del libro siguiente... Cabe mencionar que los libros de donde deseo importar son iguales solo camabian los meses.. Ejemplo: control enero, control febrero, control marzo.. Etc

2 respuestas

Respuesta
1

Para desarrollar una macro faltan muchos detalles. Por favor aclara los siguientes puntos:

- ¿Se conoce de antemano en qué carpeta se encuentran los libros a capturar? ¿O habrá que habilitar el explorador para buscarlos? Se asume que todos los libros mensuales estarán en la misma carpeta.

- ¿Los libros tienen 1 sola hoja? Si hay más de 1 hoja indica el nombre de la que debe capturarse.

- ¿Se captura 1 rango o la hoja completa?

- Luego del último registro capturado.... ¿Se continúa en la misma hoja o cada libro va en hoja aparte?

Sdos y espero tus aclaraciones. No valores aún.

Gracias elsa por tu pronta respuesta, si lo capturado va en una sola hoja termina la importación de un libro y empieza con el otro a continuación, los libros de donde deseo la importación tienen 3 hoja, la que deseo importar lleva el nombre del mes del libro ej: nombre del libro "CONTROL ENERO 2018", nombre hoja "ENERO" y así con todas.. se captura un rango que ya esta definido en este caso "BD_ENERO".

La macro adjunta tiene aclaraciones en cada instrucción para que puedas ajustar algún que otro detalle a tu modelo, por ejemplo: extensión de los libros mensuales, o cuál es la columna que siempre tendrá datos hasta el final del rango y esa se utiliza para indicar cuál es la próxima fila del pegado que ahora asumí como A.

Sub capturaLibros()
'x Elsamatilde
Application.ScreenUpdating = False
'libro y hoja donde se va a capturar. Primer fila = 2
Set w1 = ThisWorkbook
Set h1 = w1.Sheets(1)
ini = 2
'ruta de la carpeta con los libros mensuales
ruta = w1.Path & "\"
ChDir ruta
archi = Dir(ruta & "*.xlsm*")
'se abre cada uno de los libros de la carpeta
Do While archi <> ""
    If archi <> w1.Name Then
        On Error Resume Next
        Set w2 = Workbooks.Open(ruta & archi)
        'si hubo error de apertura continúa con el sgte libro
        If Err.Number > 0 Then GoTo otroLibro
        'se busca el nombre de la hoja en el nombre del libro
        espa = InStr(9, w2.Name, " ")
        ho = Mid(w2.Name, 9, espa - 9)
        Set h2 = w2.Sheets(ho)
        'se copia el rango "BD_" & ho
        h2.Range("BD_" & ho).Copy Destination:=h1.Range("A" & ini)
        'se cierra el libro del mes sin guardar
        w2.Close False
    End If
    'se calcula fila destino desde col A
    ini = h1.Range("A" & Rows.Count).End(xlUp).Row + 1
siguiendo:
    archi = Dir()
Loop
MsgBox "Fin de la captura"
Exit Sub
otroLibro:
MsgBox "Error de apertura en libro 'archi'. Se continua con el resto."
GoTo siguiendo:
End Sub

Como no indicas ruta de los libros mensuales asumí que estarán todos en la misma carpeta junto con el libro activo.

Sino debes ajustar la línea ruta = w1.Path & "\" agregando una subcarpeta, por ej:

ruta = w1.Path & "\MENSUALES\"

Hay mucha tarea realizada aquí ... espero no olvides valorar esta respuesta (opciones Excelente o buena).

Sdos!

¿Ya probaste la macro que te desarrollé?

no aun no...apenas lo haga le comento como quedo

Bien. Y si resuelve lo que solicitaste no olvides mejorar la valoración ... que la respuesta se lo merece.

Sdos!

Respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas