none
Autenticação de Usuários via VBA | Objeto Range RRS feed

  • Pergunta

  • Olá pessoal, boa tarde! 

    Na maioria dos meus projetos, desenvolvidos em VBA, seja uma simples Sub Rotina ou até mesmo uma simples MsgBox dentro do Evento Open, sempre uso o sistema de autenticação de usuários, com a finalidade de restringir acessos, e conseguir mapear quem tem ou não acesso a um recurso, ou até mesmo a questão de abrir a pasta de trabalho, sendo assim, valido os usuários no evento Open através de um Select Case, ou seja, Case is = "user1", "user2", "user3", "user4" | MsgBox "Bem vindo" Case Else MsgBox "Não autorizado" ThisWorkbook.Close False.  

    Atualmente uso esta estrutura, porém em um grupo de aprox. 75 colaboradores, preciso autorizar apenas 16 deles por exemplo, que seria o pessoal que administraria este arquivo, nesta atual estrutura é difícil pois eu teria que colocar cada usuário separado por vígula, dentro do Case, preciso de um código que eu consiga manipular a lista de autorizados através de um Range em uma determinada planilha, para que o Gerente de TI da empresa (por ex.) consiga realizar a liberação ou negação de acessos através desta lista.  

    Pode me ajudar?
    domingo, 12 de fevereiro de 2017 16:32

Respostas

  • Olá, Ivanildo!

    Você poderia fazer da seguinte forma.

    1. Criar um cadastro com os usuários que podem ter acesso
    2. Validar se o usuário que esta acessando a planilha esta cadastrado.

    Para pegar o nome do Usuário do Computador você pode usar a função Environ("username")

    Att.

    Cleidson dos Santos

    • Marcado como Resposta Ivanildo.Junior quarta-feira, 14 de fevereiro de 2018 03:05
    domingo, 12 de fevereiro de 2017 16:51

Todas as Respostas

  • Olá, Ivanildo!

    Você poderia fazer da seguinte forma.

    1. Criar um cadastro com os usuários que podem ter acesso
    2. Validar se o usuário que esta acessando a planilha esta cadastrado.

    Para pegar o nome do Usuário do Computador você pode usar a função Environ("username")

    Att.

    Cleidson dos Santos

    • Marcado como Resposta Ivanildo.Junior quarta-feira, 14 de fevereiro de 2018 03:05
    domingo, 12 de fevereiro de 2017 16:51
  • Basta você utilizar um "For" ou "For Each" no intervalo desejado (sugiro utilizar uma Tabela (ListObject)), e testar se o usuário atual está na lista permitida ou não. Caso encontre, habilite alguma variável "Boolean" e aplique um "Exit For".

    Abraço.


    Filipe Magno

    domingo, 12 de fevereiro de 2017 18:52
  • Olá Cleidon,  

    Bacana a sua solução, te respondi no Whats, mas já resolvi o problema, uma solução muito bacana.

    segunda-feira, 13 de fevereiro de 2017 00:12
  • Olá Felipe, 

    Poderia postar um exemplo? Tenho uma solução já, mas na verdade queria reunir idéias para saber qual é mais performática.

    segunda-feira, 13 de fevereiro de 2017 00:12
  • Suponha que a lista de usuários autorizados esteja na planilha oculta Usuários:

    Sub Main()
        If IsError(Application.Match(ThisWorkbook.Worksheets("Usuários").Columns("A"), Environ("UserName"), 0)) Then
            MsgBox "Usuário não autorizado", vbExclamation
        Else
            MsgBox "Usuário autorizado.", vbInformation
        End If
    End Sub
    


    http://www.ambienteoffice.com.br || Grupo de WhatsApp: https://chat.whatsapp.com/K1uey5Q4yJdKnsgWkVQAZG

    segunda-feira, 13 de fevereiro de 2017 11:49
    Moderador
  • Exemplo com Tabela:

    Sub Verifica()
    
    If Valida Then MsgBox "Usuário Autorizado", vbExclamation, "Sucesso!" Else MsgBox "Usuário Não Autorizado", vbCritical, "Falha no Acesso!"
    
    End Sub
    
    
    Function Valida() As Boolean
    
    Dim Nome As Variant
    Valida = False
    
    For Each Nome In Plan1.ListObjects(1).DataBodyRange
        
        If StrComp(Environ("UserName"), Nome, vbBinaryCompare) = 0 Then
            Valida = True
            Exit For
        End If
    Next
    End Function

    A função "Verifica" poderia ser a "WorkBook_Open", por exemplo.

    Abraço.


    Filipe Magno


    • Editado FilipeMagno segunda-feira, 13 de fevereiro de 2017 23:53
    segunda-feira, 13 de fevereiro de 2017 23:52