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
|
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.
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Visão geral do modelo de objeto Excel: http://msdn.microsoft.com/pt-br/library/wss56bz7.aspx