Autocompletar en cuadros de texto
Pregunta
¿Existe alguna función en Access que haga o simule la utilidad auto completar existente en las celdas de Excel?
Respuesta
En principio, no existe tal cosa en Access. En todo caso, puedes utilizar un cuadro combinado de Access, que sí tiene incorporada esa utilidad.
Si de todas maneras no quieres utilizar un cuadro combinado, puedes utilizar la función que he creado para tal efecto. Hay que tener en cuenta que esta función sólo auto-completará cuadros de texto que estén situados en formularios que tengan datos enlazados a una tabla o consulta. Este cuadro de texto tiene que ser un control independiente, sin datos enlazados.
La función aquí propuesta función debe asociarse al evento Change (Al cambiar) del cuadro de texto, escribiendo en la casilla correspondiente a ese evento en la ventana de propiedades:
= AutoComplete("Nombre_del_Campo")
Donde “Nombre_del_Campo” será el nombre del campo del origen de datos del formulario (tabla o consulta) por el que cuadro de texto buscará.
Copia el código que corresponda al tipo de proyecto que estés usando en un módulo estandar.
Codigo
'---------------------------------------------------------
' AutoComplete
'
' Código escrito originalmente por Juan M Afán de Ribera.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
' En el caso de querer publicarlo en una página Web,
' por favor, contactar con el autor en
'
' accessvba@ya.com
'
' Este código se brinda por cortesía de
' Juan M. Afán de Ribera
'
' el codigo ha sido adaptado a 32 y 64 bytes por Juanjo Luna juanjo@luna-soft.es
' función que detecta si una tecla ha sido pulsada
'
Private Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As LongPtr) As Integer
Function AutoComplete(FieldName As String)
Dim ctl As Control
Dim LenOldText As Long
Static Once As Boolean
Dim rst As Object
' Primero comprobamos que la función se ejecute
' sólo una vez en cada llamada (esta función cambia
' el contenido del cuadro de texto, y por tanto, el
' evento Change la llamará dos veces)
If Once = False Then
' comprobamos que no se hayan pulsado las teclas
' Retroceso o Suprimir
If GetAsyncKeyState(vbKeyBack) = 0 _
And GetAsyncKeyState(vbKeyDelete) = 0 Then
' esta variable se pondrá a True mientras
' se ejecute la función, para que este código
' sólo actualice el cuadro de texto una vez
Once = True
On Error Resume Next
' referenciamos el control activo
Set ctl = Screen.ActiveForm.ActiveControl
' referenciamos el recordset del formulario
Set rst = Screen.ActiveForm.RecordsetClone
If ctl.Text <> "" Then
' buscamos el primer registro cuyos primeros caracteres
' coincidan con los que contiene el cuadro de texto
rst.FindFirst FieldName & " LIKE '" & ctl.Text & "*'"
' si se han encontrado coincidencias
If Not rst.NoMatch Then
LenOldText = Len(ctl.Text)
' actualizamos el valor del cuadro de texto
ctl.Text = rst(FieldName)
' situamos el cursor donde el usuario escribía
ctl.SelStart = LenOldText
' seleccionamos el nuevo texto incorporado
ctl.SelLength = Len(ctl.Text) - LenOldText
End If
End If
Set ctl = Nothing
Set rst = Nothing
On Error GoTo 0
Once = False
End If
End If
End Function
'---------------------------------------------------------
Ejemplo
Créditos
con el fin de dar a conocer el trabajo de uno de los más grandes en el mundo de Access en español, y tras solicitar su permiso, actualizo este artículo de Juan M Afán de Ribera. Todos los derechos y autoría corresponden a él. Access & VBA FAQ – Autocompletar en cuadros de texto (archive.org)
Pregunta Sé cómo imprimir un informe mediante código y sé cómo hacer para que aparezca el cuadro de diálogo imprimir,…
Cómo conseguir en un informe calcular sólo el total para cada página