Como seria la condicion para el textbox

Hola expertos necesito de ayuda resulta que estoy ejecutando este código, y funciona bien perooo al estar el textbox1 vació (en blanco) y darle enter me lanza el famoso (error "13" en tiempo de ejecución no coinciden los tipos). ¿Alguien sabe porque?

Respuesta
1

No se ve el código, cópialo y pégalo para poder analizarlo.

Tu error ocurre por que el trata de evaluar el contenido de la textbox, cuando es numero no hay problema, pero cuando es otro tipo, por ejemplo una string("") da error, la mejor forma es usar un case. (Si pones el código te lo hago).
Sub t_keydown(...)
select case t.text
case ""

case 1

case 2

y luego de case pones el codigo a ejecutar.

hola Cristian saludo, el código es ese que esta en la imagen 

Cristian perfecto ya capte lo que me quieres decir, el error ya no aparece pero cual seria la condición cuan el textbox este vació y darle enter el foco no se mueva y se quede en ese mismo textbox? quise probar así pero arroja el foco al siguiente textbox

Select Case txt_ejem.Text
Case ""
If txt_ejem.Value = "" Then txt_ejem.SetFocus
Case 1
If txt_ejem.Value = 1 Then txt_gan1.SetFocus
Case 2
If txt_ejem.Value = 2 Then txt_gan2.SetFocus
Case 3
If txt_ejem.Value = 3 Then txt_gan3.SetFocus
End Select
End Sub

Tuve ese problema recientemente. No encontré respuesta clara en internet. Esto fue lo que hice:

Private Sub textbox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 and textbox1.text = ""  Then KeyCode = 0

End Sub

Esto te servirá para que no se mueva el foco siempre que la textbox este vacío, sino se moverá..

(colocalo en keydown)

igualmente podrias colocar esto en keydown de tu textbox:

Private Sub txt_ejem_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case txt_ejem.Text
Case ""
If txt_ejem.Value = "" and keycode = 13 Then keycode= 0
Case 1
If txt_ejem.Value = 1 Then txt_gan1.SetFocus
Case 2
If txt_ejem.Value = 2 Then txt_gan2.SetFocus
Case 3
If txt_ejem.Value = 3 Then txt_gan3.SetFocus
End Select
End Sub

1 respuesta más de otro experto

Respuesta
1

A tu macro solo agrega las líneas en negrita y listo

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
If TextBox1.Text = Empty Then GoTo salida
If TextBox1.Text = 1 Then TextBox2.SetFocus
If TextBox1.Text = 2 Then TextBox3.SetFocus

End If
salida:
End Sub

excelente tu respuesta  james bond pero en el caso de que quiero que el foco se quede en ese mismo textbox cual condición seria? ya que al darle enter con el textbox vació me cambia a otro textbox

Entonces copia este código

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1.Text = "" Then
Cancel = True
End If
End Sub

y al que ya tienes agrega las lineas en negrita
Private Sub TextBox1_Keydown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then

If TextBox1.Text <> "" Then
If TextBox1.Text = 1 Then TextBox2.SetFocus
If TextBox1.Text = 2 Then TextBox3.SetFocus
End If
End If

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas