Función Buscarv desde Combobox a listbox dentro de un UserForm

Estoy desarrollando una pequeña aplicación en excel para buscar y filtrar datos a partir de una base de datos en una hoja de excel, mi objetivo es que al seleccionar un dato a partir de un Combobox cmb_NCI automáticamente arroje el resultado dentro del listbox lst_CU, a continuación necesitaría la posibilidad de cambiar el color del listbox de acuerdo a los valores

1 Respuesta

Respuesta
1

Como no dejaste ninguna aclaración o referencias te iré respondiendo por puntos para que armes tu propia rutina:

1- Seleccionar un dato a partir de un Combobox cmb_NCI'... para que se ejute al seleccionar un dato tu macro debe empezar con:

Private Sub cmb_NCI_Click()

'instrucciones

End Sub

2- arroje el resultado dentro del listbox lst_CU

Set busco= Hoja.Rango.Find(cmb_NCI.value, lookin:=xlvalues, lookat:=xlwhole)

if not busco is nothing then lst_CU.additem busco

Debes completar la instrucción Set con Hoja y Rango según donde debe buscar ese dato del combo.

Como podrás observar no puedo ADIVINAR en qué col o ubicación estará el 'resultado' por lo tanto seguramente 'busco' debe desplazarse con offset...

Resumiendo: deja más aclaraciones si necesitas que te ajuste la macro a tu modelo.

Estimada experta

El UserForm se encuentra  en la "Hoja 1". La base de datos se encuentra en la "Hoja 2", y el valor buscado en la "Colmuna 3" 

Saludos 

Blás

Bien, observa la imagen y comenta qué datos deben ser volcados al listbox.

Si utilizas un Listbox y además comentas que se debe buscar y filtrar, ¿entiendo qué se muestran varios registros... entonces si se filtra por col 3 qué datos deseas mostrar en la lista? ¿Cuántas col tendrá tu listbox?

Quizás también debieras dejar una imagen de tu hoja base.

Sdos, quedo a la espera de tus aclaraciones. No valores aún.

Elsa

Estimada experta 

En el listbox lst_CU deseo poner  en principio una sola columna con una sola fila

ACLARACIÓN: la sintaxis lst_CU: responde a Curso. Es decir que solo un texto tendría.  Al igual que la mayoría de los listbox de este formulario, excepto por el listbox lst_LRU  que se encuentra dentro de la Frame Libros Prestados por el usuario, en el mismo habrían aproximadamente 13 columnas.  

Aquí no utilice: 

  • Label: por la estética
  • Textbox: por el peligro de que accidentalmente se  modifiquen los datos

Esta es mi base de datos  para los listbox de registros unicos


Y dependiendo del cbm_NCI se filtraria los datos para optener el detalle de cuantos libros posee el usuario, el detalle de esto se colocaría dentro listbox lst_LRU  que se encuentra dentro de la Frame Libros Prestados por el usuario (aquí están las 13 columnas). La base de datos para este listbox es la hoja DETALLES DE PRESTAMOS.exe, de la misma llamaríamos al UserForm principal 

Saludos cordiales 

Blás

Ups, estaba difícil de adivinar el formato.

Bien, dejo la rutina que responde a tu consulta inicial: devolver en un listbox el dato de la col 3:

Private Sub cmb_NCI_Click()
'x Elsamatilde

Dim busco, hojaB
Dim dato As Long, i As Long

'al seleccionar un elemento se busca en hoja BASE y se devuelve el curso en el listbox CU
If cmb_NCI = "" Then Exit Sub
'limpia el listbox de posibles datos anteriores, xq solo interesa presentar 1 registro
lst_CU.Clear
'el dato es numérico
dato = cmb_NCI.Value
'se busca en hoja BASE DE DATOS"
Set hojaB = Sheets("BASE DE DATOS")
For i = 5 To hojaB.Range("A" & Rows.Count).End(xlUp).Row
If hojaB.Range("A" & i) = dato Then
'si lo encuentra devuelve el texto de la col C
lst_CU.AddItem hojaB.Range("C" & i)
Exit For
End If
Next i
End Sub

Ahora, utilizar un listbox solo para mostrar un dato es todo un despropósito ;)

Los Label son los más habituales para estos casos, que los podes dibujar tal cual como un textbox. Te invito a descubrir cuál es el textbox y cuál el Label en la imagen siguiente:

Otra opción posible es utilizar Textbox de modo seguro, es decir con la propiedad TabStop en False.

Sdos!

Estimada experta

El código  posee un error

Saludos 

Blás

Eso significa que algún nombre no coincide con el nombre de tus controles u hojas.

Revisa todos los nombres utilizados (¿BASE DE DATOS con o sin espacios? ) ... Veo que en algunas líneas dice 'cmb_NCI y en otras 'cbm_NCI' ... arregla esos detalles en todo el código.

Estimada experta

Realice las modificaciones, mi código actual es 

como puedes notar cambie el nombre de la hoja (BASE DE DATOS) por BD pero aún me aparece el mismo error.  

Saludos 

Blás 

No veo todo el código y tampoco se observan los nombres de los controles por lo que no puedo asegurar que tu código esté correcto en cada línea.

No se si tenés algún evento en Userform. Initialize y en ese caso debieras colocar ptos de interrupción en cada línea de ese evento para que te marque dónde se está deteniendo.

Enviame el libro así lo reviso ... veo menciones a lst_CU, cmb_NCI y otros controles ... además no se observa todo el código ni tampoco si lo que tratas como Listbox realmente es un listbox... como verás son muchos los detalles y con esta simple imagen no se puede determinar si 'el codigo posee un error' o se trata de un error de diseño ;(

Mis correos aparecen en mi sitio que dejo al pie.,

En formulario frmRP:

Private Sub UserForm_Initialize()
Sheets("PRESTAMOS DE USUARIOS").Select    

No existe esa hoja...

No puede ser la hoja llamada 'Detalle ...' ¿por qué en ese caso da error el campo Nº C.I así que quizás sea la hoja BD?

Si vuelves a tener algún error del tipo Subíndice... debes controlar 'todos los nombres' de los controles, hojas y formulario que se llama.

Sdos!

¡Gracias! por tu ayuda, estimada experta.

Ahora el código funciona perfectamente

Saludos cordiales

Blás  

Estimada Elsa:

Como podría hacer para utilizar los dos valores de los combobox, es decir en caso de no tener el dato del cbm_NCI busque por el cbm_US, aunque al seleccionar el usuario este automáticamente ingresa el valor correspondiente en el cbm_NCI no inserta los datos en los correspondientes listbox's, es decir no encuentra los datos.


Gracias de nuevo

Cordiales saludos 

Blás

Dejame por favor una nueva consulta en el tablón... ya ha pasado un mes y es volver a empezar nuevamente el tema.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas