Leer el contenido de celdas especificas en un libro, varias hojas y luego consolidar en un libro
Quiero hacerle la pregunta al experto Calvuch. Hace por lo menos dos años me ayudaste con el siguiente problema, te copio la respuesta y desarrollo que me diste en aquel entonces:
"Hola
veamos un ejemplo
1 crea un libro nuevo y guardalo donde desees
en la hoja 1 en la celda A1 pones la ruta
C:\Users\Leonardo Garzón\Desktop\MAYO\
siempre el path ( ruta) debe terminar con \
bien, la columna A la utilizaremos para traer el nombre de los archivos xls
desde el path indicado en A1
para eso correrás el macro "leer_directorio"
luego una vez rescatados los nombres de los archivos correrás el macro
"importar_datos"
en ese orden ok.
ahora los macros
desde el editor de Vba ( ALT +F11) inserta un modulo y en el pegas esto:
Sub leer_directorio()
'recorrer directorio C:\Users\Leonardo Garzón\Desktop\MAYO\
Dim m As String
Dim i As Integer
Dim directorio As String
directorio = [A1] 'PASAMOS EL PATH INDICADO EN A1
If directorio = "" Then Exit Sub
ChDir "C:\"
m = Dir(directorio & "*.xls")
i = 3
[A2] = m
Do Until m = ""
m = Dir ' siguiente entrada del directorio
If m = "" Then Exit Do
Range("A" & i) = m ' CARGAMOS EL NOMBRE DEL LIBRO EN LA HOJA
i = (i + 1)
DoEvents
Loop
'Shell "WINWORD.EXE C:\pdf_core\" & Arc & "*.doc",
vbNormalFocus abrir un dco word
End Sub
Sub importar_datos()
'extrae la info de cada uno de los libros de la lista
'antes recuperada con sub leer_directorio
Dim fila As Integer
Dim n As Integer
Dim i As Integer
Dim libro As String
' contamos cuantos libros utilizaremos para extracción
n = Application.WorksheetFunction.CountA(Range("A2" &
":" & "A65536"))
If n = 0 Then Exit Sub
If [A1] = Empty Then Exit Sub
fila = 4
Application.ScreenUpdating = False
For i = 2 To n + 1
libro = Range("A" & i)
Range("m" & fila) = "=+'" & [A1]
& "[" & libro & "]Hoja1'!$d$18"
Range("n" & fila) = "=+'" & [A1] &
"[" & libro & "]Hoja1'!$d$19"
Range("b" & fila) = "=+'" & [A1] &
"[" & libro & "]Hoja1'!$d$20"
Range("j" & fila) = "=+'" & [A1] &
"[" & libro & "]Hoja1'!$d$21"
Range("k" & fila) = "=+'" & [A1] &
"[" & libro & "]Hoja1'!$d$22"
Range("c" & fila) = "=+'" & [A1] &
"[" & libro & "]Hoja1'!$d$23"
Range("e" & fila) = "=+'" & [A1] &
"[" & libro & "]Hoja1'!$j$18"
Range("f" & fila) = "=+'" & [A1] &
"[" & libro & "]Hoja1'!$j$19"
Range("g" & fila) = "=+'" & [A1] &
"[" & libro & "]Hoja1'!$j$20"
Range("h" & fila) = "=+'" & [A1] &
"[" & libro & "]Hoja1'!$j$21"
fila = (fila + 1)
DoEvents
Next
Application.ScreenUpdating = True
MsgBox "Terminado", vbInformation
End Sub
grabas el libro y ya, corre los macros.
nota:lo que hace este macro es insertar en las celdas que indicaste , una llamada a
los libros cerrado indicados en columna A de esta forma lo que tenemos son datos por referencia, luego solo debes tomar cada rango de datos, copiarlos y pegarlos solo como texto en el libro de resumen que tu decidas.
no quise copiar y pegar para eliminar referencias dentro del libro, pues no se
que tienes en las columnas interm edias D e I ( podrían ser funciones y si copio
todo el rango te las borraría).en fin. Eso todo parte por poner correctamente el path en la celdas A1 y obviamente tener archivos xls en la carpeta que leerás.
yo utilice el siguiente path a modo de ejemplo C:\prueba\
y lo corrí con 10 archivos y funciono bien el segundo macro desactiva el refresco en pantalla mientras se esta ejecutando,asi que una vez iniciado debes esperar a que se te notifique el termino mediante un mensaje en pantalla."
Esto me funcionaba para un libro de una sola hoja, y se iba poniendo perfectamente como me lo indicabas.
Ahora lo que necesito es parecido, leer de un libro en todas sus hojas (puede variar bastante) determinadas celdas dentro de la hoja . Y llevarlas a una hoja en especifico. Si quieres te puedo enviar una muestra de la hoja de donde necesito leer los datos.
Creo que con esta información me puedes entender. Muchas gracias por su atención. Saludos