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
Leer las respuestas