VBA -  Criando um formulário de Login (revisitado)


Neste artigo vou mostrar como podemos automatizar o Microsoft Excel usando a linguagem VBA criando um formulário de login de forma a solicitar a autenticação do usuário para que ele tenha acesso a uma planilha que desejamos que tenha um acesso restrito.

Obs: Veja o meu artigo - VBA - Criando um formulário de Login - que mostra como criar um formulário de login com recurso de criptografar a senha.

É uma aplicação simples que mostra aos iniciantes e interessados como automatizar tarefas no Microsoft Excel usando a linguagem VBA. Só isso.

Os recursos usados no projeto deste artigo foram:

Antes de iniciar temos que realizar duas configurações no Microsoft Excel 2007:

Obs: A necessidade de habilitar a execução de macros é que por padrão, o Excel coloca um nível de segurança mais elevado pois códigos maliciosos podem ser executados em scripts através de macros no Excel.

Vamos ativar a guia do desenvolvedor e logo  em seguida habilitar a execução de macros.

Para ativar a guia do desenvolvedor (se ainda não estiver ativa) siga os seguintes passos:

Abra o Excel 2007 e ative o Menu principal de opções clicando no botão superior a esquerda, conforme a figura abaixo;

A seguir clique na guia Opções do Excel para abrir a janela - Opções do Excel;

Nesta janela, selecione o item - Mais Usados - e a seguir marque o item - Mostrar guia Desenvolvedor na Faixa de Opções e clique no botão OK;

No menu do Excel selecione a guia do Desenvolvedor e em seguida clique em Segurança de Macro;

Na janela Central de Confiabilidade selecione a opção - Configurações de Macro - e marque o item para habilitar todas as macros conforme a figura abaixo:

Pronto , feito isso já podemos iniciar o desenvolvimento da aplicação VBA no Excel 2007.

Abra então o Excel 2007 , será aberta uma planilha em branco. Clique então no botão no canto superior a esquerda para abrir o menu principal de opções;

Selecione a opção Salvar como e clique no item : Pasta de Trabalho Habilitada para Macro do Excel;

Em seguida informe o nome do arquivo : VBA_LoginExcel

Será aberta o arquivo Excel exibindo as três planilhas padrão: Plan1, Plan2 e Plan3; Vamos inserir uma nova planilha com o nome padrão de Plan4 clicando duas vezes no local ou pressionando SHIFT+F11;

Agora vamos definir o papel de cada planilha em nosso projeto Excel;

Vamos começar com a planilha Plan1

Essa planilha será exibida somente se o usuário for corretamente autenticado através de Login e Senha;

Geralmente essa planilha deverá conter dados restritos mas no nosso exemplo iremos apenas exibir a planilha e uma imagem.

Vamos incluir um controle Imagem nesta planilha.

Selecione a planilha Plan1 e clique no menu Desenvolvedor e a seguir no ícone Inserir;

Selecione o controle Imagem;

Arraste-o e dimensione-o na planilha Plan1 e a seguir clique na opção Propriedades para exibir a janela de Propriedades;

Selecione a propriedade Picture e na janela de Diálogo - Carregar Figura - escolha uma imagem para ser exibida no controle;

Ao final defina a propriedade PictureTiling como True e digite um texto acima da imagem com os dizeres: Formulário Principal - Área Restrita;

A planilha final deverá ter a seguinte aparência. (Fique a vontade para colocar nesta planilha o que melhor lhe convier)

Definindo a planilha Plan3

A planilha Plan3 deverá servir apenas como fundo para o formulário de login que iremos exibir quando o arquivo Excel for aberto.

Vamos então realizar os mesmos procedimentos feitos com a planilha Plan1 e incluir uma controle Imagem nesta planilha e definir uma imagem e um texto;

Abaixo temos o resultado final da planilha Plan3:

Definindo a planilha Plan2

Na planilha Plan2 vamos armazenar os dados do usuário, seu login e senha.

Para isso vamos usar as células A e B e definir os dados conforme a figura abaixo:

Nesta planilha temos dois usuários definidos: Macoratti e Admin e suas respectivas senhas. Poderíamos definir mais usuários a nosso critério.

Definindo a planilha Plan4

A planilha Plan4 será usada para registrar o acesso feito pelo usuário a senha e a data de acesso.

Assim que o usuário realizar a autenticação, se ela for bem sucedida iremos gravar as essas informações na planilha Plan4.

Dessa forma iremos apenas definir nas células A, B e C o conteúdo conforme imagem a seguir:

Agora que ja definimos o papel e os dados de cada planilha vamos criar o formulário de Login.

Criando o formulário de Login

Com a planilha Excel aberta pressione as teclas ALT+F11. Se preferir clique no menu Desenvolvedor e a seguir na opção Visual Basic.

Isso abrira o Editor Visual Basic; No editor Visual Basic clique no menu Inserir e a seguir em UserForm;

m novo formulário chamado UserForm será criado na área de trabalho do Editor.

Ao seu lado irá aparecer a Caixa de Ferramentas contendo os controles que vamos usar para criar o formulário;

À sua direita temos a Janela de Propriedades do controle selecionado que iremos usar para definir o nome e outras propriedades dos controles;

Vamos então arrastar a partir da caixa de ferramentas os seguintes controles para o formulário e a seguir vamos alterar as propriedades indicadas conforme abaixo:

De forma que leiaute do formulário tenha a seguinte aparência:

Agora vamos definir o código necessário para realizar a autenticação do usuário e assim permitir ou não o seu acesso a planilha Excel Plan1.

Para isso vamos usar o evento Click do botão cmdEntrar.

Clique duas vezes no botão Entrar para abrir o evento Click associado a este botão de comando ou clique com o botão do mouse sobre o botão e a seguir clique em Exibir Código;

Digite o código abaixo no evento Click do botão Entrar :

Private Sub cmdEntrar_Click()
         If txtLogin = "" Then
            MsgBox "Digite o nome do usuário !"
            Exit Sub
            txtLogin.SetFocus
        Else
          If txtSenha = "" Then
                MsgBox "Digite a senha do usuário !"
                Exit Sub
                txtSenha.SetFocus
          End If
        End If

        col = 1
        lin = 2
        While (Plan2.Cells(lin, col) <> txtLogin)
            lin = lin + 1
            If lin > 50 Then
                MsgBox "Usuário não esta cadastrado"
                Exit Sub
            End If
        Wend

        Dim senha As String
        col = 2
        senha = Plan2.Cells(lin, col).Value

        If txtSenha <> senha Then
            MsgBox "A senha não confere !!"
            Exit Sub
        Else
            MsgBox "Seja Bem Vindo " & txtLogin
            lin = 2
            col = 1
            While (Plan4.Cells(lin, col) <> "")
                lin = lin + 1
            Wend
            Plan4.Cells(lin, 1) = txtLogin.Value
            Plan4.Cells(lin, 2) = txtSenha.Value
            Plan4.Cells(lin, 3) = Date
            Plan1.Visible = xlSheetVisible
            Sheets("Plan1").Activate
            ActiveWindow.DisplayWorkbookTabs = False
            Hide
        End If
End Sub

Vamos entender o código:

         If txtLogin = "" Then
            MsgBox "Digite o nome do usuário !"
            Exit Sub
            txtLogin.SetFocus
        Else
          If txtSenha = "" Then
                MsgBox "Digite a senha do usuário !"
                Exit Sub
                txtSenha.SetFocus
          End If
        End If
Verificamos se o nome do usuário foi informado
em caso positivo verificamos se a senha foi informada.
 
        col = 1
        lin = 2
        While (Plan2.Cells(lin, col) <> txtLogin)
            lin = lin + 1
            If lin > 50 Then
                MsgBox "Usuário não esta cadastrado"
                Exit Sub
            End If
        Wend
Percorremos a planilha Plan2 a partir da linha 1 e coluna 2 e verificamos se o valor é igual ao nome do usuário;

Percorremos até a linha 50 e se nada for encontrado então saímos da rotina;

        Dim senha As String
        col = 2
        senha = Plan2.Cells(lin, col).Value
Se o nome foi encontrado obtemos a respectiva senha na coluna 2 e linha onde o nome foi encontrado;
        If txtSenha <> senha Then
            MsgBox "A senha não confere !!"
            Exit Sub
        Else
            MsgBox "Seja Bem Vindo " & txtLogin
            lin = 2
            col = 1
            While (Plan4.Cells(lin, col) <> "")
                lin = lin + 1
            Wend
            Plan4.Cells(lin, 1) = txtLogin.Value
            Plan4.Cells(lin, 2) = txtSenha.Value
            Plan4.Cells(lin, 3) = Date
            Plan1.Visible = xlSheetVisible
            Sheets("Plan1").Activate
            ActiveWindow.DisplayWorkbookTabs = False
            Hide
        End If
Verificamos se a senha informada é igual a
obtida da planilha Plan2;

Em caso positivo armazenamos na planilha Plan4 os valores de login, senha e data de hoje;

Exibimos a planilha Plan11
Ativamos a planilha Plan1
e escondemos a planilha atual.

 

Agora vamos definir o código do evento Click do botão cmdSair.

Clique duas vezes no botão Sair para abrir o evento Click associado a este botão de comando ou clique com o botão do mouse sobre o botão e a seguir clique em Exibir Código;

Digite o código abaixo no evento Click do botão Sair :

Private Sub cmdCancelar_Click()
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    Application.Quit
End Sub

O código acima inibe as mensagens de alerta do Excel , salva o workbook e sai do Excel.

Vamos definir também o código do evento Terminate do formulário frmLogin. Selecione o formulário e clique com o botão direito do mouse e a seguir clique em Exibir Código;

Na janela de código selecione UserForm e o evento Terminate;

A seguir digite o código abaixo neste evento:

Private Sub UserForm_Terminate()
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    Application.Quit
End Sub

Exibindo o formulário de Login

Queremos que quando o usuário abra a  pasta de trabalho, e por consequência a planilha, o formulário de login seja apresentado para informação do usuário e senha e a planilha Plan3 seja a planilha de fundo.

Para isso temos que usar o evento Activate da pasta de trabalho (WorkBook);

No editor de código VBA clique com o botão direito do mouse sobre o item EstaPasta_de_trabalho e selecione o item Exibir Código;

A seguir inclua o código conforme mostra a figura baixo no evento Activate do WorkBook:

O código acima exibe a planilha Plan3 e em seguida o formulário de login:

Ao informar o usuário e senha corretos é exibida uma mensagem de boas vindas ao usuário:

Na planilha Plan4 vemos os dados que foram armazenados referente ao login efetuado:

Dessa forma mostramos uma outra forma de criar um formulário de Login usando VBA e o Excel.

Pegue a planilha com o código VBA aqui: VBA_LoginExcel.zip

Salmos 5:9 Porque não há fidelidade na boca deles; as suas entranhas são verdadeiras maldades, a sua garganta é um sepulcro aberto; lisonjeiam com a sua língua.
Salmos 5:10
Declara-os culpados, ó Deus; que caiam por seus próprios conselhos; lança-os fora por causa da multidão de suas transgressões, pois se revoltaram contra ti.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??


José Carlos Macoratti