La Web del Programador: Comunidad de Programadores
 
    Pregunta:  11275 - CUADRO DE LISTA: POSICIONARSE
Autor:  Susana Ferrer
En un formulario tengo un cuadro de lista el cual muestra los datos de un fichero (fichero de Clientes). Necesito que el usuario pueda posionarse en el cliente que desee (por apellido). Tal y como funciona ahora, por defecto, se posiciona en el primer apellido de la tecla que pulsan. Es decir, si pulsa la tecla 'B' se posiciona en el primer registro cuyo apellido empiece por 'B', pero si pulsa 'BE' se posiciona en el que comience por 'B' y luego en el que comience por 'E'; necesitaría que se posicionara en el que comienza por 'BE'.
¿Cómo podría realizar esta búsqueda?
Si ésto no fuera posible, he pensado en crear un cuadro de texto para que introduzcan el apellido a buscar y que lo confirmen con un botón de comando el cual haría la búsqueda, pero ¿qué debo hacer para posicionarme en el cuadro de texto por un valor?
Gracias, un saludo

  Respuesta:  Pablo Servin Mendoza
Hola Susanita!!!

Pues creo comprender un poco el problema que tienes .... mira ...yo he encontrado una forma de reposicionar en un cuadro de lista el rfc o en tu caso que se trata de un apellido ... usando Bookmark y RecordSetclone.

Este es un procedimiento que puedes introducir en la propiedad del cuadro combinado "Después de actualizar"

Te explico paso a paso el procedimiento ... (Obviamente sin los números)

Sub Campo85_AfterUpdate ()

1. Dim rst As Recordset
2. Set rst = Me.recordsetclone

3. rst.FindFirst "[RFC] = '" & Me.Campo85 & "'"

4. If rst.nomatch Then
5. MsgBox ("El rfc no existe ó no es válido")
6. rst.MoveFirst
Else
7. Me.bookmark = rst.bookmark
End If

End Sub

1. Declaras una variable de tipo Recordset
2. a ese recordset ... le efectúas un Clon (Recordsetclone) de la propiedad Me. que en este caso es aplicable a los datos de tu formulario.
3. A ese recordset le aplicas una búsqueda con FindFirst en base al campo RFC, en mi caso ...en tu caso puede ser el appellido o nombre depende ... que sea igual a en este caso mi variable o cuadro de selección se llama Me.Campo85 , si te das cuenta es el mismo nombre del procedimiento, entónces básate a ese nombre cuando introduzcas el procedimiento.

4. Compruebas si no se encuentra lo que introduces en el cuadro de lista.
5. Pones un mensaje de error.
6. Reposicionas el recordset al primer registro.
7. Colocas el registro seleccionado en el formulario y reposiciona al Bookmark (Anotador de la copia clonada de tu base).

Y aqui tienes el procedimiento ...

Sub Campo85_AfterUpdate ()

Dim rst As Recordset
Set rst = Me.recordsetclone

rst.FindFirst "[RFC] = '" & Me.Campo85 & "'"

If rst.nomatch Then
MsgBox ("El rfc no existe ó no es válido")
rst.MoveFirst
Else
Me.bookmark = rst.bookmark
End If

End Sub

Espero te sea de utilidad y si tienes algun comentario o duda no dudes en hacermelo saber ....

Saludos y exito en todo lo que hagas ....

Sinceramente Pablo.