Copiar datos de otros archivos xls a una hoja

11/12/2007 - 17:17 por juankbm.mdd | Informe spam
Tengo un problema con Excel, a ver si me podéis ayudar. Supongo que
necesito una macro sencilla en visual Basic para Excel 2003 que
permita realizar la siguiente acción pero ando muy perdido en el tema
de programación :
Suponemos una carpeta con n archivos xls y de un archivo denominada
"Z_Data" quiero extraer los datos de los archivos mencionas de las
celdas A12:B19 y C12, tener en cuenta que los archivos en la carpeta
todos son diferentes.
En el archivo "Z_Data" estos datos extraidos quiero que se ingresen
horizontalmente a partir de C5 hasta K5 en filas por cada copia que
haga.
Los Archivos dentro de la carpeta se llaman 1.Report, 2.Report,
3Report.

Sub RepasarCarpeta()


Dim strArchivoExcel As String
Dim strNombreCarpeta As String


strNombreCarpeta = "C:/MisArchivosExcel"


ChDir strNombreCarpeta
strArchivoExcel = Dir("*.xls")


Do While strArchivoExcel <> ""
MsgBox strArchivoExcel
strArchivoExcel = Dir
Loop

End Sub

Sub RepasarCarpeta2()

Dim wb As Workbook
Dim strArchivoExcel As String
Dim strNombreCarpeta As String


strNombreCarpeta = "C:/MisArchivosExcel"


ChDir strNombreCarpeta
strArchivoExcel = Dir("*.xls")


Do While strArchivoExcel <> ""
Set wb = Workbooks.Open(strNombreCarpeta & "\" & strArchivoExcel)
MsgBox wb.ActiveSheet.Cells(1, 1)
MsgBox wb.Application.Sheets("Hoja2").Cells(2, 1).Value
wb.Close False
Set wb = Nothing
strArchivoExcel = Dir
Loop

End Sub

Este codigo me lo paso un amigo pero solo las habre y las repasa pero
no llena mi tabla.


Espero haberme explicado.
Gracias por vuestra ayuda.

Preguntas similare

Leer las respuestas

#1 Ivan
11/12/2007 - 22:32 | Informe spam
On 11 dic, 17:17, wrote:
Tengo un problema con Excel, a ver si me podéis ayudar. Supongo que
necesito una macro sencilla en visual Basic para Excel 2003 que
permita realizar la siguiente acción pero ando muy perdido en el tema
de programación :
Suponemos una carpeta con n archivos xls y de un archivo denominada
"Z_Data" quiero extraer los datos de los archivos mencionas de las
celdas A12:B19 y C12, tener en cuenta que los archivos en la carpeta
todos son diferentes.
En el archivo "Z_Data" estos datos extraidos quiero que se ingresen
horizontalmente a partir de C5 hasta K5 en filas por cada copia que
haga.
Los Archivos dentro de la carpeta se llaman 1.Report, 2.Report,
3Report.

Sub RepasarCarpeta()

Dim strArchivoExcel As String
Dim strNombreCarpeta As String

strNombreCarpeta = "C:/MisArchivosExcel"

ChDir strNombreCarpeta
strArchivoExcel = Dir("*.xls")

Do While strArchivoExcel <> ""
MsgBox strArchivoExcel
strArchivoExcel = Dir
Loop

End Sub

Sub RepasarCarpeta2()

Dim wb As Workbook
Dim strArchivoExcel As String
Dim strNombreCarpeta As String

strNombreCarpeta = "C:/MisArchivosExcel"

ChDir strNombreCarpeta
strArchivoExcel = Dir("*.xls")

Do While strArchivoExcel <> ""
Set wb = Workbooks.Open(strNombreCarpeta & "\" & strArchivoExcel)
MsgBox wb.ActiveSheet.Cells(1, 1)
MsgBox wb.Application.Sheets("Hoja2").Cells(2, 1).Value
wb.Close False
Set wb = Nothing
strArchivoExcel = Dir
Loop

End Sub

Este codigo me lo paso un amigo pero solo las habre y las repasa pero
no llena mi tabla.

Espero haberme explicado.
Gracias por vuestra ayuda.



hola,

aunque el rango de origen no tiene mucho que ver con el de destino, si
quieres prueba esta macro (en un libro nuevo y si quieres vacio de
datos. Luego, si es +/- lo que buscas se puede adaptar a tus
condiciones reales).

OJO=> te he tomado la palabra en cuanto al nombre de los archivos =>
'n.Report' => un nº + un punto +" Report"

copia/pega en un modulo normal de ESE nuevo libro (asegurate de que el
modulo lo insertas en ese nuevo libro) y

a) cambia en la variable TuRuta por la ruta completa a la carpeta
contenedora, incluyendo la barra invertida final

b) cambia el valor de la variable numC por el nro de tu archivo
'n.Report' mas alto como poco

Sub CopiarParte()
Dim n As Integer, nroC As Integer, uF As Integer, TuRuta As String
nroC = 10 'OJO= aqui debes cambiar el 15 por el nº de archivos
TuRuta = "C:\Documents and Settings\Ivan\Mis documentos\Report\"
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("Hoja1")
For n = 1 To nroC
uF = .[c65536].End(xlUp).Offset(1).Row
On Error Resume Next
Workbooks.Open TuRuta & n & ".Report"
If Err.Number = 0 Then
.Range("c" & uF & ":j" & uF + 1) = _
Application.Transpose(Range("a12:b19"))
.Range("k" & uF) = Range("c12")
ActiveWorkbook.Close False
End If
On Error GoTo 0
Next
End With
End Sub

mira a ver si te refieres a algo asi y si quieres comentas

un saludo
Ivan
Respuesta Responder a este mensaje
#2 Ivan
11/12/2007 - 22:44 | Informe spam
hola de nuevo,

solamente un comentario que se me ha pasado=> puesto a suponer,
tambien he supuesto que los libros de los que quieres extraer la
informacion tienen una sola hoja, o que al menos la hoja activa en el
momento del ultimo cierre era la que contiene los dat6os a extrer. Si
no fuera asi se puede adaptar sin problemas,

pero 1ª prueba a veer si van por aqui los tiros o me he equivocado en
mis 'especulaciones'

y una (al menos) errata doble => en las explicaciones me referia a la
variable nroC y ya dentro del codigo, en el comentario que va justo
detras de la asignacion del valor a esta variable =>

nroC = 10 'OJO= aqui debes cambiar el 15 por el nº de archivos

obviamente queria decir que debias cambiar el 10 y no el 15

disculpa las erratas (te lo aclaro por si pudiera liarte un poco)

un saludo
Ivan
Respuesta Responder a este mensaje
#3 juankbm.mdd
12/12/2007 - 03:46 | Informe spam
On 11 dic, 16:44, Ivan wrote:
hola de nuevo,

solamente un comentario que se me ha pasado=> puesto a suponer,
tambien he supuesto que los libros de los que quieres extraer la
informacion tienen una sola hoja, o que al menos la hoja activa en el
momento del ultimo cierre era la que contiene los dat6os a extrer. Si
no fuera asi se puede adaptar sin problemas,

pero 1ª prueba a veer si van por aqui los tiros o me he equivocado en
mis 'especulaciones'

y una (al menos) errata doble => en las explicaciones me referia a la
variable nroC y ya dentro del codigo, en el comentario que va justo
detras de la asignacion del valor a esta variable =>

nroC = 10 'OJO= aqui debes cambiar el 15 por el nº de archivos

obviamente queria decir que debias cambiar el 10 y no el 15

disculpa las erratas (te lo aclaro por si pudiera liarte un poco)

un saludo
Ivan



Ivan
Gracias por responder a mi inquietud pero la verdad no entendi mucho,
pero a ver te comento hice el cambio del nroC por el 15 pero la
macro no me ejcuta nada, no copia nada al archivo Report de los demas
archivos.
A ver si me das otra luz.
Desde ya gracias
JC
Respuesta Responder a este mensaje
#4 Ivan
12/12/2007 - 18:42 | Informe spam
hola Juan,

>>la verdad no entendi mucho,
pero a ver te comento hice el cambio del nroC por el 15 pero la
macro no me ejcuta nada, no copia nada al archivo Report de los demas
archivos.
A ver si me das otra luz.



si quieres prueba a añadir la extension aqui=> Workbooks.Open TuRuta & n & ".Report"
es decir pon => Workbooks.Open TuRuta & n & ".Report.xls"
o la extension de tu archivo

por otro lado te comento:

, dejando a un lado mis suposiciones, te comento lo que yo creo entender de tu mensaje original:

a) tienes una carpeta que contiene n archivos de excel (en el codigo la llamas "C:/MisArchivosExcel" <por cierto, si no
me equivoco la barra que va detras de 'C:' deberia ser invertida. )

e mi ejemplo, este nombre, o el de la carpeta real se lo tienes que asignar a la variable TuRuta añadiendole otra barra
invertida al final. Deberia quedar asi=>

TuRuta = "C:\MisArchivosExcel\"


b) los archivos contenidos en esta carpeta de los que quiers copiar los rangos, se llaman todos de esta manera=>

"n.Report"

donde 'n' es un numero que va seguido de un punto y la palabra Report, es decir, segun dices los archivos/libros que
quieres manipular se llaman

"1.Report", "2.Report", "3.Report", asi hasta "n.Report"

c) quiers copiar los rangos 'A12:B19' y 'C12' de cada uno de estos archivos (¿de que hoja, por cierto?) y pegarlos en
una hoja(¿Cual?) del archivo llamado "Z_Data"

d) el rango en que quieres pegar estos datos abarca de la columna C a la K y a partir de la fila 5 en adelante, siempre
en la 1ª libre

y ahora mi especulacion:

la 1ª consideracion importante es que el rango de destino que expones (C5:K5) no se corresponde en tamaño con el de
origen, con lo que he supuesto que las dos columnas de origen (A y B) las quieres transponer y pegarlas en Cn:Jn+1 que
seria un rango coincidente con el de origen y el conttenido C12 iria en Kn. En ambos casos n seria la primera fila vacia
de la columna C de destino


bueno si lo dicho es mas o menos asi y pones correctamente la ruta a la carpeta conrtenedora, terminandola con una barr
invertida => "C:\Ruta a tu carpeta\", modifica lo de la extension y los nombres de las carpetas son como te indico (sino
modificalo) deberia funcionar

en cuanto a nroC debes poner un nº igual o mayor que ekl de tu carpeta mas 'alta' pej 37.Report seri poner =>

nroC = 37

bueno, mira a ver si hay algo de esto por ahi

un saludo
Ivan
Respuesta Responder a este mensaje
#5 juankbm.mdd
14/12/2007 - 04:32 | Informe spam
On 12 dic, 12:42, "Ivan" wrote:
hola Juan,

> >>la verdad no entendi mucho,
> pero a ver te comento hice el cambio del nroC por el 15 pero la
> macro no me ejcuta nada, no copia nada al archivo Report de los demas
> archivos.
> A ver si me das otra luz.

si quieres prueba a añadir la extension aqui=> Workbooks.Open TuRuta & n & ".Report"
es decir pon => Workbooks.Open TuRuta & n & ".Report.xls"
o la extension de tu archivo

por otro lado te comento:

, dejando a un lado mis suposiciones, te comento lo que yo creo entender de tu mensaje original:

a) tienes una carpeta que contiene n archivos de excel (en el codigo la llamas "C:/MisArchivosExcel" <por cierto, si no
me equivoco la barra que va detras de 'C:' deberia ser invertida. )

e mi ejemplo, este nombre, o el de la carpeta real se lo tienes que asignar a la variable TuRuta añadiendole otra barra
invertida al final. Deberia quedar asi=>

TuRuta = "C:\MisArchivosExcel\"

b) los archivos contenidos en esta carpeta de los que quiers copiar los rangos, se llaman todos de esta manera=>

"n.Report"

donde 'n' es un numero que va seguido de un punto y la palabra Report, es decir, segun dices los archivos/libros que
quieres manipular se llaman

"1.Report", "2.Report", "3.Report", asi hasta "n.Report"

c) quiers copiar los rangos 'A12:B19' y 'C12' de cada uno de estos archivos (¿de que hoja, por cierto?) y pegarlos en
una hoja(¿Cual?) del archivo llamado "Z_Data"

d) el rango en que quieres pegar estos datos abarca de la columna C a la K y a partir de la fila 5 en adelante, siempre
en la 1ª libre

y ahora mi especulacion:

la 1ª consideracion importante es que el rango de destino que expones (C5:K5) no se corresponde en tamaño con el de
origen, con lo que he supuesto que las dos columnas de origen (A y B) las quieres transponer y pegarlas en Cn:Jn+1 que
seria un rango coincidente con el de origen y el conttenido C12 iria en Kn. En ambos casos n seria la primera fila vacia
de la columna C de destino

bueno si lo dicho es mas o menos asi y pones correctamente la ruta a la carpeta conrtenedora, terminandola con una barr
invertida => "C:\Ruta a tu carpeta\", modifica lo de la extension y los nombres de las carpetas son como te indico (sino
modificalo) deberia funcionar

en cuanto a nroC debes poner un nº igual o mayor que ekl de tu carpeta mas 'alta' pej 37.Report seri poner =>

nroC = 37

bueno, mira a ver si hay algo de esto por ahi

un saludo
Ivan



Holas de nuevo, primero agradecerte por el interes y por el tiempo que
le pones pero no me fiociona corre todo pero no extrae nada en mi hoja
donde quiero los datos, a ver no te molestes si digo que lo que tu me
as mandado funciona solo sin adicionar a lo que yo te mande.
Saludos
Juank
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida