Indirecto y Tablas Dinamicas

02/12/2004 - 00:11 por Carlos Durán Urenda | Informe spam
Hola al grupo

En alguna ocación hice una tabla dinamica con un origen de datos de Excel
con rango variante, es decir, podia crecer la lista y la tabla reconocia
todos los datos, para esto utilice la funcion contara para determinar el
numero de filas de la fuente de datos y por medio de la funcion indirecto le
especifiqué el rango a la tabla dinamica, pero ahora estoy tratando de hacer
lo mismo, solo que no me lo permite, me dice que no se puede encontrar el
archivo de origen de la tabla dinamica

alguien me puede ayudar con esto?


Gracias

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
02/12/2004 - 06:09 | Informe spam
hola, Carlos !

... una tabla dinamica con un origen de datos de Excel con rango variante
... por medio de la funcion indirecto le especifique el rango a la tabla dinamica
... ahora estoy tratando de hacer lo mismo, solo que no me lo permite
... que no se puede encontrar el archivo de origen de la tabla dinamica [...]



[solo por si las dudas y suponiendo que la BD y la TD estan en libros distintos]
=> si el problema sucede cuando el libro con la base de datos...
1.- esta cerrado...
- 'sus' nombres con referencia a rangos 'dinamicos' NO son 'buena fuente de datos'
- la funcion indirecto() NO 'trabaja' con referencias a/hacia libros cerrados
2.- esta abierto...
- es posible que el rango [dinamico] al que hace referencia el nombre...
no haya quedado 'perfectamente' definido [funcion/es utilizada/s] en la formula
- puedes verificar que sea 'reconocido' como tal [nombre y rango de referencia] si...
a) pulsa {F5} o... {ctrl}+i o... [menu] edicion / ir a...
b) introduce el nombre que asignaste al rango y presiona {enter}
- si todo 'anda bien'... el rango debera quedar seleccionado...
si no... pudiera ser la causa del error

si los supuestos anteriores no son 'aplicables'... ¿comentas datos adicionales?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Carlos Durán Urenda
02/12/2004 - 16:12 | Informe spam
Hola Hector

gracias por tu respuesta
veras...

Estoy realizando un programa en Visual Basic Net, desde el cual estoy
exportando datos a excel, lo hago directamente en las celdas de la hoja de
calculo, creo una variable de tipo Excel.Application, creo un libro nuevo y
en una de las hojas de calculo estoy copiando los datos celda por celda
mediante un ciclo, algo mas o menos así


For j = 1 To Tabla.Columns.Count
Hoja1.Cells(i + 5, j) = Tabla.Rows(i - 1).Item(j - 1)
Next


(Hoja1 es una variable que referencia a una de las hojas del libro en
cuestion)

En fin... a lo que voy es que los datos se estan copiando directamente a las
celdas como valores y no tienen vinculos con otro libro u origen de datos
alguno

El libro que se esta creando esta basado en una plantilla, la cual tiene una
tabla dinamica que resume dichos datos, necesito que la tabla dinamica se
ajuste a la data que estoy exportando, ya que la cantidad de filas
exportadas no es la misma en todos los casos.

se que se puede utilizar alguna funcion que represente el rango del origen
de datos e introducir esta funcion como rango de la tabla dinamica, por lo
menos asi recuerdo aberlo visto en alguna version de excel (me parece Excel
97), ahora estoy trabajando con Excel XP (2002) pero no consigo hacerlo, ya
he intentado con datos introducidos manualmente en un libro nuevo, creando
una tabla dinamica y remplazando el rango de dicha tabla con las funciones
Indirecto y DesRef, pero en ambos casos me marca el mismo error:
No se puede abrir el archivo de origen de la tabladinamiaca
"=indirecto(..."

he intentado hacer pruebas con indirecto del mismo rango de la tabla
dinamica entrecomillado y continua dandome el mismo error, sin embargo se
que indirecto esta funcionando por que lo he probado con contara de la
siguiente manera ...

=CONTARA(INDIRECTO("Hoja1!$B$8:$L$31"))
y me da resultado

tambien con
=CONTARA(INDIRECTO(Hoja1!H1))
en donde en Hoja1!H1 estoy concatenando una expresion que representa el
rango que quiero establecer en la tabla dinamica


Lo he intentado de otras formas, por ejemplo establecer directamente el
rango de la tabla dinamica por medio de programacion, pero debido a que la
referencia que hago a Excel desde Visal Basic es atravez de un objeto COM,
no puedo hacer las conversiones necesarias y no he podido referenciar la
tabla dinamica desde VB .Net

Tambien hice una tabla dinamica que accediera directamente al origen de los
datos en una base de datos de Access con sentencias SQL, pero a travez de la
red resulta exageradamente lenta la actualizacion de la tabla dinamica

en fin creo que lo mas practico sera actualizar el rango por medio de una
macro en excel, pero no me agrada mucho la idea, ya que el usuario tendrá
que ejecutar la macro, y al tratarse de un reporte gerencial desearia que
fuera lo mas trasparente posible

Se que puede hacerse con INDIRECTO o con DESREF, pero no he logrado hacerlo,
si tuvieras un pequeño ejemplo que puedas mandarme te lo agradeceria mucho



Saludos
Carlos Durán



"Héctor Miguel" escribió en el mensaje
news:
hola, Carlos !

... una tabla dinamica con un origen de datos de Excel con rango variante
... por medio de la funcion indirecto le especifique el rango a la tabla
dinamica
... ahora estoy tratando de hacer lo mismo, solo que no me lo permite
... que no se puede encontrar el archivo de origen de la tabla dinamica
[...]



[solo por si las dudas y suponiendo que la BD y la TD estan en libros
distintos]
=> si el problema sucede cuando el libro con la base de datos...
1.- esta cerrado...
- 'sus' nombres con referencia a rangos 'dinamicos' NO son 'buena
fuente de datos'
- la funcion indirecto() NO 'trabaja' con referencias a/hacia libros
cerrados
2.- esta abierto...
- es posible que el rango [dinamico] al que hace referencia el
nombre...
no haya quedado 'perfectamente' definido [funcion/es utilizada/s] en
la formula
- puedes verificar que sea 'reconocido' como tal [nombre y rango de
referencia] si...
a) pulsa {F5} o... {ctrl}+i o... [menu] edicion / ir a...
b) introduce el nombre que asignaste al rango y presiona {enter}
- si todo 'anda bien'... el rango debera quedar seleccionado...
si no... pudiera ser la causa del error

si los supuestos anteriores no son 'aplicables'... ¿comentas datos
adicionales?
saludos,
hector.

Respuesta Responder a este mensaje
#3 Carlos Durán Urenda
02/12/2004 - 17:59 | Informe spam
Ya logré controlar la tabla Dinamica desde VB.Net, y desde programacion hago
todos los cambios
sin embargo encontre algo extraño, que puede deberse a la configuracion de
mi Excel

A pesar que cuando veo en pantalla y en el rango de la tabla dinamica
Referencias del tipo A1, al solisictar en el VBA que me devuelva el rango de
la tabla dinamica ( esto es la propiedad SourceData), me devuelve una
referencia del tipo L1C1, supongo que ese es el problema por lo cual
indirecto no me daba resultado

Alguna sugerencia de como corregir este problema?, con cierta frecuencia se
me cambian el tipo de referencias a L1C1, a pesar que yo le indico en la
configuracion general la otra referencia


Gracias a todos por su ayuda




"Carlos Durán Urenda" escribió en el mensaje
news:
Hola Hector

gracias por tu respuesta
veras...

Estoy realizando un programa en Visual Basic Net, desde el cual estoy
exportando datos a excel, lo hago directamente en las celdas de la hoja de
calculo, creo una variable de tipo Excel.Application, creo un libro nuevo
y en una de las hojas de calculo estoy copiando los datos celda por celda
mediante un ciclo, algo mas o menos así


For j = 1 To Tabla.Columns.Count
Hoja1.Cells(i + 5, j) = Tabla.Rows(i - 1).Item(j - 1)
Next


(Hoja1 es una variable que referencia a una de las hojas del libro en
cuestion)

En fin... a lo que voy es que los datos se estan copiando directamente a
las celdas como valores y no tienen vinculos con otro libro u origen de
datos alguno

El libro que se esta creando esta basado en una plantilla, la cual tiene
una tabla dinamica que resume dichos datos, necesito que la tabla dinamica
se ajuste a la data que estoy exportando, ya que la cantidad de filas
exportadas no es la misma en todos los casos.

se que se puede utilizar alguna funcion que represente el rango del origen
de datos e introducir esta funcion como rango de la tabla dinamica, por lo
menos asi recuerdo aberlo visto en alguna version de excel (me parece
Excel 97), ahora estoy trabajando con Excel XP (2002) pero no consigo
hacerlo, ya he intentado con datos introducidos manualmente en un libro
nuevo, creando una tabla dinamica y remplazando el rango de dicha tabla
con las funciones Indirecto y DesRef, pero en ambos casos me marca el
mismo error:
No se puede abrir el archivo de origen de la tabladinamiaca
"=indirecto(..."

he intentado hacer pruebas con indirecto del mismo rango de la tabla
dinamica entrecomillado y continua dandome el mismo error, sin embargo se
que indirecto esta funcionando por que lo he probado con contara de la
siguiente manera ...

=CONTARA(INDIRECTO("Hoja1!$B$8:$L$31"))
y me da resultado

tambien con
=CONTARA(INDIRECTO(Hoja1!H1))
en donde en Hoja1!H1 estoy concatenando una expresion que representa el
rango que quiero establecer en la tabla dinamica


Lo he intentado de otras formas, por ejemplo establecer directamente el
rango de la tabla dinamica por medio de programacion, pero debido a que la
referencia que hago a Excel desde Visal Basic es atravez de un objeto COM,
no puedo hacer las conversiones necesarias y no he podido referenciar la
tabla dinamica desde VB .Net

Tambien hice una tabla dinamica que accediera directamente al origen de
los datos en una base de datos de Access con sentencias SQL, pero a travez
de la red resulta exageradamente lenta la actualizacion de la tabla
dinamica

en fin creo que lo mas practico sera actualizar el rango por medio de una
macro en excel, pero no me agrada mucho la idea, ya que el usuario tendrá
que ejecutar la macro, y al tratarse de un reporte gerencial desearia que
fuera lo mas trasparente posible

Se que puede hacerse con INDIRECTO o con DESREF, pero no he logrado
hacerlo, si tuvieras un pequeño ejemplo que puedas mandarme te lo
agradeceria mucho



Saludos
Carlos Durán



"Héctor Miguel" escribió en el mensaje
news:
hola, Carlos !

... una tabla dinamica con un origen de datos de Excel con rango
variante
... por medio de la funcion indirecto le especifique el rango a la tabla
dinamica
... ahora estoy tratando de hacer lo mismo, solo que no me lo permite
... que no se puede encontrar el archivo de origen de la tabla dinamica
[...]



[solo por si las dudas y suponiendo que la BD y la TD estan en libros
distintos]
=> si el problema sucede cuando el libro con la base de datos...
1.- esta cerrado...
- 'sus' nombres con referencia a rangos 'dinamicos' NO son 'buena
fuente de datos'
- la funcion indirecto() NO 'trabaja' con referencias a/hacia libros
cerrados
2.- esta abierto...
- es posible que el rango [dinamico] al que hace referencia el
nombre...
no haya quedado 'perfectamente' definido [funcion/es utilizada/s] en
la formula
- puedes verificar que sea 'reconocido' como tal [nombre y rango de
referencia] si...
a) pulsa {F5} o... {ctrl}+i o... [menu] edicion / ir a...
b) introduce el nombre que asignaste al rango y presiona {enter}
- si todo 'anda bien'... el rango debera quedar seleccionado...
si no... pudiera ser la causa del error

si los supuestos anteriores no son 'aplicables'... ¿comentas datos
adicionales?
saludos,
hector.





Respuesta Responder a este mensaje
#4 Héctor Miguel
02/12/2004 - 19:43 | Informe spam
hola, Carlos !

... encontre algo extraño, que puede deberse a la configuracion de mi Excel
... veo en pantalla y en el rango de la tabla dinamica Referencias del tipo A1
... en el VBA ... el rango de la tabla dinamica (... propiedad SourceData)
... devuelve una referencia del tipo L1C1
... supongo que ese es el problema por lo cual indirecto no me daba resultado
... como corregir este problema?
... con cierta frecuencia se me cambian el tipo de referencias a L1C1
... a pesar que yo le indico en la configuracion general la otra referencia



'hablando' de diferencias/cambios en referencias a rangos usando el 'estilo de notacion' RC/LC/FC ...
[hasta donde se] el cambio en la notacion FnCn <-> LnCn...
- 'es' uno de los 'inconvenientes' al programar 'localmente'... [p.e.]
al programar en ingles... la referencia a filas sera ->siempre<- 'R' [de Row ...una ¿ventaja?]
al programar [p.e.] en español... podria variar entre 'F' [de Fila] y... 'L' [de Linea]
- 'afecta' [solamente] al 'pasar' las referencia/s [por codigo]... [p.e.]
usando la propiedad .FormulaR1C1Local o...
'construyendo' la referencia dentro de una cadena de texto/variable para 'ser usada' [en el codigo]

aunque hay 'detalles' que no habias comentado [y probablemente otros que... 'siguen en el tintero']
espero que lo anterior pueda darte [al menos] una 'pista' para encontrar la 'verdadera' causa...

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