Una vez me pidieron si era posible controlar los cambios que se realizan en un libro Excel sin que el usuario lo sepa, como siempre digo, es solo cuestión de tiempo, con Office y VBA se pueden hacer muchísimas cosas antes de llegar a un límite que difícilmente se alcanzará en un entorno ofimático normal, no hablamos de un ERP para gestionar un negocio de millones de euros ni de un videojuego de última generación, hablamos de ofimática, escribir, calcular y presentar, y para estos menesteres y para el común de los mortales las macros con VBA son más que suficiente.
Obviamente, Excel incorpora un sistema de control de cambios (p.e. aquí), pero además de ser más obvio para el usuario nos obliga a compartir el libro y nos puede limitar en ciertas funciones, pero por otro lado este método con VBA me provocó un problema importante y es que no se pueden deshacer los cambios, cada vez que se ejecuta código VBA la pila de deshacer (undo stack para los amigos) se vacía, y en este tipo de plantilla que se ejecuta VBA todo el rato es un problema, incluso los usuarios mas avezados se darán cuenta que algo sucede con la opción deshacer, desgraciadamente se tiene que decir aquello tan manido de: «no es un bug es una feature«, hay soluciones más o menos completas para parchear esta característica que pasan por hacer un copia del estado del libro antes de ejecutar la macro, pero como tampoco me acababa de gustar y no tenia tiempo no lo programé.
Entonces hay que valorar que queremos, deshacer las cosas o secretismo, como en este caso se trataba más de investigar sobre el mal uso de un archivo Excel la opción fue hacerlo mediante VBA.
Vamos a la cuestión
Nada más poner en marcha la plantilla nos solicitará que activemos las macros, una vez activadas nos mostrará la Hoja1 tal y como se ve en la segunda imagen siguiente.
Borraremos esta hoja base o la modificaremos para usarla como cualquier libro por ejemplo creamos una tabla y la modificamos
Presionando CTRL+SHIFT+L ejecutaremos la macro que nos mostrará la hoja de LOG y veremos en ella los cambios realizados
El LOG nos mostrará lo siguiente:
- Fecha en que se realizó el cambio.
- Ordenador y nombre de usuario del sistema en que se realizó el cambio.
- La acción realizada en concreto. Guarda lo siguiente:
- Se cambia el nombre de una hoja.
- Se borra una hoja
- Se crea una hoja
- Se cambia el contenido de una celda
- Se cambia el contenido de un rango
- Se guarda el libro
- Hoja afectada por el cambio.
- Rango afectado por el cambio.
- Columna y filas afectadas por el cambio.
- Valor anterior al cambio y el actual.
A tener en cuenta
- Usando esta plantilla se pierde la posibilidad de deshacer los cambios (ya lo he comentado más arriba en este mismo post)
- Hay una limitación en la cantidad de celdas individuales simultáneas de las que se pueden registrar los cambios. Es un parámetro que se puede modificar en el código fuente, por defecto es 500 celdas. Depende de la potencia del equipo poder poner más o menos. Si es superior simplemente nos indicará que hay un cambio en un rango completo.
- La contraseña para ejecutar la macro es «manteniendo»
- La contraseña para poder editar y visualizar el código VBA la puedes descargar si estás suscrito a mi blog.
- Puedes modificar la plantilla como te plazca, sólo te pido que respetes parte de la autoría del código. Vamos que me menciones si la distribuyes.
- Te vas a tener que inventar una excusa para que el usuario ejecute esta hoja con macros (o hacerlo un archivo de confianza antes de que se entere).
El archivo contiene:
- La plantilla en formato Excel 2010 para macros (.xlsm)
- Y si te da miedo también está sin macros (.xlsx) y con el código aparte en un archivo de texto, para que lo pegues tu mismo y veas que no hay nada raro en el código VBA.
Testeado únicamente en Excel 2013 32bit.
Si quieres poder editar el archivo, en el siguiente enlace tienes la contraseña para la hoja excel, para descargarla deberás estar suscrito a mi blog.
hola!! no consigo abrirla, me dice que la contraseña es incorrecta
Muchas gracias por compartir, sin pedir nada a cambio, esas son las cosas que valen la pena
Hola, esta muy buena la planilla, gracias por compartirla. Me gustaria saber como puedo cambiar la contraseña para mostrar las hojas ocultas. La busco en el código pero no esta, en las propiedades del libro hay unas contraseñas pero no estoy seguro que sea eso.
Hola amigo muy Buena aportacion y felicitaciones, solo una pregunta como puedo poner nuevamente funcionar la macros porque corro la marcros y no registra cambios.
Saludos
Hola, buenas tardes… felicitaciones por tu control de cambios, está bien útil.
Una consulta, tu comentas que el control de cambios de excel es super robusto, etc., pero al mismo tiempo mas arriba habías comentado que tiene varias limitantes, podrías decirnos a tu criterio cuales son esas limitantes?
hola me encanta tu trabajo, tengo una duda, como puedo reiniciar el control de cambios, es decir que se borren todos y vuelva a comenzar, agradeceria tu respuesta
Buenas tardes para ver el contenido de vba me pide clave cual es?
Hola, me encanta su blog, me parece sumamente útil.
En concreto esta plantilla está genial, solo quería preguntarle una cosa. En mi caso necesito el control de cambios para controlarme a mí mismo, no necesito que sea secreto, y además me sería muy útil que lo hiciese automáticamente sin tener que activar la macro cada vez. ¿Sabe si eso sería posible?
Gracias
Saludos