Regresar el control a un texbox1 después de dar un ENTER

Vuelvo a colocar esta pregunta y espero no me lo bloqueen, por preguntar de nuevo.

Tengo un formulario en VBA Excel como el de la imagen, en el cual al escribir algo en textBox1 y darle ENTER, quiero que regrese el cursor de nuevo Al textBox1, ya que deseo ingresar un nuevo dato, pero no lo hace, sino que se coloca sobre el boton2, ya busque en todos los foros, vi videos y nada me funciona, me podrían decir que estoy haciendo mal.

2 Respuestas

Respuesta

Dani, yo de Excel no tengo ni idea, pero me da la impresión de que lo que tu llamas Toggle Button, es un botón de comando, y estos, normalmente "funcionan" en el evento Al hacer click o Al hacer doble click. Por ejemplo tengo un formulario con un cuadro de texto Texto 3 y escribo algo

Puedes ver que el cursor aún está en Texto3. Si pulso el botón

Puedes ver que el cursor ha desaparecido del cuadro de texto, porque ya no es el objeto activo y cuando pulso Aceptar

El cursor vuelve al cuadro de texto.

En mi caso, ya te digo que de Excel ni idea, le tengo puesto en el botón

Private Sub Comando1_Click()
MsgBox "Se ha realizado la prueba", vbOKOnly, "Voy a tener suerte·"
Texto3.SetFocus
End Sub

Hola Julián y gracias por el dato. Con el comando1_click funciona perfectamente bien, pero el detalle acá, es que yo necesito que al ingresar el dato y darle ENTER, ya no funciona, me pasa el control a un segundo botón que tengo. Mi fin es, en textBox1 colocar un dato, el cual al presionar ENTER, esa información que coloqué ahí se ingrese a una hoja de excel y después, el cursor vuelva a TextBox1. El problema acá es que con COMANDO1_CLICK funciona perfectamente, pero si lo hago con COMANDO1_ENTER, ya no funciona, me pasa el cursor al segundo botón, la idea es evitar el uso del mouse para hacer el ingreso más rápido.

Dany, ya te digo que de Excel ni idea, pero creo que estás confundido. No es lo mismo pulsar la tecla Enter que el evento OnEnter.

El evento Enter se produce antes de que un control reciba realmente el enfoque de un control del mismo formulario.

Pero cuando tu pulsas la tecla Enter, lo que estás haciendo, digamos, es dar conformidad a lo que has hecho o escrito en un control determinado. Y entonces entran en juego otro eventos. Por ejemplo, tengo un formulario con un sólo cuadro de texto donde escribo algo

Puedes ver que el cursor aún está en dicho cuadro de texto. En el momento que pulso la tecla Enter

Me aparece el mensaje que decías. Y en el momento que pulso Aceptar

El cursor se vuelve a donde estaba. En este caso, la instrucción que le pongo es

Private Sub Texto0_AfterUpdate()
MsgBox "Se ha realizado la prueba", vbOKOnly, "UN RESULTADO EXCELENTE"
Texto0.SetFocus
End Sub

Es decir, al pulsar la tecla, es como que doy por bueno lo hecho en Texto0 y que me muestre el mensaje y al aceptarlo vuelva a Texto0

Respuesta
1

Visita:

Cursos de Excel y Macros - YouTube


A qué te refieres con "quiero que regrese el cursor de nuevo Al textBox1".
¿Quieres escribir un dato en el textbox, presionar enter, que salga del textbox y después que regrese al mismo textbox?

O simplemente quieres que al presionar enter, no se salga del textbox para que sigas capturando, si es así, prueba esto:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then
    KeyCode = 0
  End If
End Sub

Si no es lo que necesitas, podrías explicar con más detalle qué necesitas.


Revisa los nuevos vídeos:

Función sumaproducto - YouTube

Sumaproducto con condicion en Excel - YouTube

Sal u dos Dante Amor

Hola Dante, lo que necesito, es escribir un dato en textBox1 y que al presionar ENTER, ingrese la información en una hoja de excel y que después me regrese el cursor al mismo textBox1, para ingresar otro dato, sin tener que utilizar el mouse, con 2 botones o 3, ya no funciona.

Tengo un programa hecho que hace esto, simplemente cierro el formulario y vuelvo a abrir, pero el problema con él, es que al ingresar más de 50 veces, se bloquea y ya no continúa, por tal razón estuve invenstigando sobre SetFocus, pero no me funciona ni siquiera con éste simple ejemplo que pongo arriba.

Pero ya te había respondido sobre ese tema.

Tu problema era que cerrabas el userform y después lo abrías.

Simplemente no lo cierres. No lo abras. Deja el userform sin cerrar y sin abrir.

Pon el siguiente código en tu userform.

Option Explicit
Dim PresionaEnter As Boolean
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  If PresionaEnter = True Then
    Cancel = True
  End If
  PresionaEnter = False
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then
    'pasar el dato a la hoja.
    Sheets("Hoja1").Range("B2").Value = TextBox1.Value
    TextBox1.Value = ""
    PresionaEnter = True
  End If
End Sub

La variable PresionaEnter debe ir al inicio de todo el código, es una variable global.

Con lo anterior no es necesario abrir y cerrar el userform.

Puedes capturar, presionas Enter, el dato pasa a la hoja, el texbox se limpia y regresa el cursor al texbox.

Para salir del texbox utiliza el mouse o la tecla tab.

Sal u dos Dante Amor

¡Gracias! Muchísimas gracias Dante, vi todas tus respuestas, pero mi error es no saber donde colocar cada instrucción, pero con el código que me pasas, quedó perfecto.  Muchas gracias por tu ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas