Hojas de cálculo en Excel - página principal

Controlar los cambios en ficheros compartidos

Muchos de vosotros trabajáis en red, y compartís determinados ficheros que hay alojados en vuestro servidor (o en alguna carpeta compartida), con varios usuarios. A veces os interesa saber quien le ha "metido mano" al mismo, para depurar responsabilidades, o simplemente para tener constancia de todas aquellas personas que han aportado algo a la realización del trabajo conjunto. Todo esto lo podemos controlar en Excel 2003 seleccionando "Herramientas", y a continuación "Control de cambios", mientras que en Excel 2007 y 2010 tendremos que seleccionar la ficha "Revisar", y a continuación, "Control de cambios".

Para poder controlar esto prescindiendo del control de cambios propio de Excel, he creado un pequeño macro que se ejecutará justo unos instantes antes de salvar (o guardar) el fichero. El macro nos registrará el PC del usuario, y la fecha, y la hora en que ha guardado los cambios que haya introducido en el fichero. Todos estos cambios, se grabarán en una hoja oculta (en el ejemplo que podéis descargar al final de este artículo, se graba en la Hoja3). Esta hoja se hará visible antes de grabar los cambios, y se volverá invisible, una vez hayamos guardado los datos correspondientes a la persona que ha manipulado el fichero, pero en ningún momento la hoja será visible para el usuario.

El código que tenéis que copiar y pegar en ThisWorkbook (no en un módulo), es este:


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'*****************************************
'Pondremos la fecha de las modificaciones,
' antes de que se guarde el fichero
'*****************************************
'Ocultamos el procedimiento

Application.ScreenUpdating = False
'Mostramos la hoja3, que será donde grabaremos
'todos los datos de modificación del fichero

Hoja3.Visible = xlSheetVisible
'Seleccionamos la hoja3
Hoja3.Select
'Nos situamos en B4
Range("B4").Select
'Bajamos una fila, hasta encontrar una vacía
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
'Escribimos los datos, siempre y cuando las
'celdas donde escribiremos los datos, estén vacías

ActiveCell = Application.UserName
ActiveCell.Offset(0, 1) = Date
ActiveCell.Offset(0, 2) = Hour(Now) & "h. " & Minute(Now) & "m. " & Second(Now) & "s."
'Ocultamos la hoja3, donde hemos grabado
'todos los datos de modificación del fichero

Hoja3.Visible = xlSheetVeryHidden
'Pasamos a la hoja1
Hoja1.Select
'Mostramos el procedimiento
Application.ScreenUpdating = True
End Sub



4 comentarios:

Anónimo dijo...

De verdad que es muy interesante todo lo que cuentas, muchas gracias.
He aplicado estas instrucciones. Es genial pero para completar un buen trabajo requeriría registrar los cambios que se han producido en la hoja. Imagino que es complicado pero ¿es posible?
Gracias

Javier Marco dijo...

Desde el menú Herramientas, puedes compartir y combinar libros para u uso por parte de varios usuarios.

Aparte de eso, sí que puedes controlar los cambios, a través del sistema que ya implementa Excel. Lo primero que tienes que hacer es guardar el fichero, luego te vas a Herramientas --> Control de cambios --> Resaltar cambios. Marcas todos los usuarios, y fechas, y fíjate en la muesca de abajo, por si quieres que resalte los cambios al estilo de los comentarios de excel (pero en la esquina contraria), o por si quieres que te los presente en una nueva hoja de cálculo.

Así podrás saber quien y cuando hizo los cambios.

Anónimo dijo...

Muchas gracias, es justo lo que necesitaba.

mpueyosa dijo...

Tu página es excelente y extremadamente útil. Se ve que eres un experto. Espero puedas aclararme esta pregunta: He comprobado que si abres un archivo excel con el Calc de Open Office, el proyecto VBA puede verse sin problemas aunque está protegido desde excel con contraseña. ¿Hay alguna manera de evitar esto?. Muchas gracias y un saludo