Notifications
Clear all

Gerenciamento de Acesso por Usuário em Planilha

2 Posts
2 Usuários
0 Reactions
1,218 Visualizações
(@aloizio-z)
Posts: 0
New Member
Topic starter
 

Prezados, boa tarde!!

Tenho o seguinte desafio, preciso gerenciar o acesso de usuários em uma determinada pasta de trabalho do Excel, atualmente uso o script abaixo para executar essa rotina, funciona perfeitamente, Tenho 2 perfis de usuários sendo; o master com acesso pleno e o visitante que deve ter acesso a todas as planilhas exceto duas as quais faço restrição de acesso para este perfil... hoje utilizo a seguinte rotina:

CÓDIGO PARA LIBERAR ACESO AS DEMAIS PLANILHAS EXCETO AS DUAS RESTRITAS AO USUÁRIO MASTER

Array("Ficha ", "F.002", "F.008", "F.009", "F.011", "F.120")

CÓDIGO PARA O PERFIL MASTER LIBERA TODAS AS PASTAS

Case "MASTER" 'aqui mostramos todas as planilhas sem exceção
For Each Ws In ThisWorkbook.Worksheets
Ws.Visible = True
Next Ws

No entanto, considerando que a pasta de trabalho tende a ter inúmeras planilhas e está em constante atualização, ficar 'cadastrando' no array sempre que é acrescentada uma nova planilha fica um procedimento fica muito extensa e moroso...

Tenho apenas 2 planilhas que preciso manter expressamente ocultas para os visitantes...

Partindo do disposto, minha dúvida é a seguinte, temos alguma forma de efetuar uma "inversão" do código abaixo, para que seja liberada todas as planilhas da pasta de trabalho, exceto as pastas que só podem ser utilizadas pelo usuário master?

Poderia fazer a imensa gentileza de me ajudar na resolução deste probleminha?

Desde já muito obrigado!

Option Explicit

'Eu fiz a escolha de uma função, por que trata-se de saber
'se a senha corresponde ao usuário.
'portanto, é necessário um processo que compare os 2
'e que retorne VERDADEIRO ou FALSO (daí a função declarada "As Boolean").
'AQUI: (Usuário As String, Senha As String)
'são configurações enviadas ao clicar no botão

Function VerifMDP(Usuário As String, MdP As String) As Boolean
VerifMDP = False 'por padrão, enviar FALSO

'Segundo o usuário digitado
Select Case Usuário
'aqui você deverá adaptar os nomes de cada usuário
'Você poderá alterar, em cada Casa, os nomes NOME1, NOME2, etc.
'em compensação, digite-os apenas em MAIÚSCULAS
'Você pode adicionar ou retirar de acordo com...

Case "PLENO"
'se a senha digitada para o usuário NOME1 for "PASS1" então é VERDADEIRO
If MdP = "12345*" Then VerifMDP = True

Case "VISITANTE"
'se a senha digitada para o usuário NOME2 for "PASS2" então é VERDADEIRO
If MdP = "12345" Then VerifMDP = True

Case Else
'se o nome do usuário digitado não existir então:
'mensagem para o usuário:
MsgBox "O nome do usuário digitado não existe. Favor verificar."

End Select
End Function

Sub AfficheFeuilles(Usuário As String)
Dim Ws As Worksheet, Planilhas(), Pos As Integer
'ADAPTE todas as casas como na função
Select Case Usuário
Case "VISITANTE"
'coloque no array, todas as planilhas que o NOME1 deve acessar
Planilhas = Array("Ficha Mestra", "F.002", "F.008", "F.009", "F.011", "F.120")
On Error Resume Next 'Application.Match étant source d'erreur
'verifique em todas as planilhas da pasta de trabalho
For Each Ws In ThisWorkbook.Worksheets
'Verificamos se o nome da planilha faz parte do Array preenchido acima
Pos = Application.Match(Ws.Name, Planilhas, 0)
'Se SIM, então
If Pos <> 0 Then
'mostramos a planilha
Ws.Visible = True
'reinicializamos a posição
Pos = 0
Else 'se não
'ocultamos fortemente a planilha
Ws.Visible = xlSheetVeryHidden
'reinicializamos a posição
Pos = 0
End If
Next Ws

Case "MASTER" 'aqui mostramos todas as planilhas sem exceção
For Each Ws In ThisWorkbook.Worksheets
Ws.Visible = True
Next Ws

Case Else
'como não existem outros casos, eu coloco aqui uma mensagem de erro fatal desnecessária
MsgBox "Usuário sem permissão contate o administrador", vbCritical
End Select
End Sub

 
Postado : 09/01/2018 1:04 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Tempos atrás eu postei um controle de acesso com nível de privilégios, onde bastasse adicionar em uma guia (controlada pelo adm), para adicionar o usuário e o nível de privilégio.
https://cse.google.com.br/cse?cx=partne ... ogin%20vba
Att

 
Postado : 09/01/2018 1:11 pm