Código para pasar de una celda a otra con un ENTER o retroceder a la celda anterior con TAB

Ok, como dice la pregunta en el encabezado esto es lo que tengo...

Estas son las celdas de captura (B1, C2, D3) ejemplo:

.........A................B.............C................D......
1 NOMBRE:...LUIS
2 ... COLOR:...ROJO
3 ... ... PUNTOS:...78


Lo que ocupo aquí es que al estar en B2 y darle enter automáticamente se vaya a la siguiente celda de captura que seria C2, y al estar en C2 al darle enter automáticamente se vaya a la celda D3, y lo mismo aplicado para la tecla TAB pero en caso de que sea TAB, entonces coloque en la celda de Captura anterior.

¿Es posible?

1 respuesta

Respuesta
3

Estas son las macros que necesitas, te explico:

La siguiente macro la tienes que copiar en el objeto hoja que estás tratando (en tu caso creo que será hoja1) ya que es un evento y se autoejecutará cuando modifiques las celdas B2 y C2

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
Target.Offset(1, 1).Select
End If
If Target.Address = "$c$2" Then
Target.Offset(1, 1).Select
End If
End Sub

Las siguientes dos macros las tienes que copiar en un módulo y después de copiarlas ejecuta la macro llamada: tecla

Sub tecla()
Application.OnKey "{TAB}", "tabulador"
End Sub
Sub tabulador()
On Error Resume Next
ActiveCell.Offset(-1, -1).Select
End Sub

Después ya puedes hacer las pruebas en tu hoja de trabajo.

Recuerda finalizar

Ok, he seguido los pasos copiando la primer parte en el código de la hoja 1, y copiando las otras dos macros a un modulo, y ejecutando la macro tecla.

Private Sub Worksheet_Change(ByVal Target As Range)

a pesar de que copie esta macro tal y como la enviaste desconozco porque macro no realiza ninguna función, tomando en cuenta que la coordenada es (1,1) (fila,columna), entiendo que con esto al dar un enter sobre la celda a afectar debe de moverse a la fila y columna siguiente pero en realidad solo se desplaza hacia abajo

por otra parte la macro de tecla y la de tabulador están funcionando según lo que me enviaste, mas y sin embargo creo que no me explique muy bien en mi ejemplo, asi que haré un ejemplo nuevo desde cero.

ejemplo

celdas a modificar en ese orden de consecutivo

A10

C10

A15

E16

B17

en caso de presionar tecla ENTER

* CELDA

* A10 (al dar ENTER, debe irse a la SIGUIENTE celda de captura de datos que es C10)

* C10 (al dar ENTER, debe irse a la SIGUIENTE celda de captura de datos que es A15)

* A15 (al dar ENTER, debe irse a la SIGUIENTE celda de captura de datos que es E16)

* E16 (al dar ENTER, debe irse a la SIGUIENTE celda de captura de datos que es B17)

* B17 (aquí no debe de pasar nada ya que es la ULTIMA celda de captura)

en caso de presionar tecla TAB

* CELDA

* A10 (aquí no debe de pasar nada ya que es la PRIMERA celda de captura)
* C10 (al dar TAB, debe irse a la ANTERIOR celda de captura de datos que es A10)
* A15 (al dar TAB, debe irse a la ANTERIOR celda de captura de datos que es C10)
* E16 (al dar TAB, debe irse a la ANTERIOR celda de captura de datos que es A15)

* B17 (al dar TAB, debe irse a la ANTERIOR celda de captura de datos que es E16)

espero haberme explicado mejor con este ejemplo nuevo,

nuevamente muchas gracias Luis

Te mando un vídeo en el siguiente link para explicarte como funciona:

http://es.tbox.ws/2AZEWK

Por favor recuerda finalizar la consulta

OK, ya abrí el video pero aquí donde estoy no lo puedo escuchar, no se si el video pueda durar ahi hasta mañana para poder verlo con audio o si acaso se pudiera descargar

El vídeo sigue disponible.

Recuerda finalizar la consulta

Hola Luis Buen Dia, he revisado el video que me has enviado y efectivamente lo de la tecla de ENTER ya esta funcionando Muchas gracias, con esto puedo avanzar a la celda que yo quiera, solo que en este ejemplo de macro que me has enviado funciona de acuerdo a coordenadas (fila,columna), como puedo hacer para que me lleve a una celda en especifico poniendo dentro de la macro el nombre de la celda a la cual quiero que me lleve con cada enter. (como en el ejemplo que viene mas adelante)

La segunda cuestión: veo que también la macro para usar el TAB, funciona muy bien es solo que asi como esta la macro es funcional solamente para coordenada fija y específicamente en el caso de la macro que me has enviado por cada TAB retrocede (1 fila y 1 columna), es posible que por cada TAB retroceda a la celda que yo le especifique dentro de la macro, como el ejemplo de abajo, te lo agradecería bastante si pudieras ayudarme a resolver el siguiente ejemplo.

ejemplo
celdas a modificar en ese orden de consecutivo
A10
C10
A15
E16
B17
en caso de presionar tecla ENTER
* CELDA
* A10 (al dar ENTER, debe irse a la SIGUIENTE celda de captura de datos que es C10)
* C10 (al dar ENTER, debe irse a la SIGUIENTE celda de captura de datos que es A15)
* A15 (al dar ENTER, debe irse a la SIGUIENTE celda de captura de datos que esE16)
* E16 (al dar ENTER, debe irse a la SIGUIENTE celda de captura de datos que es B17)
* B17 (aquí no debe de pasar nada ya que es la ULTIMA celda de captura)
en caso de presionar tecla TAB
* CELDA
* A10 (aquí no debe de pasar nada ya que es la PRIMERA celda de captura)
* C10 (al dar TAB, debe irse a la ANTERIOR celda de captura de datos que es A10)
* A15 (al dar TAB, debe irse a la ANTERIOR celda de captura de datos que es C10)
* E16 (al dar TAB, debe irse a la ANTERIOR celda de captura de datos que es A15)
* B17 (al dar TAB, debe irse a la ANTERIOR celda de captura de datos que es E16)

espero haberme explicado mejor con este ejemplo nuevo,

Sin mas por el momento te agradezco todas tus atenciones.

En ese caso las macros son estas con las mismas instrucciones que te mandé anteriormente:

Este es el evento change para copiar al objeto hoja en cuestión:

Private Sub Worksheet_Change(ByVal Target As Range)If Target.Address = "$A$10" ThenTarget.Offset(0, 2).SelectExit SubEnd IfIf Target.Address = "$C$10" ThenTarget.Offset(5, -2).SelectExit SubEnd IfIf Target.Address = "$A$15" ThenTarget.Offset(1, 4).SelectExit SubEnd IfIf Target.Address = "$E$16" ThenTarget.Offset(1, -3).SelectExit SubEnd IfIf Target.Address = "$B$17" ThenTarget.Offset(0, 0).SelectExit SubEnd IfEnd Sub

Estas son las dos hojas para copiar en un módulo y hay que ejecutar antes de nada la macro: tecla

Sub tecla()Application.OnKey "{TAB}", "tabulador"End SubSub tabulador()On Error Resume NextIf ActiveCell.Address = "$B$17" ThenActiveCell.Offset(-1, 3).SelectExit SubEnd IfIf ActiveCell.Address = "$E$16" ThenActiveCell.Offset(-1, -4).SelectExit SubEnd IfIf ActiveCell.Address = "$A$15" ThenActiveCell.Offset(-5, 2).SelectExit SubEnd IfIf ActiveCell.Address = "$C$10" ThenActiveCell.Offset(0, -2).SelectExit SubEnd IfEnd Sub

Parece que se han copiado mal las macros en la web repito:

Private Sub Worksheet_Change(ByVal Target As Range)
'por luismondelo
If Target.Address = "$A$10" Then
Target.Offset(0, 2).Select
Exit Sub
End If
If Target.Address = "$C$10" Then
Target.Offset(5, -2).Select
Exit Sub
End If
If Target.Address = "$A$15" Then
Target.Offset(1, 4).Select
Exit Sub
End If
If Target.Address = "$E$16" Then
Target.Offset(1, -3).Select
Exit Sub
End If
If Target.Address = "$B$17" Then
Target.Offset(0, 0).Select
Exit Sub
End If
End Sub

Sub tecla()
'por luismondelo
Application.OnKey "{TAB}", "tabulador"
End Sub
Sub tabulador()
'por luismondelo
On Error Resume Next
If ActiveCell.Address = "$B$17" Then
ActiveCell.Offset(-1, 3).Select
Exit Sub
End If
If ActiveCell.Address = "$E$16" Then
ActiveCell.Offset(-1, -4).Select
Exit Sub
End If
If ActiveCell.Address = "$A$15" Then
ActiveCell.Offset(-5, 2).Select
Exit Sub
End If
If ActiveCell.Address = "$C$10" Then
ActiveCell.Offset(0, -2).Select
Exit Sub
End If
End Sub

PERFECTO ESTA FUNCIONANDO MUY BIEN, Muchas gracias Luis, ya por ultimo tengo una pregunta mas:

me doy cuenta de que la macro de Private Sub Worksheet_Change(ByVal Target As Range), funcióna siempre y cuando yo modifique la celda pero si estoy posicionado en la celda y no la he modificado y le doy enter la macro no se ejecuta, hay algo que se pueda hacer para que cambie de celda a la celda siguiente de captura según los ejemplos ya antes mencionados sin que yo haya modificado nada en la celda? o mejor dicho si la modifico o no y le doy enter que se vaya a la siguiente celda de captura?

osease que el ENTER funcione igual que como funciona el TAB, me refiero a que el TAB funciona aun y cuando no he modificado la celda.

o existe la forma de hacer un par de Macros pero para tecla ENTER, asi como la tecla TAB, algo asi como:

Sub tecla_enter()
'por luismondelo
Application.OnKey "{ENTER}", "tclenter"
End Sub

Sub tclenter()
'por luismondelo
On Error Resume Next...

es posible?

Te ofrezco una alternativa que es muy rápida:

Cuando estés en una de esas celdas y quieras pasar a la siguiente sin modificarla simplemente haz doble click sobre ella

Es correcto lo que mencionas del doble click eso sirve, mas y sin embargo mi interés sobre estas macros era precisamente no usar el mouse para moverme de una celda a la otra, me imagino por lo que me contaste al final respecto al doble click y por tu experiencia en excel que tal vez esta opción de cambiar de una celda a la otra con la tecla ENTER y sin modificar dicha celda tal vez no se pueda realizar. Te agradezco mucho todo tu tiempo para ayudarme a solucionar mis dudas.

También tengo solución para eso. En este caso vamos a prescindir de la macro del evento esa la puedes borrar y te quedas con solo estas que irán todas en un módulo:

Siempre hay que ejecutar primero la macro tecla y después lo tienes todo preparado para trabajar.

Sub tecla()
'por luismondelo
Application.OnKey "{TAB}", "tabulador"
Application.OnKey "~", "intro"
End Sub
Sub tabulador()
'por luismondelo
On Error Resume Next
If ActiveCell.Address = "$B$17" Then
ActiveCell.Offset(-1, 3).Select
Exit Sub
End If
If ActiveCell.Address = "$E$16" Then
ActiveCell.Offset(-1, -4).Select
Exit Sub
End If
If ActiveCell.Address = "$A$15" Then
ActiveCell.Offset(-5, 2).Select
Exit Sub
End If
If ActiveCell.Address = "$C$10" Then
ActiveCell.Offset(0, -2).Select
Exit Sub
End If
End Sub
Sub intro()
On Error Resume Next
'por luismondelo
If ActiveCell.Address = "$A$10" Then
ActiveCell.Offset(0, 2).Select
Exit Sub
End If
If ActiveCell.Address = "$C$10" Then
ActiveCell.Offset(5, -2).Select
Exit Sub
End If
If ActiveCell.Address = "$A$15" Then
ActiveCell.Offset(1, 4).Select
Exit Sub
End If
If ActiveCell.Address = "$E$16" Then
ActiveCell.Offset(1, -3).Select
Exit Sub
End If
If ActiveCell.Address = "$B$17" Then
ActiveCell.Offset(0, 0).Select
Exit Sub
End If
End Sub

recuerda finalizar

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas