John tiene una macro que procesa varias hojas de trabajo en un libro. Quiere, al comienzo de la macro, guardar el rango de celdas (o la celda única) que el usuario ha seleccionado. Utiliza ActiveCell.Address para determinar esto. Luego, al final de la macro, quiere regresar al usuario con el mismo rango seleccionado que originalmente había seleccionado.

El problema es que la macro podría terminarse en una hoja de trabajo completamente diferente a donde comenzó el usuario, y ActiveCell.Address solo da una dirección de celda, no un nombre de hoja de trabajo y definitivamente no un rango. John se pregunta cuál es la mejor forma de almacenar lo que necesita para poder volver a la ubicación original del usuario al final de la macro.

Para tener la mejor oportunidad de que alguien vuelva al punto de partida, hay tres elementos: libro de trabajo, hoja de trabajo y celda. En realidad, este último elemento (celda) puede ser un poco simplista, ya que el usuario siempre tendrá una celda seleccionada (esto es lo que devuelve ActiveCell.Address), pero además puede tener un rango seleccionado.

Así es como obtienes los cuatro elementos:

Dim rngOrigSelection As Range Dim rngOrigCell As Range Dim sOrigWS As String Dim sOrigWB As String

Set rngOrigSelection = Selection Set rngOrigCell = ActiveCell sOrigWS = ActiveSheet.Name sOrigWB = ActiveWorkbook.Name

Cuando más tarde desee devolver al usuario a donde estaba, puede utilizar este tipo de código:

Workbooks(sOrigWB).Activate Sheets(sOrigWS).Select rngOrigSelection.Select rngOrigCell.Activate

Por supuesto, Excel siempre tiene varias formas de realizar una tarea determinada. En este caso, puede acortar su código recordando solo la celda activa y el rango seleccionado:

Dim rngOrigSelection As Range Dim rngOrigCell As Range

Set rngOrigSelection = Selection Set rngOrigCell = ActiveCell

Cuando desee restaurar al usuario a la ubicación, confíe en el objeto principal disponible en VBA:

rngOrigSelection.Parent.Parent.Activate rngOrigSelection.Parent.Select rngOrigSelection.Select rngOrigCell.Activate

El objeto principal del rango de selección que guardó es la hoja de trabajo en la que se encuentra ese rango, y el objeto principal de ese objeto principal es el libro de trabajo en el que se encuentra la hoja de trabajo.

Otro enfoque es simplemente crear, dentro de su macro, un rango con nombre que se refiere a lo que haya seleccionado el usuario:

ActiveWorkbook.Names.Add Name:="MyOrigPlace", RefersTo:=Selection

Después de realizar su procesamiento, cuando esté listo para volver a lo que el usuario había seleccionado, use este código:

Application.Goto Reference:="MyOrigPlace"

ActiveWorkbook.Names("MyOrigPlace").Delete

La primera línea regresa a la selección y la segunda línea luego elimina el rango con nombre. El único inconveniente de este enfoque es que no se retiene la celda activa; el código asume que desea que la celda superior izquierda del rango sea la celda activa cuando haya terminado. También debe tener en cuenta que si su procesamiento elimina las celdas que componen el rango con nombre, es posible que el código no funcione correctamente; Excel no puede ir a un lugar que ya no existe.

Por supuesto, es posible que no tenga que recordar ninguna ubicación en absoluto, si codifica su macro correctamente. Si bien VBA le permite «moverse» y seleccionar diferentes áreas de sus hojas de trabajo y libro de trabajo, en la mayoría de los casos esto no es necesario. Por ejemplo, podría simplemente trabajar con diferentes rangos y luego hacer su trabajo en esos rangos, sin cambiar la selección actual o la celda activa. De hecho, VBA le permite cambiar, reformatear, ordenar, eliminar y hacer casi cualquier cosa que pueda imaginar en las celdas sin necesidad de seleccionarlas.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (6161) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:

link: / excel-Storing_a_Users_Location_before_Running_a_Macro [Almacenamiento de la ubicación de un usuario antes de ejecutar una macro].