Macro para registrar los usuarios de un Excel

En el ejemplo de hoy vamos a explicar como registrar los usuarios de un Excel. Esta herramienta nos va a permitir registrar el nombre del usuario además de la fecha y la hora en la que se abrió el archivo.

Cómo registrar usuarios de Excel que modifiquen un archivo

Para explicar como podemos registrar y proteger el nombre de los usuarios que modifican un archivo así como la fecha y la hora en que lo hacen hemos creado dos ejemplos. En el primer ejemplo vamos a explicar como registrar los datos y en el segundo ejemplo vamos a explicar como proteger la hoja para que esa información no pueda ser borrada por ningún usuario.

Ejemplo 1: Registar Usuarios, Fecha y Hora

Como ya hemos explicado en artículos anteriores, la ejecución de esta macro puede estar vinculada a la ocurrencia de un evento. El evento que hemos seleccionado en nuestro ejemplo es abrir el archivo. Es decir, cada vez que se abra el archivo se ejecutará la macro. Esta macro resgistrará en una lista el nombre del usuario y la fecha y hora en la que se abrió el archivo.

Obviamente esta información solo quedará guardada si el usuario que abre el archivo después lo vuelve a guardar. Si un usuario abre el archivo pero no lo guarda esa información no quedará registrada.

Para crear una macro vinculada a un evento que afecta a todo el archivo como es abrirlo (y no a un evento de una hoja en particular como es seleccionar una celda) tenemos que hacer lo siguiente:

  • Primero vamos a abrir Editor de Visual Basic (VBE)
  • En la ventana de la izquierda vamos a seleccionar “ThisWorkbook”

crear una macro en excel

  • En la pestaña desplegable superior izquierda vamos a seleccionar “Workbook”

  • En la pestaña desplegable superior derecha vamos a seleccionar “Open”

crear un evento en vba

El código de iniciación nos aparecerá automáticamente en la pantalla de código de VBE. Nuestro código completo se muestra a continuación:

Private Sub Workbook_Open()
Dim i As Integer
i = Worksheets("Sheet1").Cells(rows.count, 1).End(xlUp).Row + 1
Worksheets("Sheet1").Cells(i, 1) = Environ("Username")
Worksheets("Sheet1").Cells(i, 2) = Date
Worksheets("Sheet1").Cells(i, 3) = Time
End Sub

En el código que se muestra arriba hemos definido una variable “i” a la que hemos asignado el número de la primera fila libre en la columna 1 ó “A”. Para encontrar la primer fila libre en la columna “A” hemos seleccionado la última fila en la columna “A” (el máximo número de filas es 1.048.576 para Excel 2010 y las versiones superiores pero no necesitamos saberlo porque podemos usar el truco de poner Rows.Count que devuelve el número que antes te decía). Una vez seleccionado la última fila le pedimos que vaya hacia arriba, End(xlUp), hasta la primera celda que encuentre ocupada. Este método funciona de manera similar a cuando pulsamos Ctrl +”una flecha de dirección” en un documento de Excel.

Una vez encontrada la última celda ocupada en la tabla le sumamos uno y obtenemos la primera celda libre. Después simplemente asignamos el nombre de usuario a la primera columna, la fecha a la segunda y la hora a la tercera.

Ejemplo 2:  Registrar Usuarios de Excel y Proteger la Tabla

En este ejemplo vamos a explicar como proteger la tabla para que no se pueda modificar los usuarios que realicen cambios en el archivo y después lo guarden. La manera de hacer eso es crear la tabla en una hoja aparte. En nuestra hoja (ejemplo descargable al final del artículo) vamos a crear nuestra tabla con los encabezados en la primera fila y la vamos a proteger con la contraseña “123”.

El código de nuestra macro es igual al anterior pero con dos comandos añadidos. Uno al principio que desprotege la hoja y otro al final que la vuelve a proteger. El código es el siguiente:

Private Sub Workbook_Open()
 Dim i As Integer
 Worksheets("Sheet1").Unprotect ("123")
 i = Worksheets("Sheet1").Cells(rows.count, 1).End(xlUp).Row + 1
 Worksheets("Sheet1").Cells(i, 1) = Environ("Username")
 Worksheets("Sheet1").Cells(i, 2) = Date
 Worksheets("Sheet1").Cells(i, 3) = Time
 Worksheets("Sheet1").Protect ("123")
 End Sub

Estos comandos son muy sencillos simplemente tenemos que escribir Protect ó Unprotect seguido de la contraseña entre paréntesis. Cómo es lógico cualquier persona que tenga un conocimiento medio de Excel podrá abrir VBE y ver la contraseña escrita en el código. Para evitar esto lo que tenemos que hacer es proteger el código también y así nadie podrá ver la contraseña escrita.

Para proteger una macro tenemos que ir a VBE >> Tools >> Propiedades de VBAProject. En la ventana que se nos abre hacemos click en Protección y activamos “Bloquear proyecto para visualización”. En los campos de abajo intoducimos la contraseña.

Esta protección sera efectiva una vez cerremos y volvamos a abrir el documento de Excel.

proteger un excel con vba

 

Cabe mencionar que el grado de protección que ofrecen la contraseñas en Excel son bajos y que una persona con unos conocimientos informáticos relativamente avanzados es probablemente capaz de saltarse estas contraseñas.

Bonus track: Descarga estos ejemplos

Ya se que estos ejemplos son muy golosos. Por eso te los dejo aquí para que te los puedas descargar y probar tú tranquilamente en tú ordenador.

Me llamo Ignacio Laquidain y estudié Ingeniería de Caminos en la Universidad Politécnica de Madrid. En la actualidad resido y trabajo en California.
La razón por la que aprendí Excel y VBA (y sigo aprendiendo) fue para evitar hacer trabajos rutinarios y rehacer cálculos de manera innecesaria. Pienso que cualquier trabajo repetitivo, por muy complicado que sea, es capaz de programarse.
Mucho de lo que he aprendido ha sido gracias a gente que desinteresadamente responde dudas en internet, cuelga tutoriales, comparte ejemplos etc. y esta es mi manera de continuar la cadena.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información ACEPTAR

Aviso de cookies
Shares
Share This