Usuarios con privilegios de insertar, eliminar y cambiar nombre a hojas en Excel usando macros VBA
En este tutorial les mostraré cómo podemos usar una macro con código VBA para definir si ciertos usuarios tienen privilegios para modificar la estructura de un archivo de Excel, sobre todo si se tienen privilegios para modificar lo referente a las hojas de un archivo de Excel:
-
Insertar hojas.
-
Eliminar hojas.
-
Cambiar nombre a hojas.
-
Mover hojas a otro archivo.
-
Proteger hoja.
-
Ocultar y mostrar hojas.
Proteger libro
La opción de la página Revisar > Proteger libro nos permite proteger la estructura de un archivo de Excel para no modificar las hojas que contiene un archivo de Excel. De manera opcional podemos asignar una contraseña.
Figura 1. Proteger libro para no modificar la estructura de las hojas.
Ver video Usuarios con privilegios para modificar estructura de un archivo de Excel
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Tabla de usuarios y Formulario de usuario y contraseña
Tenemos una Tabla donde contenemos el dato de usuarios, contraseñas y un campo que definimos como Modificar estructura para asignar un permiso a los usuarios de poder modificar la estructura de un archivo. Además contamos con un Formulario donde ingresamos un usuario y contraseña. Una vez que se validan los datos, se protege la estructura del archivo en caso de que en la Tabla de usuarios tenga el permiso.
Figura 2. Usuario y contraseña para definir si un usuario tiene privilegios de modificar un archivo.
Código VBA de la macro
En el siguiente código VBA definimos dos eventos, Workbook_Open para ejecutar una macro al abrir el archivo de Excel y Workbook_BeforeClose para ejecutar una macro al cerrar el archivo de Excel.
'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Private Sub Workbook_BeforeClose(Cancel As Boolean) ThisWorkbook.Save ActiveWorkbook.Protect psw, Structure:=True, Windows:=False End Sub Private Sub Workbook_Open() ActiveWorkbook.Protect psw, Structure:=True, Windows:=False UserForm1.Show End Sub
El siguiente es el código VBA del formulario,
Option Explicit
'
'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo
'
'Al iniciar el formulario
Private Sub UserForm_Initialize()
FormDesign.FormDesign
End Sub
'
'Botón Cerrar
Private Sub CommandButton1_Click()
Unload Me
End Sub
'Botón Validar
Private Sub CommandButton2_Click()
Dim usuario As String
Dim Contrasenia As Variant
Dim UsuarioExistente
Dim DatoEncontrado
Dim Rango As Range
Dim ModificarEstructura As String
UsuarioExistente = Application.WorksheetFunction.CountIf(Sheets("usuarios").Range("B:B"), Me.txtUsuario.Value)
Set Rango = Sheets("usuarios").Range("B:B")
'Validamos que se hayan introducido valores.
If Me.txtUsuario.Value = "" Or Me.txtPassword.Value = "" Then
MsgBox "Por favor introduce usuario y contraseña", vbExclamation, "EXCELeINFO"
Me.txtUsuario.SetFocus
'Se valida que el usuario exista en la tabla.
ElseIf UsuarioExistente = 0 Then
MsgBox "El usuario '" & Me.txtUsuario & "' no existe", vbExclamation, "EXCELeINFO"
'En caso de que el usuario exista, validamos su contraseña.
ElseIf UsuarioExistente = 1 Then
DatoEncontrado = Rango.Find(What:=Me.txtUsuario.Value, MatchCase:=False, LookAt:=xlWhole).Address
Contrasenia = CStr(Usuarios.Range(DatoEncontrado).Offset(0, 1).Value)
'Si el usuario y la contraseña coinciden...
If LCase(CStr(Usuarios.Range(DatoEncontrado).Value)) = LCase(Me.txtUsuario.Value) And Contrasenia = _
Me.txtPassword.Value Then
'En caso de que el usuario y la contraseña sean correctos
'''''''''''''''''''''''''''''''''''''''''''''
'Definimos si el usuario tiene privilegios para modificar la estructura de las hojas
ModificarEstructura = Usuarios.Range(DatoEncontrado).Offset(0, 2).Value
If ModificarEstructura = "NO" Then
ActiveWorkbook.Protect psw, Structure:=True, Windows:=False
ElseIf ModificarEstructura = "SI" Then
ActiveWorkbook.Unprotect Password:=psw
End If
'''''''''''''''''''''''''''''''''''''''''''''
Unload Me
Else
MsgBox "La contraseña es inválida", vbExclamation, "EXCELeINFO"
End If
End If
End Sub
Descarga el archivo de ejemplo
Permitir acciones a usuarios PROTEGER.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

