CONSULTAR LIBROS CERRADOS

Cualquier otro tipo de consultas sobre la Hoja de Cálculos Excel.

Reglas del Foro
1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!
Compartir en:
     

CONSULTAR LIBROS CERRADOS

Notapor jgregorio77 » 02 Feb 2011 15:52

Buenos dias expertos, mi requerimiento es el siguiente:
Tengo un libro de excel en donde deseo hacer consultas a otros libros con el contenido de una ficha. Dicha ficha en todos los libros tienen el mismo formato y las mismas referencias de datos por lo que en este Libro "Visualizador" intento hacer lo siguiente.
1.- A través de una pequeña macro dejo que liste en una celda los archivos contenidos en una carpeta, dicho listado se mantiene actualizado en un Formulario "ComboBox" para que este nombre vaya a una celda especifica y saber asi el nombre del archivo de la ficha a ver.
2.- Con la funcion INDIRECTO, puedo hacer las capturas de datos del archivo seleccionado a cada una de las referencias del visualizador.
Hasta aqui no hay problemas pues mientras tenga los archivos abiertos este hara la captura de datos de cualquiera de los archivos contenidos en la lista a la ficha Visalizador... El problema es que tengo que tener estos ficheros abiertos para poder hacer este trabajo....
Mi pregunta: Existe un modo mas eficaz y rapido que me perta hacer lo que deseo y sin necesidad de tener que dejar todos los archivos abiertos?... Gracias
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
jgregorio77
Miembro Nuevo
Miembro Nuevo
 
Registrado: 01 Feb 2011 18:08

Re: CONSULTAR LIBROS CERRADOS

Notapor Héctor Miguel » 03 Feb 2011 00:56

hola, j gregorio !

la funcion indirecto NO trabaja con libros cerrados, necesitarias de codigo para "fabricar" vinculos reales con datos variables, o...

busca en la pagina de Laurent Longre -> http://xcell05.free.fr/ [English page] (Excel add-ins) (e instala) el complemento MoreFunc.xll (MasFunciones)
-> http://xcell05.free.fr/morefunc/english/
-> http://xcell05.free.fr/morefunc/english/#Download
(opcionalmente, algunos ejemplos en -> http://xcell05.free.fr/downloads/Examples.zip)
podras usar la funcion: Indirect.Ext que permite interactuar con libros cerrados.
-mas otras 40+ funciones que tendrias que cargar con ellas- (todas muy utiles, pero... NO de uso frecuente)

por otra parte (y hasta donde se) desde hace mas de 20 años que la unica forma expuesta en foros y grupos para que una funcion llamada desde hoja de calculo "lea" datos en archivos cerrados de excel, es a traves de una funcion personalizada, desarrollada por Harlan Grove llamada "pull" (inspirada por BP y LL, y puedes consultar en internet al respecto), y lo que "hace" es crear una instancia separada de excel (donde se puede procesar el metodo "ExecuteExcel4Macro"), ABRIR el archivo solicitado (que se mantiene "cerrado" en la instancia donde se aplica la funcion), rescata el dato y lo devuelve como valor de la funcion, despues CIERRA el libro y la instancia separada de excel

o sea, puesto que la funcion =indirecto(... NO funciona para trabajar con libros cerrados, las funciones del MoreFunc estan basadas la tecnica de HG, y la "pega" es que en algun momento puedes ir dejando instancias NO cerradas de n_veces que abras excel (en instancias separadas, o sea, cada vez que entres, edites o recalcules las celdas donde la uses) :-(

la siguiente funcion personalizada solo esta preparada para leer UN DATO en libros cerrados de excel v. 97-2003 (*.xls), pero hace +/- lo mismo (sin el inconveniente de abrir otras instancias de excel), tomando 4 argumentos, suponiendo que en tu hoja tienes en celdas las variables: ruta, libro, hoja, celda (p.e.)

[D1] c:\ruta y\sub\carpetas
[D2] libro.xls
[D3] hoja5
[D4] h4

la funcion la llamas (como a cualquiera otra de las integradas en excel) de la siguiente forma:

=LeerDatoCerrado(d1,d2,d3,d4)

y el codigo de la funcion (copia/pega o escribe) en un modulo de codigo estandar en el editor de vba:

Código: Seleccionar todo
Function LeerDatoCerrado(ruta As String, archivo As String, hoja As String, ref As String)
  Dim Cnn As Object, Rec As Object
  Set Cnn = CreateObject("adodb.connection")
  Set Rec = CreateObject("adodb.recordset")
  Cnn.Open "provider=microsoft.jet.oledb.4.0;data source=" & _
                   ruta & IIf(Right(ruta, 1) <> "\", "\", "") & archivo & _
                   ";extended properties=""excel 8.0;hdr=no"""
  Rec.Open "select * from [" & hoja & "$" & Range(ref).Resize(2, 1).Address(0, 0) & "]", Cnn, 1, 1
  LeerDatoCerrado = Rec(0).Value
  Rec.Close: Set Rec = Nothing
  Cnn.Close: Set Cnn = Nothing
End Function

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
* Te recomendamos estos productos Excel: Manual de Macros | Manual de Funciones | Nuevas Funciones | ddTraDa
Avatar de Usuario
Héctor Miguel
Miembro Frecuente
Miembro Frecuente
 
Registrado: 26 Mar 2005 18:31


Compartir en:
     

  • Anuncio
Manual Excel avanzado

Volver a Otras Consultas

¿Quién está conectado?

Usuarios navegando por este Foro: Alexa [Bot] y 2 invitados