Como puedo buscar un dato de otro libro en VBA

Estoy intentando realizar un buscador en un libro ("datos totales") para que me busque en otro("registros").

No soy capaz de sacar esta función tal y como la necesito.

Hay 2 libros, uno de "registros" y otro de "datos totales".

En el libro de "registros", cada registro tiene 2 destinaciones, una fecha y el nombre de la persona que ha realizado el pedido.

Lo que necesitaría es que en libro de los "datos totales" al introducir el numero de registro fuera al libro de registros busque el registro y que me diga las 2 destinaciones, la fecha y el nombre de la persona.

El libro "registros" permanentemente se están introduciendo datos, es decir, no hay un numero de filas fijas, siempre se va aumentado (necesitaría que el buscador fuera dinámico y que fuera siempre a la ultima celda con un valor)

Puestos a pedir me gustaría que me aconsejarais si es mejor hacer un formulario de búsqueda o con un botón. (Mi idea principal era hacerlo con un botón)

1 Respuesta

Respuesta
1

Para hacer la búsqueda me puedes decir lo siguiente:

Del libro "datos totales"

- El nombre completo del libro "datos totales" con todo y extensión

- Cómo se llama la hoja del libro "datos totales"

- En cuál celda vas a poner el "número"

- En cuáles celdas quieres el resultado de la búsqueda.

Del libro "registros"

- ¿Los dos libros van a estar abiertos?

- Si el libro "registros" va estar cerrado, en cuál carpeta se encuentra.

- Cómo se llama la hoja del libro "registros"

- En cuál columna están los "números"

- En cuál columna está la fecha

- En cuál columna está el nombre


E spero los datos en ese orden y te preparo la macro.

- El nombre completo del libro "datos totales" con todo y extensión

Buscador.xlsm 

- Cómo se llama la hoja del libro "datos totales"

Buscador

- En cuál celda vas a poner el "número" 

Los números tenia pensado ponerles en un textbox insertado en la hoja 

- En cuáles celdas quieres el resultado de la búsqueda.

F5: Numero de registro

F6: Destinación 1

F7: Destinación 2

F8: Fecha

F9: Modo de envio

F10: Nombre de la persona que ha realizado el registro

Del libro "registros"

- ¿Los dos libros van a estar abiertos?

No, el libro registros siempre ha de estar cerrado. Solo estará abierto el libro Buscador

- Si el libro "registros" va estar cerrado, en cuál carpeta se encuentra.

H:\digitalizaciones\Expedientes tramitados\datos.xlsm

- Cómo se llama la hoja del libro "registros"

Registros enviados

- En cuál columna están los "números" (te pongo aquí todos los datos que necesitaría que aparecieran y donde están)

Columna D: Número de registro

Columna E: Destinación 1

Columna F: Destinación 2

Columna G: Fecha

Columna H: Modo de envío

Columna I: Persona tramitadora

Mucha gracias de antemano Dante. Para cualquier dato que te hiciera falta de mas contacta conmigo

Te anexo la macro. Deberás poner un Textbox de los Controles Activex

Pon la macro en un botón. Cambia en la macro TextBox1 por el nombre de tu textbox.

Sub Buscar_Numero()
'Por Dante Amor
    '
    'Buscar número en otro libro
    '
    'Datos del libro1
    hoja_1 = "Buscador"
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets(hoja_1)
    h1.Activate
    numero = h1.TextBox1.Value
    If numero = "" Then
        MsgBox "Falta capturar el número"
        'ActiveSheet.TextBox1.Activate
        Exit Sub
    End If
    h1.Range("F5:F10").Value = ""
    '
    'Datos del libro2
    libro2 = "datos.xlsm"
    hoja_2 = "Registros enviados"
    ruta2 = "H:\digitalizaciones\Expedientes tramitados\"
    'ruta2 = ThisWorkbook.Path & "\"
    '
    If Dir(ruta2 & libro2) = "" Then
        MsgBox "No existe el libro: " & libro2, vbCritical
        Exit Sub
    End If
    '
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '
    Set l2 = Workbooks.Open(ruta2 & libro2, UpdateLinks:=False, ReadOnly:=True)
    Set h2 = l2.Sheets(hoja_2)
    Set b = h2.Columns("D").Find(numero, LookIn:=xlValues, lookat:=xlWhole)
    If Not b Is Nothing Then
        H1. Range("F5").Value = h2. Cells(b.Row, "D")
        H1. Range("F6").Value = h2. Cells(b.Row, "E")
        H1. Range("F7").Value = h2. Cells(b.Row, "F")
        H1. Range("F8").Value = h2. Cells(b.Row, "G")
        H1. Range("F9").Value = h2. Cells(b.Row, "H")
        H1. Range("F10").Value = h2. Cells(b.Row, "I")
    Else
        MsgBox "No existe el número : " & numero, vbExclamation
    End If
    l2.Close False
End Sub

.

.

¡Gracias! Eres un crack, es justo lo que necesitaba. Tu aportación es excelente

Dante, por finalizar como podría abrir un formulario cuando los datos buscados se encuentran. 

He intentando con un userform1.show

If Not b Is Nothing Then
userform1.show
        H1. Range("F5").Value = h2. Cells(b.Row, "D")
        H1. Range("F6").Value = h2. Cells(b.Row, "E")
        H1. Range("F7").Value = h2. Cells(b.Row, "F")
        H1. Range("F8").Value = h2. Cells(b.Row, "G")
        H1. Range("F9").Value = h2. Cells(b.Row, "H")
        H1. Range("F10").Value = h2. Cells(b.Row, "I")
    Else
        MsgBox "No existe el número : " & numero, vbExclamation
    End If

Pero me da un error de objeto 424. Supongo que es alguna tontería

Al parecer no se llama userform1. ¿Modificaste algo más en la macro?

Había importado un formulario de otra macro que tenia, por eso no funcionaba. Lo he creado desde cero y se inicia con normalidad.

Gracias

Quería provechar tu código par usarlo para abrir un formulario con los datos extraídos. Cuando lo ejecuto no me da error 424, se abre el formulario pero no se copian los datos

Private Sub UserForm_Initialize()    
    'Datos del libro1    
    hoja_1 = "Buscador"    
    Set l1 = ThisWorkbook    
    Set H1 = l1.Sheets("buscador")    
    'Datos del libro2    
    libro2 = "datos.xlsm"    
    hoja_2 = "Registros enviados"    
    ruta2 = "H:\digitalizaciones\Expedientes tramitados\"    
    ruta2 = ThisWorkbook.Path & "\"    
    '    
      Application.ScreenUpdating = False    
numero = H1.registro_oficina.Value & "/" & registro_numero.Value & "/" & registro_ano.Value    
    Set l2 = Workbooks.Open(ruta2 & libro2, UpdateLinks:=False, ReadOnly:=True)    
    Set h2 = l2.Sheets(hoja_2)    
    Set b = h2.Columns("D").Find(numero, LookIn:=xlValues, lookat:=xlWhole)    
    If Not b Is Nothing Then    
    H1.formulario_buscador.registro.Value = h2.Cells(b.Row, "D")    
    H1.formulario_buscador.destinacion_generica.Value = h2.Cells(b.Row, "E")    
    H1.formulario_buscador.destinacion_especifica.Value = h2.Cells(b.Row, "F")    
    H1.formulario_buscador.data.Value = h2.Cells(b.Row, "G")    
    H1.formulario_buscador.modo.Value = h2.Cells(b.Row, "H")    
    H1.formulario_buscador.tramitador.Value = h2.Cells(b.Row, "I")    
    Else    
    End If    
        l2.Close False    
    End Sub    

Ya no estoy entendiendo qué necesitas con el form. Crea una nueva pregunta y explica con detalle lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas