problema importando datos..

25/06/2006 - 06:58 por Manex | Informe spam
Desde una pagina de Excel importo algunos datos de bastantes otros
libros del tipo 2134.xls, 2135.xls (aumentan de a 5 por día), son
correlativos pero no se generan como archivo en forma consecutiva.

En mi hoja resumen de Excel la primera columna tiene los nombres de los
libros (2135, 2136, etc) y la segunda columna debería tener el dato de
una celda en común para todos los libros.

Lo que intento es que según el valor ingresado en esta primera columna
se rescaten valores en la segunda automáticamente, de este modo si se
crean nuevos libros, automáticamente se obtendrán datos al abrir mi
planilla de resumen. Ejemplo:

a b

1 2140 =+'C:\datos\[2140.xls]OT'!$I$9 ==> entrega un
valor

2 2141 =+'C:\datos\[2141.xls]OT'!$I$9 ==> entrega
un valor

3 2143 =+'C:\datos \[2143.xls]OT'!$I$9 ==> entrega
un valor



Lo intenté juntando textos y celdas con "&" y luego aplicar
"=n(f)" o con la formula "=valor()". Ambas funcionan cuando
tengo los libros abiertos, pero en mi caso es imposible abrir todos
libros..

Que se puede hacer.. por ahora las modifico a mano, pero la idea es
que no se dependa de mi.

gracias

Preguntas similare

Leer las respuestas

#1 javier
25/06/2006 - 17:51 | Informe spam
Hola Manex:

Siguiendo con el ejemplo que planteas yo puse en A1

C:\Documents and Settings\juan\[2140.xls]Hoja1'!$A$5

y en B1 introduje ésta fórmula:
=INDIRECTO(A1)

Así me devuelve el resultado correcto sólo cuando el libro 2140.xls está
abierto. Si le tengo cerrado me dá #¡REF!

Creo que no te servirá. Si funcionase del todo bien sería muy facil
aplicarlo a tu caso.
No sé por qué no funciona del todo. Quizás alguien el foro sabe resolverlo.

Es decir yo trataba de crear un vínculo.





Otra posibilidad quizás sería crear manualmente una larga lista como ésta
(no sería dificil ayudandote de algua fórmula).

çC:\Documents and Settings\juan\[2140.xls]Hoja1'!$A$5
çC:\Documents and Settings\juan\[2141.xls]Hoja1'!$A$5
çC:\Documents and Settings\juan\[2142.xls]Hoja1'!$A$5
çC:\Documents and Settings\juan\[2143.xls]Hoja1'!$A$5


Después seleccionas dicho rango y Edicción / Reemplazar / ... reemplazas
éste signo: "ç" por el signo "="

Así se te convertiría en un vinculo.


saludos
javier




"Manex" escribió:

Desde una pagina de Excel importo algunos datos de bastantes otros
libros del tipo 2134.xls, 2135.xls (aumentan de a 5 por día), son
correlativos pero no se generan como archivo en forma consecutiva.

En mi hoja resumen de Excel la primera columna tiene los nombres de los
libros (2135, 2136, etc) y la segunda columna debería tener el dato de
una celda en común para todos los libros.

Lo que intento es que según el valor ingresado en esta primera columna
se rescaten valores en la segunda automáticamente, de este modo si se
crean nuevos libros, automáticamente se obtendrán datos al abrir mi
planilla de resumen. Ejemplo:

a b

1 2140 =+'C:\datos\[2140.xls]OT'!$I$9 ==> entrega un
valor

2 2141 =+'C:\datos\[2141.xls]OT'!$I$9 ==> entrega
un valor

3 2143 =+'C:\datos \[2143.xls]OT'!$I$9 ==> entrega
un valor



Lo intenté juntando textos y celdas con "&" y luego aplicar
"=n(f)" o con la formula "=valor()". Ambas funcionan cuando
tengo los libros abiertos, pero en mi caso es imposible abrir todos
libros..

Que se puede hacer.. por ahora las modifico a mano, pero la idea es
que no se dependa de mi.

gracias


Respuesta Responder a este mensaje
#2 Héctor Miguel
25/06/2006 - 22:50 | Informe spam
hola, Manex !

1) considerando que el unico detalle es que las formulas que hacen referencias 'indirectas' a rangos en otros libros...
NO 'funcionan' cuando los datos 'de origen' se encuentran en un archivo CERRADO :-((

2) asumiendo que las 'constantes' para tu 'formulacion' son la ruta, la hoja y la celda [quedando 'variable' el libro]...
y que la variable con el nombre del libro la escribes en la columna 'A' [suponiendo que a partir de la fila 2]...
prueba copiando las siguientes lineas...
en el modulo de codigo de 'esa' hoja ==Private Const Ruta As String = "c:\datos\"
Private Const Hoja As String = "ot"
Private Const Celda As String = "i9"
Dim txtFormula As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Row < 2 Or Target.Column > 1 Then Exit Sub
If Target = "" Then Target.Offset(, 1).ClearContents: Exit Sub
If Dir(Ruta & Target & ".xls") <> "" Then
txtFormula = "'" & Ruta & "[" & Target & ".xls]" & Hoja & "'!" & _
Range(Celda).Address(1, 1, xlR1C1)
With Target.Offset(, 1)
.Formula = "=" & ExecuteExcel4Macro(txtFormula)
.Value = .Value
End With
Else: Target.Offset(, 1).ClearContents
End If
End Sub

3) existen bastantes alternativas mas, pero [considero que] la anterior es la que te saldria 'mas barata' :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
... importo algunos datos de... otros libros del tipo 2134.xls, 2135.xls ...
En mi hoja resumen... la primera columna tiene los nombres de los libros (2135, 2136, etc)
y la segunda columna debería tener el dato de una celda en comun para todos los libros.
Lo que intento es que segun el valor ingresado en esta primera columna se rescaten valores en la segunda automaticamente
de este modo si se crean nuevos libros, automaticamente se obtendran datos al abrir mi planilla de resumen. Ejemplo:
a b
1 2140 =+'C:\datos\[2140.xls]OT'!$I$9 ==> entrega un valor
2 2141 =+'C:\datos\[2141.xls]OT'!$I$9 ==> entrega un valor
3 2143 =+'C:\datos \[2143.xls]OT'!$I$9 ==> entrega un valor
Lo intente juntando textos y celdas con "&" y luego aplicar "=n(f)" o con la formula "=valor()".
Ambas funcionan cuando tengo los libros abiertos, pero en mi caso es imposible abrir todos libros.
Que se puede hacer.. por ahora las modifico a mano, pero la idea es que no se dependa de mi...
Respuesta Responder a este mensaje
#3 javier
25/06/2006 - 23:49 | Informe spam
Hola, Hector Miguel:
Lo he probado y funciona bien.
Pero ya puestos, ¿no sería posible que quedase introducida una fórmula como
ésta (un vinculo):

='c:\datos\[2140.xls]ot'!i9

Así, si cambian los datos de origen se podrían actualiar los datos
automaticamente.

Saludos
javier.



"Héctor Miguel" escribió:

hola, Manex !

1) considerando que el unico detalle es que las formulas que hacen referencias 'indirectas' a rangos en otros libros...
NO 'funcionan' cuando los datos 'de origen' se encuentran en un archivo CERRADO :-((

2) asumiendo que las 'constantes' para tu 'formulacion' son la ruta, la hoja y la celda [quedando 'variable' el libro]...
y que la variable con el nombre del libro la escribes en la columna 'A' [suponiendo que a partir de la fila 2]...
prueba copiando las siguientes lineas...
en el modulo de codigo de 'esa' hoja ==> Private Const Ruta As String = "c:\datos\"
Private Const Hoja As String = "ot"
Private Const Celda As String = "i9"
Dim txtFormula As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Row < 2 Or Target.Column > 1 Then Exit Sub
If Target = "" Then Target.Offset(, 1).ClearContents: Exit Sub
If Dir(Ruta & Target & ".xls") <> "" Then
txtFormula = "'" & Ruta & "[" & Target & ".xls]" & Hoja & "'!" & _
Range(Celda).Address(1, 1, xlR1C1)
With Target.Offset(, 1)
.Formula = "=" & ExecuteExcel4Macro(txtFormula)
.Value = .Value
End With
Else: Target.Offset(, 1).ClearContents
End If
End Sub

3) existen bastantes alternativas mas, pero [considero que] la anterior es la que te saldria 'mas barata' :))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
> ... importo algunos datos de... otros libros del tipo 2134.xls, 2135.xls ...
> En mi hoja resumen... la primera columna tiene los nombres de los libros (2135, 2136, etc)
> y la segunda columna debería tener el dato de una celda en comun para todos los libros.
> Lo que intento es que segun el valor ingresado en esta primera columna se rescaten valores en la segunda automaticamente
> de este modo si se crean nuevos libros, automaticamente se obtendran datos al abrir mi planilla de resumen. Ejemplo:
> a b
> 1 2140 =+'C:\datos\[2140.xls]OT'!$I$9 ==> entrega un valor
> 2 2141 =+'C:\datos\[2141.xls]OT'!$I$9 ==> entrega un valor
> 3 2143 =+'C:\datos \[2143.xls]OT'!$I$9 ==> entrega un valor
> Lo intente juntando textos y celdas con "&" y luego aplicar "=n(f)" o con la formula "=valor()".
> Ambas funcionan cuando tengo los libros abiertos, pero en mi caso es imposible abrir todos libros.
> Que se puede hacer.. por ahora las modifico a mano, pero la idea es que no se dependa de mi...



Respuesta Responder a este mensaje
#4 Héctor Miguel
26/06/2006 - 00:03 | Informe spam
hola, javier !

... ya puestos, no seria posible que quedase introducida una formula como esta (un vinculo):
='c:\datos\[2140.xls]ot'!i9
Asi, si cambian los datos de origen se podrian actualizar los datos automaticamente...



solo modifica en la propuesta la parte del codigo que dice...
With Target.Offset(, 1)
.Formula = "=" & ExecuteExcel4Macro(txtFormula)
.Value = .Value
End With

por esta:
Target.Offset(, 1).Formula = "=" & txtFormula

solo no 'pierdas de vista' que OP menciona... '... importo algunos datos de BASTANTES otros libros ..'
con lo que el numero de [posibles] vinculos en un solo libro pudiera llegar a 'excederse' -?-

saludos,
hector.
Respuesta Responder a este mensaje
#5 javier
26/06/2006 - 00:31 | Informe spam
Sí. También funciona.
Si hubiese muchos vínculos podría hacerse muy lento o podría superar la
capacidad del libro.

Gracias Hector.
Saludos.
javier

"Héctor Miguel" escribió:

hola, javier !

> ... ya puestos, no seria posible que quedase introducida una formula como esta (un vinculo):
> ='c:\datos\[2140.xls]ot'!i9
> Asi, si cambian los datos de origen se podrian actualizar los datos automaticamente...

solo modifica en la propuesta la parte del codigo que dice...
With Target.Offset(, 1)
.Formula = "=" & ExecuteExcel4Macro(txtFormula)
.Value = .Value
End With

por esta:
Target.Offset(, 1).Formula = "=" & txtFormula

solo no 'pierdas de vista' que OP menciona... '... importo algunos datos de BASTANTES otros libros ..'
con lo que el numero de [posibles] vinculos en un solo libro pudiera llegar a 'excederse' -?-

saludos,
hector.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida