John se pregunta si hay una forma en VBA de identificar la última celda que fue cambiada por un usuario. No quiere saber si la celda fue cambiada por una macro, sino específicamente por un usuario.

La respuesta es sí, algo así. Puede usar el evento Worksheet_Change para escribir un controlador que registrará cuando se cambie cualquier celda en particular en una hoja de trabajo. Una macro que hace esto podría ser bastante simple, como esta:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.StatusBar = Target.Address End Sub

La macro simplemente coloca la dirección del último cambio en la barra de estado. Puede modificar la macro para que mantenga la dirección en una variable global (declarada fuera del controlador de eventos) de esta manera:

Dim sAddr As String

Private Sub Worksheet_Change(ByVal Target As Range)

sAddr = Target.Address(False, False)

End Sub

Luego, podría usar una macro normal para recuperar la dirección almacenada en la variable sAddr y hacer lo que quiera con ella.

En cuanto a asegurarse de que el controlador de eventos no registre ningún cambio realizado por macros, la única forma de hacerlo es desactivar el manejo de eventos antes de ejecutar cualquier comando de macro que modifique la hoja de trabajo. Por ejemplo, el siguiente cambio de propiedad EnableEvents podría usarse antes y después de un comando que cambia el contenido de la celda A1:

Application.EnableEvents = False Range("A1") = "Hello"

Application.EnableEvents = True

Con el manejo de eventos desactivado, el controlador de eventos Worksheet_Change no se activará y la dirección del «último cambio» no se actualizará. El resultado es que termina rastreando solo los cambios realizados por los usuarios, no los cambios realizados por las macros.

_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 (3819) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:

link: / excelribbon-Identifying_the_Last_Cell_Changed_in_a_Worksheet [Identificación de la última celda modificada en una hoja de trabajo].