Access - Busqueda en Formularios

 
Vista:
sin imagen de perfil

Busqueda en Formularios

Publicado por Jose Miguel (1 intervención) el 22/07/2025 22:51:02
Hola, necesito de su ayuda para hacer que la busqueda de los Combo Box de los formularios busquen en cualquier parte del campo y no solamente desde el inicio. Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Eduardo Pérez Fernández

Busqueda en Formularios

Publicado por Eduardo Pérez Fernández (362 intervenciones) el 23/07/2025 14:14:01
Agregar Código VBA
Con el cuadro combinado seleccionado, ve a la pestaña Evento en la Hoja de Propiedades. Busca el evento Al no estar en la lista (On Not In List) y haz clic en los tres puntos (...) para abrir el editor VBA.

Pega el siguiente código en el módulo de tu formulario, reemplazando TuComboBox con el nombre real de tu cuadro combinado y NombreCampo con el nombre del campo en el que buscas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Sub TuComboBox_NotInList(NewData As String, Response As Integer)
    Dim strSQL As String
 
    ' Evita que el usuario añada nuevos elementos si no quieres esa funcionalidad
    Response = acDataErrDisplay
 
    ' Filtra el origen de la fila del ComboBox con la nueva búsqueda
    strSQL = "SELECT ID, NombreCampo FROM TuTabla WHERE NombreCampo LIKE ""*" & NewData & "*"" ORDER BY NombreCampo;"
 
    ' Actualiza el origen de la fila del ComboBox
    Me.TuComboBox.RowSource = strSQL
 
    ' Abre la lista desplegable de nuevo para mostrar los resultados del filtro
    Me.TuComboBox.Dropdown
 
    ' Cancela el error predeterminado de "No en la lista"
    Response = acDataErrContinue
End Sub
 
Private Sub TuComboBox_Change()
    ' Restablece el origen de la fila a su estado original cuando el usuario cambia el texto,
    ' para que siempre se busquen los datos completos inicialmente.
    ' Esto es importante para que el filtro no quede aplicado permanentemente
    Me.TuComboBox.RowSource = "SELECT ID, NombreCampo FROM TuTabla ORDER BY NombreCampo;"
End Sub
 
' Opcional: Para resetear el filtro al salir del control
Private Sub TuComboBox_Exit(Cancel As Integer)
    Me.TuComboBox.RowSource = "SELECT ID, NombreCampo FROM TuTabla ORDER BY NombreCampo;"
End Sub

Puedes modificar la forma en que tus cuadros combinados (Combo Box) de Access realizan búsquedas para que encuentren coincidencias en cualquier parte del campo, y no solo desde el principio. Aquí te explico cómo hacerlo:

Explicación del código:

TuComboBox_NotInList: Este evento se dispara cuando el usuario escribe algo en el cuadro combinado que no está en la lista actual.

Response = acDataErrDisplay: Evita el mensaje de error predeterminado.

strSQL = "SELECT ... WHERE NombreCampo LIKE ""*" & NewData & "*""": Construye una nueva consulta SQL que usa el operador LIKE y los comodines * para buscar NewData (lo que el usuario escribió) en cualquier parte de NombreCampo.

Me.TuComboBox.RowSource = strSQL: Asigna esta nueva consulta filtrada como el origen de la fila del cuadro combinado.

Me.TuComboBox.Dropdown: Vuelve a abrir la lista desplegable para mostrar los resultados del filtro.

Esta es una opción. Reemplace nombrecampo y tutabla por los de tú tabla

TuComboBox_Change: Este evento se dispara cada vez que el texto en el cuadro combinado cambia. Su propósito aquí es restablecer el RowSource a su estado original. Esto es crucial para que si el usuario borra la búsqueda o escribe algo nuevo, el cuadro combinado vuelva a buscar en toda la tabla y no quede el filtro anterior aplicado.

TuComboBox_Exit (Opcional): También puedes restablecer el RowSource cuando el usuario sale del cuadro combinado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar