Saltar al contenido

Trabajar en una macro con otro libro cerrado


Recommended Posts

publicado

Hola, y de ante mano muchas gracias por vuestra ayuda excel ;-).

Necesito una ayuda, por que esto trabajando en un libro y e incluido el siguiente instrucción, para que me busque un dato de otro libro.

Set Rng = Workbooks("Seguimiento.xlsm").Sheets("Costes").Range("D4:F115")

r = Application.WorksheetFunction.VLookup(antMatricula, Rng, 3, False)

H.Range("J" & Fila) = Horas * r

Pero únicamente me funciona si el libro ("Seguimiento.xlsm")esta abierto.

Como puedo hacer para que busque el dato sin que el libro este abierto? Es decir trabajar con el libro cerrado.

Muchas gracias y un saludo.

publicado

Que tal Gortega

Estimo que es dificil trabajar con un archivo cerrado donde pueda extraer información. Lo que sí se puede, acorde a mi conocimiento, es armar una macro que ejecute el abrir el archivo, sacar los datos deseados y luego cerrarlo...

publicado

Buenas utiliza lo siguiente

Sub CapturaDato()
    Dim dato        As String
    Dim datos       As Variant
    Dim resultado   As Variant
    Dim carpeta     As String
    Dim libro       As String
    Dim hoja        As String
    Dim rango       As String
    carpeta = "" '-----> Ubicar la carpeta del libro
    libro = ""   '-----> Ubicar nombre del ibro con la extensión
    hoja = ""    '-----> Ubicar el nombre de la hoja
    rango = ""   '-----> Ubicar el nombre del rango
    dato = ""    '-----> Ubiicar el dato a bucar
    datos = ExtraerDatos(carpeta, libro, hoja, rango)
    resultado = WorksheetFunction.VLookup(dato, datos, 3, False)
End Sub

Function ExtraerDatos(ByVal carpeta As String, ByVal archivo As String, ByVal hoja As String, ByVal referencia As String)
    Dim rango As String
    Dim dato  As Variant
    Dim i     As Long
    Dim x     As Long
    Dim f     As Long
    Dim ff    As Long
    Dim c     As Range
    Dim datos()
    If Right(carpeta, 1) <> "\" Then carpeta = carpeta & "\"
    If Range(referencia).Columns.Count > 1 Or Range(referencia).Rows.Count > 1 Then
        f = Range(referencia).Rows.Count
        ff = Range(referencia).Columns.Count
        ReDim datos(1 To f, 1 To ff)
        i = 1: x = 1
        For Each c In Range(referencia)
            rango = "'" & carpeta & "[" & archivo & "]" & hoja & "'!" & c.Range("a1").Address(, , xlR1C1)
            datos(i, x) = ExecuteExcel4Macro(rango)
            x = x + 1
            If x > ff Then x = 1: i = i + 1
            If i > f Then i = 1
        Next c
        ExtraerDatos = datos
    Else
        rango = "'" & carpeta & "[" & archivo & "]" & hoja & "'!" & Range(referencia).Range("a1").Address(, , xlR1C1)
        dato = ExecuteExcel4Macro(rango)
        ExtraerDatos = dato
    End If
End Function

Un saludo

publicado

Muchas gracias a Javrio y a Logroastur, por vuestra ayuda.:)

1.- Javrio, la intencion es que no se vea de donde cojo el dato, por ero de no abrir mas libros.

2.- Logroastur, tu código no lo entiendo y no me funciona. He incluido los valores de Carpeta, Libro, Hoja, Rango y Dato a buscar y no me encuentra nada. Es mas cuando haces la función

WorksheetFunction.VLookup(dato, datos, 3, False), datos tiene el mismo valor de dato.

La función ExtraerDatos no se que quieres hacer :(. Me puedes explicar un poco, para ver que podemos hacer.

Date cuenta que mi funcion "r = Application.WorksheetFunction.VLookup(antMatricula, Rng, 3, False)" hace es como la función BUSCARV. Estoy buscando un dato dentro de un rango en la primera columna y cuando lo encuentro me cojo el dato de la 3 columna.

Muchisimas gracias. ;)

publicado

Buenas veamos los datos que debes de colocar son por ejemplo

carpeta = C:\Micarpeta

libro = Libro.xls

Hoja = La Hoja

Rango = "A1:Z100"

Dato = 100

Bien lo que sería es que deseamos buscar el 100 en el libro C:\Micarpeta\Libro.xls en la hoja La Hoja y que este en el rango A1:Z100

En cuanto a la función es la que localiza todos los datos que contengan en el libro que buscamos en el rango que buscamos y luego con la función Buscar localiza el dato.

Te adjunto dos libros uno para que sirva como base de datos y el otro donde esta el código, en este último existe la misma base de datos para que compruebes el resultado obtenido, debes de colocar el la celda B28 el dato a buscar como esta en el ejemplo

Un saludo

BuscarCerrado.rar

publicado

Prueba con esto. Previamente adapta la ruta del archivo Seguimiento.xlsm en la macro.

Set ObjExc = CreateObject("Excel.Application")
ObjExc.Visible = False
ObjExc.Workbooks.Open Filename:="C:\Seguimiento.xlsm" '<===========

Set Rng = ObjExc.Workbooks("Seguimiento.xlsm").Sheets("Costes").Range("D4:F115")
R = Application.WorksheetFunction.VLookup(antMatricula, Rng, 3, False)
H.Range("J" & Fila) = Horas * R

ObjExc.Workbooks("Seguimiento.xlsm").Close
ObjExc.Quit
[/CODE]

publicado

Hola, siento la tardanza. Y por supuesto muchas gracias a todos.

Enhorabuena ""logroastur"", has conseguido hacer lo que necesitaba. Conseguir hacer una consulta con un dato, a otro fichero Excel sin abrirlo y extraer otro dato. :):).

"Macro Antonio" muchas gracias a ti también, aunque tu propones abrir el archivo. He incluido tu macro y al ejecutarlo mi archivo Seguimiento.xlsm te pregunta si quieres hacer una copia de seguridad antes de modificar nada, por lo que hasta que no contestes no continua tu macro. Con la macro de "logroastur" no hay que contestar nada.

"javrio", si es correcto lo que expones.

Muchas gracias a todo.

  • 6 years later...
publicado

Buenas tardes

Yo también estaba buscando una solución así, Logroastur una consulta es posible manejarlo como función, en el archivo que compartiste esta como un botón de comando y el resultado se muestra en msgbox.

Pero como hago para que quede como función es decir que por ejemplo ponga en una celda    =Buscardato(D28)     y el resultado se muestre en la celda donde esta a función

Gracias

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.