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:
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
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.
Muchas gracias, es justo lo que necesitaba.
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
Publicar un comentario