¿Cómo puedo buscar datos en un libro cerrado con la función VLookup en VBA?

Quiero buscar datos en un libro que está cerrado con la función VLookup desde VBA. Lo he intentado de varias formas y no he podido obtener nada, por ejemplo:

For i = 10 To 29
     Range("B" & i) = WorksheetFunction.VLookup(Range("H" & i), Workbooks("Inventario De Insumos").Sheets("2013").Range("C9:BDR10000"), 3, False)
Next i

o también,

 Dim MyLookup As String
For i = 10 To 29
    Set MyLookup = Workbooks("C:\Users\Gerardo González\Documents\Maderas Y Diseños GOVA S.A. De C.V\Formatos\Almacén De Insumos\Inventario De Insumos.xlsm").Worksheets("2013").Range("C9:BDR10000")
        Range("B" & i) = WorksheetFunction.VLookup(Range("H" & i), MyLookup, 3, False)
Next i 

e inclusive,

 For i = 10 To 29
     Range("B" & i) = WorksheetFunction.VLookup(Range("H" & i),'C:\Users\Gerardo González\Documents\Maderas Y Diseños GOVA S.A. De C.V\Formatos\Almacén De Insumos\[Inventario De Insumos.xls]2013'!$C$9:$BDR$10000, 3, False) 
 Next i

Todas éstas formas no me arrojan nada.

¿Será realmente posible?

2 Respuestas

Respuesta
2

Te presento 2 opciones.

La primera, mantiene el libro cerrado, crea una hoja temporal para almacenar los datos del libro "Inventario De Insumos" (al final del proceso, borra la hoja temporal), el libro "Inventario De Insumos" deberá ser versión 2003, esto es porque solamente funciona con archivos con extensión "xls" (esto es un limitación de la versión de excel 2007).

Sub leerlibrocerrado()
'Por.DAM
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ruta = ThisWorkbook.Path
archivo = "Inventario De Insumos"
Hoja = "2013"
ref = "c:e"
Set h1 = ActiveSheet
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).Address(0, 0) & "]", Cnn, 1, 1
Set h2 = Sheets.Add
Cells(1, 1).CopyFromRecordset Rec
h1.Select
For i = 10 To 29
    h1.Range("B" & i) = Application.VLookup(h1.Range("H" & i), _
    h2.Range("A1:C10000"), 3, False)
Next i
h2.Delete
Rec.Close: Set Rec = Nothing
Cnn.Close: Set Cnn = Nothing
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

La segunda opción, abre el libro (puede ser cualquier versión de excel), realiza las búsquedas y luego cierra el libro.

Sub buscar()
'Por.DAM
Application.ScreenUpdating = False
Set l1 = ThisWorkbook
Set l2 = Workbooks.Open("Inventario De Insumos.xlsx")
l1.Activate
For i = 10 To 29
    Range("B" & i) = Application.VLookup(Range("H" & i), _
    l2.Sheets("2013").Range("C9:BDR10000"), 3, False)
Next i
l2.Close
Application.ScreenUpdating = True
End Sub

Saludos.Dante Amor
Si es lo que necesitas.

¡Hola Aprendemos!

Muchas gracias por tu respuesta.

Pensé que se podía utilizar dicha función en VBA para llamar un libro cerrado, pero veo que no es posible (investigué en la red y no he encontrado nada).

Sin embargo, tus opciones me han sido de gran utilidad.

Gracias por todo tu interés.

Saludos desde Michoacán, México.

Respuesta

Dante Amor"

Me parece excelente tu aportación... Tengo una duda, ¿Cómo se hace con un archivo que está en RED y que al abrirlo siempre está con "Vista Progegida" (Esa franja amarilla en la zona superior del archivo).

Es un *.xlsx, por lo que la primer opción no funcionaría...

¿Cómo haría para que con la "Vista Protegida" funcione el marco?

O ¿Qué comando se utilizaría para quitar la "Vista Protegida" a un archivo que abrí para usar el VlookUp?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas