logo-excelNos gustaría hacer una macro que guarde un historial de las modificaciones que se vayan haciendo en la hoja. Que incluya, por ejemplo, la dirección de la celda, el dato que se haya escrito, y la fecha y la hora de modificación. Algo como el comando Historial, pero diseñado a nuestro gusto. ¿Es posible? ¿Cómo sería esa macro?

Es posible crear una macro que se ejecute automáticamente cada vez que cambia un valor en la hoja y que guarde los datos que pide Walter en la misma hoja o en un archivo externo. En este caso veamos cómo llevar a cabo la segunda alternativa. La macro sería más o menos así:

Private Sub Worksheet_Change(ByVal Target As Range)

Open “historia.txt” For Append As #1

If Target.Column = 1 Then

direccion = Target.Address

dato = Target.Value

Write #1, direccion, dato, Now

End If

Close #1

End Sub

Por tener el nombre especial Worksheet_ Change, esta macro se ejecuta automá­ticamente cada vez que cambia un dato cualquiera. Lo primero que hace es abrir el archivo de texto que hemos llamado “historia”. Luego verifica que la celda modificada pertenezca a la columna [A] (propiedad Column igual a 1). En caso afirmativo, guarda en variables adecua­das las coordenadas de la celda modi­ficada (propiedad Address) y su nuevo valor (propiedad Value), y graba todo en un registro del archivo historia, junto con la fecha y hora de la modificación, tomadas de la función Now.

Esta macro no se escribe en un módulo, sino en el código de una hoja. Para eso:

1. Tomamos las opciones [Herramientas/Macro/Editor de Visual Basic].

2. Una vez dentro del editor, tomamos las opciones [Ver/Explorador de pro­yectos].

3. Dentro del explorador, seleccionamos la rama correspondiente a la hoja cuyo historial se quiera construir.

4. Tomamos las opciones [Ver/Código]. Se abre la ventana de código de la hoja, con dos listas desplegables en la parte superior.

5. En la primera lista seleccionamos [Worksheet] y en la segunda [Change].

Esto escribe la primera y la última línea de la macro. Nosotros tenemos que comple­tar el código según se indica más arriba.

 

Con esta opción obtenemos la primera y la última línea de una macro que se ejecutará automáticamente cada vez que se modifique algún valor en la hoja.

 

Este archivo de texto fue creado por una macro que guarda la dirección de cada celda modificada dentro de la columna [A], el nuevo valor, y la fecha y hora de modificación.