¿Cómo hacer una búsqueda en un control ActiveX en Excel?

Tengo éste cuadro que será una agenda telefónica de un departamento, los números se agregaran manualmente ya que todos están en una lista y sería algo de solo copiar y pegar, lo que se quiere luego de tener todos los números en la lista, hacer lo siguiente:

1.- Una búsqueda mediante los dos controles ActiveX (TextBox1 y TextBox2) mostrado en la imagen

2.- Al ingresar un nombre en el TextBoxt1 me refleje el número de teléfono en el TextBox2 sin necesidad de usar un botón de búsqueda, es decir, que me lo vaya mostrando en tiempo real y si borro TextBox1 se borre TextBox2

3.- Tener como un autocompletar, que a medida que yo vaya ingresando letras me vaya dando sugerencias de los nombres. Ej: En el cuadro tenemos Angel Alvarez, al ingresar la letra "a" me muestre "ngel Alvarez" como en azul sombreado y así sucesivamente

4.- Que me muestre todos los nombres que tengan las letras ingresadas y las demas no. Ej: Al ingresar la letra "a" que me muestre en el cuadro de los números telefónicos, el número (0, 1, 2,...), el nombre de la persona y el número telefónico, quedaría algo así:

0 Angel Alvarez 0414-0000000

6    Angel Perez       0414-0000006

En caso de que hay mas nombres con ese criterio me los vaya mostrando y los demás no los muestre, todo en tiempo real, sin necesidad de un botón

Todo esto en la hoja de cálculo sin necesidad de usar un formulario (UserForm)

Lo que se quiere es hacer una búsqueda semejante al de los navegadores cuando apretamos Ctrl+F pero que me muestre solo los resultados que cumplan con los criterios de la búsqueda en tiempo real y los que no cumplan que no aparezcan, es un proyecto, pensé que se me haría fácil pero estoy que me vuelvo loco, no pude ni siquiera hacer la búsqueda :(

Sé que es mucho pero no he podido dar con ese problemita.

1 Respuesta

Respuesta
1

H o l a : Son varias actividades que se deben considerar. Sigue las indicaciones.

1. Para que se muestren todos los resultados según la letra o letras ingresadas, deberás poner un combobox de CotrolActiveX, ya que en un textbox no puedes desplegar más de un valor.

2. Para que se muestre el teléfono en el textbox, deberás capturar un nombre completo en el combobox o elegir con el mouse un nombre de la lista desplegada en el combobox.

3. No se puede poner el autocompletar, ya que si se utiliza el autocompletar, se perdería la lista desplegable, es una limitante del combobox, ya que al mostrar un valor completo en el combobox, es como si eligieras un dato de la lista, entonces la lista se cierra.

4. Al poner una letra, en automático te va a mostrar todos los números, nombres y teléfonos, donde el nombre corresponda a la letra capturada. En el siguiente ejemplo, en el combobox capturé la letra "j", en automático se muestran los nombres "Juan", "Jose" y "Jorge"

6. Para elegir un nombre, simplemente con el mouse, selecciona del desplegable el nombre y en automático se llenará el textbox con el teléfono.

6. La macro está diseñada para que los datos estén en las columnas B, C y D; además los datos deberá empezar en la fila 5, tal y como lo muestra tu ejemplo.

7. El combobox de ActiveX deberá tener las siguientes propiedades:

Ajusta en la propiedad ColumnWidths el ancho de las columnas para cada dato del combobox.

8. Si escribes el nombre completo, por ejemplo "ana", en automático se llena el textbox sin necesidad de seleccionar con el mouse el nombre de la lista:


9. Para que el combobox se cargué con los datos existentes en la hoja, pon la siguiente macro en los eventos de ThisWorkbook

Private Sub Workbook_Open()
'Por.Dante Amor
    Sheets("Dir. Telefónico").Select
    ActiveSheet.ComboBox1.Clear
    For i = Range("C" & Rows.Count).End(xlUp).Row To 5 Step -1
        ActiveSheet.ComboBox1.AddItem Cells(i, "B"), 0
        ActiveSheet.ComboBox1.List(0, 1) = Cells(i, "C")
        ActiveSheet.ComboBox1.List(0, 2) = Cells(i, "D")
    Next
End Sub

Instrucciones para poner la macro en los eventos ThisWorkbook

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a ThisWorkbook
  4. En el panel del lado derecho copia la macro

10. Pon el siguiente código en los eventos de la hoja "Dir. Telefónico"

NOTA: Al principio de la macro está declarada la variable "cargando".

Dim cargando
Private Sub ComboBox1_Change()
'Por.Dante Amor
    Application.ScreenUpdating = False
    If cargando = True Then Exit Sub
    '
    TextBox1 = ""
    If ComboBox1.ListIndex > -1 And ComboBox1 <> "" Then
        abuscar = ComboBox1.List(ComboBox1.ListIndex, 1)
    Else
        abuscar = ComboBox1.Text
    End If
    If ComboBox1.Text <> "" Then
        Set b = Columns("C").Find(abuscar, lookat:=xlWhole)
        If Not b Is Nothing Then
            TextBox1 = b.Offset(0, 1)
        End If
    End If
    '
    cargando = True
    If ComboBox1.ListIndex > -1 Then
        dato = ComboBox1.List(ComboBox1.ListIndex, 1)
    Else
        dato = ComboBox1.Text
    End If
    ComboBox1.Clear
    For i = Range("C" & Rows.Count).End(xlUp).Row To 5 Step -1
        If Left(UCase(Cells(i, "C")), Len(dato)) = UCase(dato) Then
            ComboBox1.AddItem Cells(i, "B"), 0
            ComboBox1.List(0, 1) = Cells(i, "C")
            ComboBox1.List(0, 2) = Cells(i, "D")
        End If
    Next
    ComboBox1.Text = dato
    '
    'En esta parte se activa la lista
    Range("D6000"). Activate
    ComboBox1. Activate
    ComboBox1. DropDown
    '
    Application.ScreenUpdating = True
    cargando = False
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. En el panel del lado derecho copia la macro

Son varias indicaciones que deberás seguir al pie de la letra. Si no te funciona, envíame tu archivo para realizar las adaptaciones necesarias.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Darwin Zavala” y el título de esta pregunta.

Avísame en esta pregunta cuando me lo hayas enviado.


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Excelente Dante, muchas gracias, ya se está adaptando justo a lo que quiero hacer, pero hay unos detallitos que no sé si se te escaparon ponerlos:

1.- Seguí todo al pie de la letra pero al colocar la letra no me muestra los resultados con ese criterio, es decir, si coloco la "a" no me arroja los nombres con letras "a" sino que se queda igual el ComboBox.

2.- Cuándo hablaba que sólo me muestre el número, el nombre, y número de teléfono al ingresar una letra, las personas que cumplan con la letra (Te coloco el mismo ejemplo de la pregunta) Ej: al ingresar la letra "a" quedara algo así

0 Angel Alvarez 0414-0000000

6    Angel Perez  0414-0000006

Pero que quedara en el cuadro de los números y no en el combobox, eso se puede hacer?

Sólo esos dos detallitos pero de resto todo está perfecto.

La solución funciona tal cual están las indicaciones, revisa paso a paso las indicaciones. Como puedes ver en mi ejemplo, pongo "j", en automático se muestran los nombres "Juan", "Jose" y "Jorge"


Si tienes problemas para que funcione, envíame tu archivo y te adapto la solución.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Darwin Zavala” y el título de esta pregunta.

Avísame en esta pregunta cuando me lo hayas enviado.


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas