Regresar a la celda previa al seleccionar la celda que disparará un UserForm.

He implementado una celda en una hoja excel para que al seleccionarla me dispare un UserForm (actúe como botón) que me pedirá una clave de ingreso, entre otras cosas.

Lo que ocuparía sería : al seleccionar la "celda botón", en ese momento la dejase "lista" para volver a ser seleccionada, es decir, lo que deseo es que vuelva a la misma celda y en el mismo ScrollRow previos a la selección de la "celda botón".

Esto es básicamente lo que hasta ahorita he colocado en una Hoja Objeto :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = ""$E$5" Then

:
:
End If
Exit Sub

Perdón por no ser más explícito.

1 respuesta

Respuesta
1

Podrías utilizar una variable pública, definida al inicio de algún módulo, para regresar allí.

Public dire as String

Luego en tu rutina dale el destino con el Offset, en mi ejemplo se selecciona la de arriba.

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Target.Address = ""$E$5" Then
dire = target.address
'y al finalizar, cuando deba regresar será algo como:
Range(dire).Offset(-1,0).Select

"

Elsa, gracias por contestar

Procuraré ser ahora más explícito :

En realidad estoy trabajando con una lista de precios (excel, HOJA1 y HOJA2) que tiene la opción de mandar a un "formato de pedido" (Hoja2 oculta, que actúa como plantilla), dicho formato lleva FOLIO consecutivo.

Dentro de las opciones de la lista también está el poder cambiar FOLIO del pedido.

Todo esto está funcionando muy bien, sin embargo, al momento de regresar a la lista de precios (Hoja1) no supe como regresar a la misma posición (celda y scrollrow) que tenía justo antes de ir (seleccionar) a la "celda botón "E5" que efectúa el cambio de FOLIO.

Es decir, si por azar estaba en la celda "C9" antes de seleccionar, en este caso , "E5" (celda botón) entonces poder regresar a la "C9" (con la misma primera fila que tenia en la pantalla antes de ir a "E5").

Lo más que he logrado es lo que entendí me aconsejas, o sea:

------ESTE CÓDIGO VA EN LA HOJA1 COMO OBJETO------

If Target.Address = "$E$5" Then ' Esto hace la función de un botón de comando
Range("c9").Activate ' porque en este caso yo sé que la celda previa fue "C9"

:

:

End if

End Sub

Pero no es lo que quiero.

Pienso que, como la Variable (dentro del módulo) = ÚLTIMA posición, entonces me registraría la "E5" como la última posición, que de hecho así es. Por lo tanto el retorno dentro del formulario (o rutina) NO podría se Range(Variable).Select porque me regresaría a la "E5" y yo necesito regresar a la celda previa que es la "C9" (que por "azar" le tocó en ese momento ser la celda previa a la selección de la "celda botón" "E5").

Tal vez a primera vista lo vez un poco confusa la exposición, pero ténme un poco de paciencia y verás que no es tanto.

Siendo honesto, mii experiencia con macros es muy poca, sin embargo, he ido aprendiendo en base a consultar códigos que satisfagan las necesidades del momento. Por tal motivo te agradezco hayas atendido este correo y si en algo me puedes ayudar te estaré muy agradecido.

Leo.

Me queda claro y aquí va la respuesta según tu comentario:

Public celd
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$E$5" Then
 'tu macro
 'regresa
 Range(celd).Select
Else
 celd = Target.Address
End If
End Sub

Pero imaginemos esta situación:
Ingresas un dato en C9 y seleccionas la celda E5 que dispara tu macro.
Cuál es la celda anterior para vos? C9 ?
No señor. Porque si ingresaste un dato en C9 seguramente diste Enter y te moviste... ¿o no?

En ese caso necesitarás estas otras:

Public celd
Private Sub Worksheet_Change(ByVal Target As Range)
celd = Target.Address
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$E$5" Then
 'tu macro
 'regresa
 Range(celd).Select
End If
End Sub

Utiliza la que mejor se ajusta a tu modo de trabajo.

Sdos

Elsa

http://aplicaexcel.galeon.com/manuales.com

Elsa:

Había consultado tus repuestas a otras persona y siempre me parecieron muy claras y que procurabas simpleza.

Ahora que hago prácticamente mi primera consulta en este foro, compruebo con agrado que yo tenía razón.

La solución que me ofreces funcionó.

Muchas gracias

Leo.

Bien, no olvides entonces de finalizar la consulta. Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas