Colocar login no Excel VBA

Checklist de viagem internacional Excel
Checklist de viagem internacional Excel
27 de março de 2015
Controle de Hora Extra – Excel 2007 / 2010 / 2013 – Planilha de hora extra 3.0
15 de abril de 2015

Objetivo: Demonstrar como colocar login no Excel VBA permitindo definir os usuários que terão acesso a determinadas planilhas de uma pasta de trabalho do Excel.

Login Excel

Este artigo demonstra como criar um login no Excel que restrinja o acesso ás planilhas de uma determinada pasta de trabalho do Excel.

Vamos passo-a-passo:

1. Criar na pasta de trabalho uma planilha nomeada como “Senha”;

2. Crie três colunas, Usuário, Senha e Formulário;

3. Na primeira coluna digite o nome do usuário, senha e o formulário que o usuário terá acesso;

4. O nome do usuário e a senha devem ser repetidos se o mesmo tiver acesso a mais de uma planilha, veja a imagem:

Login Excel 1

5. Abra o Visual Basic, clicando na guia Desenvolvedor->Visual Basic, se não estiver habilitada a aba, veja aqui como habilitar: Habilitar guia desenvolvedor.

6. Clique em Inserir->UserForm:

Login Excel 3

7. Altere a propriedade name para “frmLogin”, e Caption para “Login”;

8. Insira os componentes abaixo, e desenhe conforme abaixo:

Login Excel 3

9. Insira um Quadro e apague a propriedade Caption conforme o desenho abaixo:

Login Excel 4

10. Insira um botão de comando, e altere a propriedade Caption para OK, conforme o desenho:

Login Excel 5

11. Insira dois rótulos, alterando suas propriedades Caption para Usuário: e Senha:

Login Excel 6

12. Insira duas caixas de texto conforme abaixo, a primeira nomeie como txtUsuario e a segunda como txtSenha, na txtSenha altere a propriedade PasswordChar para *, para que não sejam exibidos os caracteres da senha.

Login Excel 7

13. Clicar duas vezes sobre o formulário e colar o seguinte código fonte:

Private Sub CommandButton1_Click()
    Dim lTotal      As Long
    Dim lContador   As Long
    
    lsDesabilitar
    
    Sheets("Senha").Range("$A$1:$C$50000").AutoFilter Field:=1, Criteria1:="=" & txtUsuario.Text
    Sheets("Senha").Range("$A$1:$C$50000").AutoFilter Field:=2, Criteria1:="=" & txtSenha.Text
    
    lTotal = WorksheetFunction.Subtotal(3, Sheets("Senha").Range("A:A"))
    
    If lTotal > 1 Then
        ActiveWorkbook.Unprotect Password:="123"
        
        For lContador = 2 To lTotal
            Sheets(Sheets("Senha").Range("C" & lContador).Value).Visible = True
        Next lContador
        
        Unload frmLogin
    Else
        MsgBox "Usuário ou senha incorretos!"
    End If
    
    ActiveWorkbook.Protect Password:="123", Structure:=True, Windows:=False
End Sub

Private Sub txtUsuario_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

Private Sub UserForm_Activate()
    txtUsuario.SetFocus
End Sub

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 13 Then  ' The ENTER key.
       SendKeys "{tab}"    ' Set the focus to the next control.
       KeyAscii = 0        ' Ignore this key.
    End If
End Sub

14. Clique na guia Inserir e selecione Módulo, no módulo criado colar o seguinte código fonte:

 

Public Sub lsShow()
    frmLogin.Show
End Sub

Public Sub lsDesabilitar()
    ActiveWorkbook.Unprotect Password:="123"
    Sheets("Plan1").Visible = False
    Sheets("Plan2").Visible = False
    Sheets("Plan3").Visible = False
    Sheets("Senha").Visible = False
    ActiveWorkbook.Protect Password:="123", Structure:=True, Windows:=False
End Sub

15. Volar  para a pasta de trabalho do Excel e criar uma planilha chamada Menu;

16. Desenhar um botão utilizando o botão Formas;

Login Excel 8

 

17. Clicar com botão direito sobre a forma criada e selecionar a opção Atribuir Macro, selecionar a opção lsShow, que irá chamar a planilha.

[saiba_mais]

18. Teste a tela de login clicando sobre o botão, a tela deverá ser exibida, digite o nome do usuário e a senha e verifique se as guias definidas são habilitadas, lembrando que se os nomes forem diferentes ou se houverem novas planilhas as mesmas devem ser configuradas dentro do código fonte, substituindo as planilhas Plan1, Plan2, etc, pelos nomes das planilhas que houverem na pasta de trabalho.

Cursos do Guia do Excel - Destaque-se no mercado de trabalho

Login Excel

Segue abaixo no botão de download o exemplo da planilha criada.

Download-button

Abraço

Marcos Rieper

27 Comments

  1. CÉSAR disse:

    Bom dia!

    Muito bom seus artigos.

    Se for possível gostaria de saber como posso montar uma macro para alterar a altura de linhas baseado em um números resultado de fórmula em células.

  2. Jessivan disse:

    fiz todo o procedimento como mostra acima, mas apareceu um erro de depuração no final.

    aparece uma tela com a seguinte mensagem:

    Erro em tempo de execução ‘424’
    O objeto é obrigatório

    o que pode ter ocorrido?

  3. Boa tarde,
    não consegui criar a planilha, aparece “Erro de Compilação – Erro de Sintaxe”.
    as linhas: If lTotal > 1 Then e Sheets(Sheets(“Senha”).Range(“C” & lContador).Value).Visible = True

    estão vermelhas, sabe me informar o motivo?

  4. ERIC disse:

    Excelente
    DEU TUDO OK.
    SÓ UM PROBLEMA QUANDO CRIEI LOGIN NA HORA QUE SALVO AS CONFIGURAÇÕES
    E FECHO A PÁGINA E ABRO NOVAMENTE ELE JÁ VEM DESBLOQUEADO A MENOS QUE INTENCIONALMENTE ERRE A SENHA AI O MESMO TRAVA.
    AGUARDO UM DICA OBRIGADO.

  5. Antonio disse:

    Aparece a mensagem como resolvo?

    Este sistema tem macros criptografados que foram desabilitados

  6. Lorrana disse:

    Bom dia,

    Teria algum código que eu possa incluir para dar logout automaticamente antes de fechar a pasta?

    e também para deixar a guia de planilhas desativada apenas para alguns usuários?

    Muito bom o seu código! Me ajudou bastante!!
    Obrigada!

  7. Boa noite!

    Gostaria de saber como faço para atribuir permissão específica de um usuário a somente 1 formulário – ex. plan3, pois não estou conseguindo realizar o procedimento.
    Quando atribuo somente 1 formulário ao usuário, o formulário que abre é plan1 somente.

    No aguardo,
    Atenciosamente,

    Rodrigo Santos

  8. Ivan Silva disse:

    Marcos,

    todos os usuários abrem a primeira aba. mas a senha só consta para o adm e para 1 outro usuário.
    tem alguma ordem para fazer a macro? ou colocar a senha na tabela?

  9. Pamela de Luca disse:

    Fiz algumas alterações na minha planilha e aparece “Erro em tempo de execução “9” subscrito fora do intervalo” clico em depurar e apareci que isso esta errado Sheets(Sheets(“Senha”).Range(“C” & lContador).Value).Visible = True

  10. Alfrede Anderson disse:

    Boa tarde!
    Tenho uma dúvida:
    1- Adicionei mais um usuário na lista e criei mais duas guias ficando assim:

    Usuário Senha Formulário
    ADM 123456 Plan1
    ADM 123456 Plan2
    ADM 123456 Plan3
    ADM 123456 Senha
    MARCOS 123 Plan1
    anderson 123 Plan1
    anderson 123 Plan3

    Porém ao logar com o usuário “anderson” as guias “Plan1” e “Plan2” são exibidas, o que é um erro, já que o era pra exibir as guias “Plan1” e “Plan3”

    Como resolver esse problema?

  11. Josue Santos disse:

    Muito obrigado por disponibilizar esta planilha, me ajudou bastante, porém eu encontrei um erro que preciso de ajuda para resolver, usando o arquivo como exemplo, existem dois usuários disponíveis: o ADM e o MARCOS, então eu fiz o teste de habilitar o MARCOS apenas com o formulário “Plan3”, só que ao invés de habilitar a Plan3 é habilitado a Plan1, isso porque a “Plan1” é a primeira da lista na coluna C da aba “Senha”.

  12. Gabriel - xGaaBr disse:

    Eu baixei essa planilha, criando vários usuários, e cada usuário iria ter acesso a determinada planilha só que tinha um problema:
    ______________________________________________________________________
    For lContador = 2 To lTotal
    Sheets(Sheets(“Senha”).Range(“c” & lContador).Value).Visible = True
    Next lContador
    _______________________________________________________________________
    Veja que “lContador” ele irá selecionar a linha “2”, e “Sheets(Sheets(“Senha”).Range(“c” & lContador).” irá selecionar a colunada “C”. No caso ele sempre irá selecionar a range “C:2”, Conclui que independente os logins criados ele sempre irá selecionar C:2 na planilha senha, pois os outros filtro ele não são ocultados assim sempre selecionado o mesmo.
    _______________________________________________________________________
    Porem depois de várias tentativas de concertar esse erro, pesquisando etc.., refazendo o vba inteiro veja como ficou, “Marcos Rieper”, SEGUE PARA SER PUBLICADO O MODELO 2.0, ESPERO QUE TRABALHE BEM EM UM NOVO MODELO.
    _______________________________________________________________________

    Private Sub CommandButton1_Click()
    Dim rgNomePlans As Range, cél As Range
    Dim usuario As String, Senha As String

    ‘Verifica se os campos estão preenchidos
    If txtUsuario = “” Then
    MsgBox “Preencha o campo usuário!”, vbCritical, “Atenção”
    txtUsuario.SetFocus: Exit Sub
    ElseIf txtSenha = “” Then
    MsgBox “Preencha o campo senha!”, vbCritical, “Atenção”
    txtSenha.SetFocus: Exit Sub
    End If

    With Sheets(“Senha”)
    .AutoFilterMode = False
    .Range(“$A$1″).CurrentRegion.AutoFilter Field:=1, Criteria1:=”=” & txtUsuario.Text
    .Range(“$A$1″).CurrentRegion.AutoFilter Field:=2, Criteria1:=”=” & txtSenha.Text
    Set rgNomePlans = .AutoFilter.Range.Columns(3)
    End With
    If rgNomePlans.SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
    Set rgNomePlans = rgNomePlans.Offset(1, 0).Resize(rgNomePlans.Rows.Count – 1, 1).SpecialCells(xlCellTypeVisible)
    ActiveWorkbook.Unprotect Password:=”123″

    Unload frmLogin
    For Each cél In rgNomePlans
    Sheets(cél.Value).Visible = True
    Next cél
    ActiveWorkbook.Protect Password:=”123″, Structure:=True, Windows:=False
    Else
    MsgBox “Usuário e/ou Nome Incorreto!” ‘O auto-filtro resultou vazio
    End If

    ActiveWorkbook.Protect Password:=”123″, Structure:=True, Windows:=False

    End Sub

    _______________________________________________________________________
    Atenção eu desenvolvi o login completo mande um e-mail caso esteja interessado em meu modelo.
    Espero ter ajudados todos, em diversos fórum planilhas parecidas como essas estão com o mesmo problema, como frequento já o site desci postar a solução

  13. Gabriel - xGaaBr disse:

    No fórum os arquivos estão corrompido

  14. Andre disse:

    Marcos, bom dia.

    Estou com um problema. Eu baixei sua planilha e coloquei a permissão para o Marcos abrir somente a Plan3, mas independente da permissão que eu aplique, sempre vem a Plan1. Fiz o teste aqui em uma planilha do meu trabalho e sempre abre as abas na ordem (Exemplo: Coloquei para o marcos abrir a Plan8, Plan15 e Plan16. Abre a plan1, plan2, plan3…) e não de acordo com as permissões que eu coloco.
    Poderia me ajudar?
    Obrigado

  15. Diego Brito Teixeira De Souza disse:

    Marcos Rieper,

    Aqui deu certinho, muito obrigado.

  16. Caio Curtis disse:

    Ola,

    Parabéns pelo site e obrigado pela macro, ajudou bastante.

    mas

    Gostaria de saber se é possível vincular um filtro de segmentação de dados à um usuário.

    por exemplo, se for usuário X, a segmentação de dados já filtra o campo x e se for usuario y o campo filtra informações de y.

  17. Fabio disse:

    Bom dia. consegui fazer conforme informado, porem a quantidade de usuários, é limitada? na VBA :
    Colocar login no Excel VBA

  18. Bruno disse:

    Amigo, bom dia, foi incrivel, consegui fazer, mas por algum motivo, os meus quando acesso com o usuario “padrão” as outras abas não somem, e tenho umas 17

  19. Taines disse:

    Bom dia!
    Não estou conseguindo colocar uma aba a mais na planilha.
    Como resolver isso?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Inscreva-se no nosso canal do Youtube!


Junte-se ao nosso canal do Youtube. Começamos em abril de 2016, mas já temos mais de 06:00 h de treinamentos gratuitos e este número irá aumentar. Vídeos novos todos os sábados.