Permisos usuarios microsoft excel

Hola... Tengo el siguiente macro que quiero ampliar y la verdad no logro hacerlo
En este macro hay dos tipos de usuarios administradores y el resto
Yo lo que quiero es que existan 4 tipos de usuarios (administradores, RRHH, sueldos, Administración)
Muchas gracias por la ayuda
Les dejo la macro
Private Sub Workbook_Open()
'Creamos un vector con todos los usuarios con
'permisos de mayor nivel, para lo cual creamos una lista
administradores = "Contabilidad,Facturacion,Personal,Mateo,Ignacio,Irene"
'separamos los elementos de la matriz
'"administradores" usando split, y por la coma
administrador = Split(LCase(administradores), ",")
'Miramos si el nombre del usuario que ha abierto
'el fichero de excel, está en esa lista
usuario = LCase(Application.UserName)
For i = 0 To UBound(administrador)
posicion = posicion + InStr(usuario, administrador(i))
Next
'Si el nombre del usuario no está dentro de
'la lista, entonces, la posición será igual a 0,
'por lo que el usuario no tendrá derechos de administrador
If posicion = 0 Then
'en ese caso, ocultamos las hojas que no queremos mostrar
'(en este caso suponemos que es la hoja3, pero el nombre
'interno que se ve desde VBA, no el nombre de la pestaña)
Hoja3.Visible = xlSheetVeryHidden
Else
'en esl caso de ser un usuario administrador,
'mostraremos las hojas que queremos mostrar
'(en este caso suponemos que es la hoja3, pero el nombre
'interno que se ve desde VBA, no el nombre de la pestaña)
Hoja3.Visible = xlSheetVisible
End If
'grabamos los cambios
ActiveWorkbook.Save
End Sub

1 respuesta

Respuesta
1
Si bien excel cuenta con una opción para definir cuentas de usuario y permisos sobre las mismas. Si lo que te interesa es código, acá un ejemplo. Es diferetne al tuyo y te explico como funciona:
En un modulo pones esto:
Option Explicit
Dim cadena As String
Dim matriz() As String
Dim usuario As String
Dim i As Integer
Dim existe As Boolean
Sub usuarios()
'administradores
cadena = "Contabilidad,Facturacion,Personal,Mateo,Ignacio,Irene"
permisos (1) ' llamada a sub de permisos
'RRHH
If existe = True Then Exit Sub
cadena = "Contabilidad,Facturacion,Personal,Mateo,Ignacio,Irene,."
permisos (2)
' sueldos
If existe = True Then Exit Sub
cadena = "Contabilidad,Facturacion,Personal,Mateo,Ignacio,Irene"
permisos (3)
'administracion
If existe = True Then Exit Sub
cadena = "Contabilidad,Facturacion,Personal,Mateo,Ignacio,Irene,"
permisos (4)
End Sub
Private Sub permisos(tipo As Integer)
matriz = Split(LCase(cadena), ",")
usuario = LCase(Application.UserName)
existe = False
For i = LBound(matriz) To UBound(matriz)
If usuario = matriz(i) Then existe = True
Next
Erase matriz ' eliminas la matriz de la memoria
cadena = ""
If existe = False Then Exit Sub
'acciones sobre el grupo de usuarios
Select Case tipo
Case Is = 1
If existe = True Then
Hoja3.Visible = xlSheetVeryHidden
Else
Hoja3.Visible = xlSheetVisible
End If
Case Is = 2
'definir permisos para el tipo
Case Is = 3
'definir permisos para el tipo
Case Is = 4
'definir permisos para el tipo
End Select
ActiveWorkbook.Save
End Sub
en el evento open del libro haces la llamada al sub usuarios
Private Sub Workbook_Open()
usuarios
End Sub
o bien call usuarios como sea.
El tema sigue así:
Al abrir el libro lo que haremos es pasar al sub usuarios, para revisar si el que esta abriendo el libro esta dentro de alguno de los grupos definidos
Administradores, rrhh, sueldos, administración
Como ves reutilizamos matriz y cadena y hacemos uso de la variable boleana "existe"
La que nos indica que si encontramos al usuario dentro de un grupo tomara su valor a true y siendo así no correrá el siguiente grupo de usuarios, si por el contrario recorrido el grupo este usuario no se encuentra, recorrerá el siguiente grupo hasta agotarlos todos, una ves que determinaste a que grupo pertenece el usuario, utilizas el select case para realizar las operaciones pertinentes como otorgar permisos.
En fin es una sugerencia.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas