Autorización a usuarios

Tengo un archivo que en una hoja llamada "Menu" contiene una serie de botones que llaman a formularios los cuales a su vez vacían datos en diferentes hojas. Este archivo esta en red, Mi pregunta es si es posible que los usuarios, previamente definidos, puedan tener acceso solo a ciertos botones .Por ejemplo son 6 botones, Juan solo pueda accesar a los botones 1,3 5;Pedro solo a 6 y 2; Luis solo a 4 y tantos más como sea necesario.

1 respuesta

Respuesta
1
Necesitas una macro que te habilite o deshabilite los botones según el nombre de usuario.
Esta que te paso más abajo es muy básica pero te sirve para que a partir de ella le cambies los usuarios y los nombres de botones y hojas según convenga. Para que la macro se autoejecute cada vez que abres el libro tendrás que llamarla desde la macro Auto_open(), como también verás más abajo.
No sé que tipo de código usuario es el que piensas utilizar. Yo te pongo dos ejemplos y eliges el que convenga (elige una de las dos línea en negrita).
Espero que te sirva. En caso de duda, dímelo.
Saludos
Angel
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sub PerfilUsuario()
    'este es el usuario que se define en las Opciones de Excel de cada usuario...
    usuario = Application.UserName   
    'este es el usuario de red...
   
usuario=Environ("username")

    Select Case usuario
    Case "usuario1"
        Hoja1.CommandButton1.Enabled = True
        Hoja1.CommandButton2.Enabled = True
    Case "usuario2"
        Hoja1.CommandButton1.Enabled = False
        Hoja1.CommandButton2.Enabled = True
    Case Else
        Hoja1.CommandButton1.Enabled = False
        Hoja1.CommandButton2.Enabled = False
    End Select
End Sub

Sub Auto_Open()
    PerfilUsuario
End Sub

Muchas gracias Angel por tu pronta respuesta.
Aunque ahorita no tengo el archivo en red lo probé con mi usuario y funciono, perfectamente, bloqueandome algunos que les puse False. Solo una molestia más, los usuarios se colocan directamente en la macro aumentándolos y/o disminuyéndolos o adicionándoles y/o disminuyendoles privilegios, pero lo que no quiero es que la persona que se va encargar de otorgarlos tenga acceso al código.Es posible hacerlo desde afuera para evitar posibles manipulaciones al proyecto VBA.
De nuevo muchas gracias por tu ayuda.
Saludos
Puedes poner una contraseña al proyecto VBA.
VBAProject --> Propiedades de VBAProject --> Protección --> Contraseña para ver las propiedades del proyecto.
Angel,
De hecho ya tiene una contraseña el proyecto, no se si solo se pueda crear una especifica para el modulo que preparaste. Lo que pasa es que no me gustaría correr el riesgo de que la persona que accese al proyecto pudiera hacer cambios pero si no existe otra posibilidad, así lo manejare.
Gracias y saludos.
Me temo que la contraseña es para todo el VBAProject (no para el Libro). Si tienes usuarios que necesitan acceder a las macros para poder modificarlas, yo desde luego no sé como proteger un módulo en concreto. Creo que no se puede.
No obstante, tienes una solución que tal vez te podría servir: llevar ese módulo de Perfil de Usuario a otro Libro Excel, con su contraseña VBA por supuesto distinta a la de tu libro principal. Sería un módulo transformado en Función que podría recibir como parámetros de entrada el usuario y el número de botón y que devuelva True o False.
De esa forma en el Auto_open() de tu libro principal harías más o menos lo siguiente:
1º Abrir el Libro auxiliar de perfiles
2º Llamar a la función tantas veces como botones tengas, pasándole el usuario y referencia del botón
3º Activar o desactivar botones seeegún respuesta
4º Cerrar el Libro auxiliar.
Creo que te serviría, yo he hecho una pequeña prueba y me funciona.
Angel, disculpa mi ignorancia pero no te capto lo de transformar el modulo a función.
Saludos
Pues más o menos sería así, por ejemplo:
En LibroAuxiliar:
 Function PerfilUsuario(usuario, Boton)
    Select Case usuario
    Case "usuario1"
               Select Boton 
                  Case 1   PerfiUsuario=True
                  Case 2   PerfiUsuario=True
                  Case 3   PerfiUsuario=True
              End Select
    Case "usuario2"
               Select Boton 
                  Case 1   PerfiUsuario=True
                  Case 2   PerfiUsuario=True
                  Case 3   PerfiUsuario=False 
               End Select
    Case "usuario3"
               Select Boton 
                  Case 1   PerfiUsuario=True
                  Case 2   PerfiUsuario=False
                  Case 3   PerfiUsuario=False 
               End Select
    End Select
End Function

Y en el LibroPrincipal:
Sub Auto_Open()
    'este es el usuario que se define en las Opciones de Excel de cada usuario...
    usuario = Application.UserName   
    'este es el usuario de red...
    usuario=Environ("username")
    '
    << Abrir LibroAuxiliar >>
    '
    Hoja1.CommandButton1.Enabled = LibroAuxiliar!PerfilUsuario(Usuario,1)
    Hoja1.CommandButton2.Enabled = LibroAuxiliar!PerfilUsuario(Usuario,2)
    Hoja1.CommandButton3.Enabled = LibroAuxiliar!PerfilUsuario(Usuario,3)
    '
    << Cerrar LibroAuxiliar >>
   '
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas