2010-04-26 21 views
6

Tengo un formulario de VBA (en Excel si eso importa) que contiene cuadros de texto.Clave de tabulación de VBA que coloca el valor de tabulación real en el cuadro de texto en lugar de navegar al siguiente control

En tres ocasiones, me he encontrado presionando la tecla tab para navegar al siguiente control, pero en su lugar se está colocando una TAB real en el cuadro de texto.

El formulario normalmente funciona como debería, pero me preocupa que este gremlin se muestre esporádicamente.

Aparece en Office 2003 y en Office 2007 en dos equipos diferentes.

¿Alguien más ha encontrado este problema y, de ser así, cómo lo solucionó?

+0

que he visto un comportamiento similar de vez en cuando sin solución obvia. El cierre y la reapertura de Excel generalmente lo corrige, pero eso no es exactamente lo ideal – barrowc

+0

acordado. En las tres instancias que presencié, los siguientes métodos lo arreglaron: 1. Haga clic en un botón de comando y regrese al cuadro de texto. (Esta fue la primera vez que vi este comportamiento y sucedió mientras mi cliente estaba dando una demostración a sus empleados. Me miró con desconcierto y no tenía idea de cómo solucionarlo porque no lo había visto antes. un poco embarazoso.). Curiosamente, me ha sucedido dos veces desde esa demostración. 2. Mayús + Tabulador para ir al control anterior 3.Cierre y vuelva a abrir el formulario – ray

+0

@tmdean ¿Puede mostrar el código detrás del formulario y el cuadro de texto para ver qué está sucediendo? – JimmyPena

Respuesta

2

que era capaz de reproducir el problema del 100% de las veces con el lanzamiento de Excel, tirando hacia arriba de inmediato la forma, y ​​manteniendo pulsada la tecla de tabulación.

Si cambio algún código en el formulario y vuelvo a guardar el libro, el problema desaparece. Voy a atribuir esto a un error de compilación de fluke dentro de VBA.

+2

Seguí tus instrucciones y también se reprodujo. Excelente descubrimiento, mi amigo! Marcado como respuesta ya que conocemos la causa y cómo corregirla. Por cierto, me gusta la foto de perfil; me recuerda los días de matar manchas rojas y azules para ganar el favor de las mujeres sexys y sus vestidos de 8 bits. – ray

0

Establezca la propiedad TabKeyBehavior en False para obtener el comportamiento "Tab salta al siguiente campo".

+0

Hmmm ... está configurado en False de forma predeterminada. Hice una búsqueda rápida en ese nombre de propiedad y encontramos este mensaje: http://www.mrexcel.com/forum/showthread.php?t=44922 tenía el siguiente código snippit sugerencia: Private Sub UserForm_Initialize() Dim Ctl como control Para Cada CTL en UserForm1.Controls MsgBox TypeName (CTL) Select Case TypeName (CTL) Caso "Cuadro de texto" Ctl.TabKeyBehavior = False End Select Siguiente Ctl End Sub Lo intentaré y veré si funciona. Ty para una respuesta rápida. – ray

+0

@ray: Este código no hace nada más que establecer la propiedad en 'False' para todos los cuadros de texto. Eso no es nada que no puedas hacer en el diseñador, entonces, ¿por qué usarlo? – Tomalak

+1

Porque cuando algo no funciona y has probado la ruta lógica ... a veces tienes que probar algo ilógico para ver si puedes hacer que funcione. Su sugerencia fue útil, pero no aplicable. – ray

1

Creé un formulario con tres cuadros de texto. Ingresé caracteres y tabulé en el siguiente por algún tiempo sin poder duplicar tu problema.

La única manera en que puedo obtener una pestaña en el cuadro de texto es ingresando Ctrl + Tab. Esto puede ser vergonzoso, pero el retroceso lo elimina por lo que no es un problema importante. ¿Es posible que estés presionando accidentalmente Ctrl al mismo tiempo?

Encuentro ocasionalmente que si presiono una tecla, el cursor salta a otro lugar en la pantalla. No estoy muy seguro de lo que quiero decir con "mala impresión"; parece ser algo relacionado con presionar dos teclas a la vez. Esta parece ser una característica de los teclados modernos y cómo detectan qué tecla se ha pulsado porque la he encontrado en muchas computadoras diferentes. La implicación es que al presionar mal una tecla, se genera un carácter de control (tal vez tabulador o Ctrl + tabulador).

También probé lo siguiente que funcionó y oculta el problema al quitar la pestaña y pasar al siguiente control.

Private Sub TextBox1_Change() 

    If InStr(1, TextBox1.Text, Chr(9)) <> 0 Then 
    TextBox1.Text = Replace(TextBox1.Text, Chr(9), "") 
    TextBox2.SetFocus 
    End If 

End Sub 
+0

Gracias por mirarlo. – Tmdean

1

Como solución rápida, utilice este código en el evento Salir del control.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    TextBox1.Text = VBA.Replace(TextBox1.Text, VBA.Chr(9), "") 
End Sub 
0

Esto podría resolver el problema:

Public Sub MoveFocusToNextControl(xfrmFormName As UserForm, _ 
xctlCurrentControl As control) 

Dim xctl As control 
Dim lngTab As Long, lngNewTab As Long 

On Error Resume Next 

' Move focus to the next control in the tab order 
lngTab = xctlCurrentControl.TabIndex + 1 
    For Each xctl In xfrmFormName.Controls 
     lngNewTab = xctl.TabIndex 
     ' An error will occur if the control does not have a TabIndex property; 
     ' skip over those controls. 
     If Err.Number = 0 Then 
      If lngNewTab = lngTab Then 
       xctl.SetFocus 
       Exit For 
      End If 
     Else 
      Err.Clear 
     End If 
    Next xctl 
Set xctl = Nothing 
Err.Clear 
End Sub 
Cuestiones relacionadas