Mostrar hoja dependiendo del usuario y contraseña ingresados en un Formulario de Excel vba

Mostrar hoja dependiendo del usuario y contraseña ingresados en un Formulario de Excel vba

En un tutorial anterior vimos cómo validar los datos de usuario y contraseña en un Formulario de Excel vba. En este tutorial usaremos el mismo archivo de ejemplo, pero haciéndole algunas modificaciones para hacerlo más funcional. Una de las modificaciones es asignarle una hoja de trabajo a cada usuario, permitiendo así que dependiendo el usuario que ingreses, sea la hoja que se mostrará. Si tu usuario es de nivel Administrador, entonces podrás visualizar todas las hojas, incluso la hoja de usuarios y contraseñas.

Otra de las modificaciones que le hicimos es que cada vez que el archivo se abre, se muestra el formulario para ingresar el usuario y la contraseña. Además de que al cerrar el archivo, se ocultarán todas las hojas, excepto la principal, y se guardará el archivo automáticamente.

Tabla de usuarios y contraseñas

Tenemos una hoja llamada Usuarios donde tendremos una tabla que contendrá los datos de NOMBRE, USUARIO, CONTRASEÑA y HOJA. En la columna HOJA irá el nombre de la hoja que será mostrará a cada usuario. Si nos fijamos en la Figura 1 vemos que en la columna HOJA tenemos la palabra TODAS; esto quiere decir que el usuario ADMIN podrá visualizar todas las hojas.

Tabla de usuarios y contraseñas.

Figura 1. Tabla de usuarios y contraseñas.

Ver video Mostrar hoja dependiendo del usuario y la contraseña

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Ejecutar macros al abrir y cerrar el archivo (Eventos VBA)

Al abrir el archivo llamaremos a una macro llamada OcultarHojas que se ejecutaré en el evento Workbook_Open para ocultar todas las hojas del archivo y mostraremos el formulario para ingresar los datos de acceso. La macro la encontraremos el el objeto ThisWorkbook.

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Private Sub Workbook_Open()
Call OcultarHojas
UserForm1.Show
End Sub

La macro OcultarHojas las podremos encontrar en el Módulo2.

Sub OcultarHojas()

Dim Hoja As Object

For Each Hoja In ActiveWorkbook.Sheets
    If Hoja.Name = "Principal" Then    
    Else    
        Hoja.Visible = xlVeryHidden
    End If
Next Hoja

End Sub

Al cerrar el archivo, para evitar que las hojas queden visibles, ejecutaremos el evento Workbook_BeforeClose o Antes de cerrar, para ejecutar la macro CerrarHojas y como dice el nombre, ocultaremos todas las hojas del archivo y luego guardaremos el archivo automáticamente.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Call OcultarHojas
ThisWorkbook.Save

End Sub

Formulario para ingresar usuario y contraseña

El formulario de acceso pedirá el Usuario y Contraseña, y se validará primero que el usuario exista, para luego validar la contraseña. Si el usuario y la contraseña coinciden, se mostrará la hoja correspondiente al usuario. En caso de haber ingresado los datos del usuario ADMIN, entonces todas las hojas se mostrarán.

Formulario de acceso con usuario y contraseña.

Figura 2. Formulario de acceso con usuario y contraseña.

Macro 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
'
Private Sub UserForm_Initialize()
FormDesign.FormDesign
'Call OcultarHojas
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 HojaVisible As String
Dim UsuarioExistente
Dim DatoEncontrado
Dim Rango As Range

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
        'Range("G2").Value = "Usuario: " & Usuarios.Range(DatoEncontrado).Offset(0, -1).Value
        
        '''''''''''''''''''''''''''''''''''''''''''''''
        HojaVisible = Usuarios.Range(DatoEncontrado).Offset(0, 2).Value
        
        If HojaVisible = "TODAS" Then
        
            Call MostrarHojas
        
        Else
            
            Call OcultarHojas
            ThisWorkbook.Sheets(HojaVisible).Visible = True
        
        End If
        '''''''''''''''''''''''''''''''''''''''''''''''
        'Aquí va el código para dar acceso a todo lo que el programador decida
        Unload Me
        
    Else
        
        MsgBox "La contraseña es inválida", vbExclamation, "EXCELeINFO"
    End If
End If

End Sub

La siguiente macro nos ayudará a mostrar todas las hojas en caso de que hayamos ingresado con el usuario ADMIN.

Sub MostrarHojas()

Dim Hoja As Object

Application.ScreenUpdating = False

For Each Hoja In ActiveWorkbook.Sheets
    If Hoja.Name = "Principal" Then    
    Else    
        Hoja.Visible = True
    End If
Next Hoja

Application.ScreenUpdating = True

End Sub

Diseño minimalista del formulario

Al ejecutar el formulario se ejecutará la macro FormDesign para darle un diseño minimalista al formulario. Para ver cómo funciona la macro FormDesign puedes visitar este video.

Descarga el archivo de ejemplo

Descargar el ejemplo Formulario de Usuario y contraseña para mostrar hoja por usuario – EXCELeINFO.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.

You may also like...