Retroceso del cursor en un combobox

10/07/2006 - 00:19 por klomkbock | Informe spam
Hola de nuevo a todos, aqui vuelvo con otro problema, para no variar.

Tengo un combobox en cuyos eventos KeyDown y KeyUp he introducido un
codigo (sacado del foro y retocado un poco) que reconoce las pulsaciones
del teclado y las asigna a una variable(Pulsos) de tal forma que si se
pulsa una tecla (no todas, se establecen algunas excepciones), Pulsos = 1
y cada vez que se pulsa una tecla se añade una unidad a pulsos:
Pulsos=Pulsos + 1. La tecla de retroceso(vbKeyBack) resta 1 cada vez a
pulsos si este es mayor que cero. El proceso va bastante bien, y pulsos
sirve para definir el nº de caracteres de la izquierda del combobox, para
usarlo como criterio para filtrar los datos de una hoja, comparandolo con
los registros de una columna concreta y trasladando el contenido del rango
"A:D" de las filas que vayan coincidiendo segun se escribe, a un ListBox
de 4 columnas. Uff...

Todo va bastante bien, pero al pulsar el retroceso, aunque pulsos
disminuye y el filtro se readapta y hace, creo que bien, su trabajo, el
cursor no retrocede (ni el sombreado de seleccion), con lo que si
introduces otro caracter no lo asimila a la coincidencia que aparece en el
combobox, sino que lo inserta en medio de lo que haya en el combo y,
claro, normalmente ya no existe ninguna coincidencia que reflejar en el
listbox.

No se si me he explicado, pero creo que no soy capaz de aclararlo mucho
mas.

Los codigos/extractos son los siguientes:

Private Sub cmbCriterio_KeyDown(ByVal KeyCode As MSForms _
.ReturnInteger, ByVal Shift As Integer)
Application.ScreenUpdating = False
Select Case KeyCode
Case vbKeyReturn, vbKeyEscape
SendKeys "{Esc}"
Case 32 To 255
Pulsos = Pulsos + 1
End Select
Application.ScreenUpdating = True
End Sub

El codigo referido al retroceso (vbKeyBack) iba originalmente en otro Case
del procedimiento anterior, pero tras varias pruebas, y la verdad es que
ya no tengo muy claro porque, lo acabe cambiando a KeyBack, donde creo que
funciona mejor¿¿??:

Private Sub cmbCriterio_KeyUp(ByVal KeyCode As MSForms _
.ReturnInteger, ByVal Shift As Integer)
If Not Pulsos > 0 Then Exit Sub
If KeyCode = vbKeyBack Then
If Pulsos > 0 Then Pulsos = Pulsos - 1
End If
With cmbCriterio
.
End Sub

Bueno, espero que mas o menos me hayais entendido. Si me podeis echar una
mano de nuevo, os lo agradezco.

Un saludo y hasta pronto.
Ivan

Preguntas similare

Leer las respuestas

#16 klomkbock
16/07/2006 - 18:01 | Informe spam
Hola Hector Miguel, muchas gracias de nuevo. Creo que entre Desastres
(disculpa por la mencion, 'Des') y yo, vas a poder llenar varias
enciclopedias de consultas extensas. Creo que yo me la compraria.

No he probado el nuevo codigo, pero no tengo ninguna duda que me vendra de
maravilla. Solo una anotacion como curiosidad. Incluyes dos instrucciones:

==>>cmbElegir.List = Worksheets("Listado").Range("a1:z1").Value
y

==>>lstSeleccionar.List = .Range("a1:d" & fFo).Value

que estoy practicamente seguro que ya he intentado con anteriridad sin
conseguir que dieran sus frutos (creo recordar que eran practicamente
calcadas), seguramente porque el entorno no era el adecuado. Voy a
intentar buscarlas y comparar, a ver si consigo entender las causas.

En cuanto a la coleccion, su uso esta intimamente ligado a la
espina/estaca de los filtros avanzados. Voy a ponerme a ello, a ver si
consigo cerrar del todo este capitulo, que me tiene un tanto estancado.

Si consigo cerrarlo(entendiendolo) posiblemente acabe la aplicacion en
breve, aunque he decidido empezar de cero, con los nuevos conocimientos
adquiridos a base de consultas y de errores.

En cualquier caso, seguro que nos vemos pronto por aqui.

Muchas gracias por todo y hasta pronto.
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida