Como bloquear botones según usuario y denegar acceso a las otras hojas?

Tengo un libro de Excel con varias hojas y dos formularios uno de usuarios y contraseñas y otro con botones asignados con las hojas quiero bloquear el acceso a los botones según el usuario ingresado y a la vez que no tenga acceso a las demás hojas. ¿Los formularios los tengo que aparezcan al abrir el libro pero al cerrarlos abre el libro como evito eso?

1 respuesta

Respuesta
1

H o l a: Es un procedimiento bastante largo, hay que sincronizar varias macros.

- Primero, cuando creas un usuario tienes que guardar en la hoja de "usuarios" a cuáles botones tiene acceso.

- Segundo, también deberás tener un administrador que tenga acceso a todos los botones y a todas las hojas.

- Habrá que ver cómo quieres lo de las hojas bloqueadas, si un usuario tiene acceso a un botón y ese botón actualiza la "hojax", pero el usuario tiene bloqueada la "hojax", ¿entonces no podrá actualizar la "hojax"? ¿O cómo lo tienes contemplado?. La propuesta sería ocultar todas las hojas y limitar el acceso solamente a los botones.

- Por último, cuando el usuario ingrese, verificar cuáles botones tiene disponible y entonces mostrarlos en el formulario.

- Cuando cierras el formulario tienes que salir de excel, cerrando el libro, o bien, podrá ver solamente la primera hoja del inicio de sesión, ya que todas las hojas estarán ocultas.


Envíame tu archivo y empiezo con el procedimiento.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “karla sanchez” y el título de esta pregunta.

Te anexo el código para activar los botones

Private Sub UserForm_Initialize()
'Al iniciar el userform se revisan los botones que se pueden activar
'---
'   Por.Dante Amor
'---
    Set hu = Sheets("USUARIOS")
    Set hb = Sheets("botones")
    wusu = hu.[C3]
    wper = hu.[D3]
    '
    'deshabilita todos los botones
    Call HabilitarBotones(False)
    Set b = hb.Columns("A").Find(wper, lookat:=xlWhole)
    If Not b Is Nothing Then
        fila = b.Row
        If hb.Cells(fila, "B") = "todos" Then
            'habilita todos los botones
            Call HabilitarBotones(True)
        Else
            uc = hb.Cells(fila, Columns.Count).End(xlToLeft).Column
            For i = 2 To uc
                nombre = LCase(hb.Cells(fila, i))
                For Each boton In Controls
                    If TypeName(boton) = "CommandButton" Then
                        bform = boton.Parent.Name
                        bnomb = boton.Name
                        If nombre = LCase(bform & "." & bnomb) Then
                            boton.Enabled = True
                        End If
                    End If
                Next
            Next
        End If
    End If
End Sub
'
Sub HabilitarBotones(bandera)
'---
'   Por.Dante Amor
'---
    For Each boton In Controls
        If TypeName(boton) = "CommandButton" Then
            boton.Enabled = bandera
        End If
    Next
End Sub

sal u dos

hola.

me podría explicar esta parte no logro hacer que me habilite los botones que asigne en la hoja de botones. solo me habilita uno.

uc = hb.Cells(fila, Columns.Count).End(xlToLeft).Column
            For i = 2 To uc
                nombre = LCase(hb.Cells(fila, i))
                For Each boton In Controls
                    If TypeName(boton) = "CommandButton" Then
                        bform = boton.Parent.Name
                        bnomb = boton.Name
                        If nombre = LCase(bform & "." & bnomb) Then
                            boton.Enabled = True

gracias!!

El código es para los botones de un formulario, para botones de una hoja tienes que poner la referencia de la hoja

Sería así:

For Each boton In sheets("Nombre hoja").Controls

Prueba y me comentas

si los botones del formulario. me dijiste que en la hoja "botones" asignara de acuerdo al usuario los botones a los que tendría acceso. pero no me los habilita.

 por ejemplo: en el archivo que me mandaste el usuario "aa"  tendría acceso a dos botones y solo se habilita uno.

¿Estamos hablando del userform "menu"?

El usuario "aa" puede ver los botones "materiales" y "stock".

¿Cambiaste algo en la hoja botones?

¿Cambiaste algo?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas