Mostrar varias hojas en Excel dependiendo del usuario ingresado en un Formulario VBA

Mostrar varias hojas dependiendo del usuario y contraseña ingresado un Formulario de Excel vba

En un tutorial anterior vimos cómo Mostrar una hoja de Excel dependiendo el usuario y contraseña ingresados. En los comentarios de Youtube recibí una pregunta que se repitió en varias ocasiones, y esa pregunta es Cómo podemos hacerle para asignarle diferentes hojas a mostrar a cada usuario.

Es por eso que decidí modificar el archivo para cambiarle la lógica a la macro VBA y ahora poder definir cuál o cuáles hojas se podrán mostrar por usuario logueado en nuestro archivo de Microsoft Excel.

Tabla de usuarios, contraseñas y hojas

Tenemos una Tabla en Excel donde almacenamos los valores de NOMBRE USUARIO, USUARIO, PASSWORD, HOJAS. Se tiene una columna por cada hoja que haya en nuestro archivo de Excel. Si observamos en la Figura 1, cada columna correspondiente a cada hoja tiene especificado SI o No. Eso significa que indicaremos por cada usuario, qué hojas tendrá visibles al introducir sus datos de login y contraseña.

Matriz de usuarios y nombres de hojas para mostrar las que serán visibles por usuario.

Figura 1. Matriz de usuarios y nombres de hojas para mostrar las que serán visibles por usuario.

Ver video Mostrar varias hojas por usuario

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

Ingresando credenciales de usuario en Formulario VBA

Usaremos el mismo Formulario que diseñamos para introducir las credenciales del usuario. Al dar clic en Aceptar se mostrarán las hojas que previamente hayamos definido como visibles para el usuario.

Ingresamos las credenciales de un usuario para mostrar las hojas permitidas.

Figura 2. Ingresamos las credenciales de un usuario para mostrar las hojas permitidas.

Entendiendo la lógica del archivo y las macros VBA

Ocultar hojas al abrir y cerrar el archivo

Haciendo uso de los eventos Abrir (Open) y Antes de cerrar (BeforeClose), vamos a mandar llamar a un procedimiento llamado OcultarHojas que al ejecutarse se ocultarán todas las hojas del archivo exceptuando la hoja llamada Principal. Hay que notar que las hojas tendrán la propiedad SheetVeryHidden que significa que no podrán ser mostrar al dar clic derecho en la etiqueta de las hojas.

Las siguientes macros van en 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_BeforeClose(Cancel As Boolean)

Call OcultarHojas

ThisWorkbook.Save

End Sub

Private Sub Workbook_Open()

Call OcultarHojas

UserForm1.Show vbModal = True

End Sub

La macro OcultarHojas irá en un Módulo normal.

Option Explicit
'
'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo
'
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

Cómo trabaja el formulario y sus macros VBA

Al iniciar el Formulario se ocultarán todas las hojas exceptuando la hoja Principal. Al dar clic en el botón Validar se comprobará que el usuario exista y posteriormente que la contraseña sea la asignada a ese usuario.

Usaremos un ciclo For Next para recorrer las columnas en la Tabla de usuario y por cada celda encontremos el valor de SI, se irán mostrando las hojas correspondientes al usuario ingresado.

A continuación del 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
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
Dim Fila As Integer
Dim i As Integer
Dim MostrarHoja As String

UsuarioExistente = Application.WorksheetFunction.CountIf(Sheets("Usuarios2").Range("B:B"), Me.txtUsuario.Value)

Set Rango = Sheets("Usuarios2").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(Usuarios2.Range(DatoEncontrado).Offset(0, 1).Value)
    
    'Si el usuario y la contraseña coinciden...
    If LCase(CStr(Usuarios2.Range(DatoEncontrado).Value)) = LCase(Me.txtUsuario.Value) And Contrasenia = _
       Me.txtPassword.Value Then
        
            Call OcultarHojas
            '''''''''''''''''''''''''''''''''''''''''''''
            'Mostrar las hojas donde esté la palabra SI en la hoja Usuarios2
            Fila = Sheets("usuarios2").Range(DatoEncontrado).Row
            For i = 1 To 12
                HojaVisible = Usuarios2.Range(DatoEncontrado).Offset(-(Fila - 1), i + 1).Value
                MostrarHoja = Usuarios2.Range(DatoEncontrado).Offset(0, i + 1).Value
            
                If MostrarHoja = "SI" Then Sheets(HojaVisible).Visible = True
            
            Next i
            '''''''''''''''''''''''''''''''''''''''''''''
        Unload Me
        
    Else
        
        MsgBox "La contraseña es inválida", vbExclamation, "EXCELeINFO"
    End If
End If

End Sub

Descarga el archivo de ejemplo

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

Leave a Reply

Your email address will not be published. Required fields are marked *