VBA
- Criando um formulário de Login
![]() |
Vou mostrar como podemos automatizar o Microsoft Excel usando a linguagem VBA através da criação de um formulário de Login para proteger o acesso a uma planilha Excel. |
É uma aplicação simples que mostra aos iniciantes e interessados 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.
Criando o Formulário de Login
Existem muitas maneiras de você proteger os dados de suas planilhas Excel, e neste artigo eu vou mostrar como podemos criar um formulário de login usando a linguagem VBA. Essa pode não ser a melhor opção para o seu caso pois o próprio Excel possui recursos que você pode usar para proteger os seus dados.(planilha, célula, etc.)
Meu objetivo é criar um formulário que será apresentando ao usuário, quando a planilha for aberta no Excel, solicitando o nome e senha de acesso.
Eu não vou usar um banco de dados, vou armazenar o nome do usuário e a senha em uma planilha Excel e assim eu aproveito para mostrar como podemos acessar essas informações usando VBA.
Então vamos supor que você tenha uma planilha Excel com dados importantes e deseja proteger o seu conteúdo de forma que somente você possa acessá-la. Essa planilha foi nomeada como Fluxo_Caixa.xlsm.
Abra então o Excel 2007 e selecione a planilha Fluxo_Caixa abrindo no Excel;
Obs: Para outras versões do Excel as referências aos itens de menu e opções podem variar.
Abaixo vemos planilha aberta no Excel. É uma planilha comum que desejamos proteger.
![]() |
Observe que a planilha Plan2 foi renomeada para Macoratti. (Para renomear clique com o botão direito do mouse sobre o nome da planilha e selecione Renomear informando o nome nome)
Neste momento é tudo o que temos.
Vamos inserir uma nova planilha (a planilha Plan3 foi excluía) clicando com o botão direito do mouse sobre a planilha FLuxoCaixa e selecionando a opção Inserir:
Na janela Inserir escolha a opção Planilha e clique em OK;
![]() |
Será incluída uma nova planilha, altere o seu nome nome para Login;
Nesta planilha selecione a célula A1 e digite Usuário e na célula B1 digite macoratti;
Selecione a célula A2 e digite Senha e na célula B2 digite 313233343536;(Esta senha esta criptografada e mais adiante vamos ver como obtivemos esse valor)
Abaixo vemos a planilha Login contendo os valores digitados nas células A1,A2,B1 e B2:
![]() |
Acabamos de armazenar o nome do usuário e a senha na planilha Login nas células : B1(macoratti) e B2(313233343536)
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;
![]() |
Um 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.
Para isso vamos usar o evento Click do botão cmdLogin.
Antes de definir o código neste evento vamos definir uma variável com o nome senha na seção Geral do Editor VBA.
Com a janela do Editor VBA aberta, clique com o botão direito sobre o formulário frmLogin e selecione Exibir Codigo;
A seguir digite a declaração da variável senha:
Public senha As String
A seguir volte para a exibição do formulário e clique duas vezes sobre o botão Login para abrir na janela do editor de código VBA o evento Click, e a seguir vamos incluir o seguinte código neste evento:
Private Sub cmdLogin_Click() senha = Encriptar(txtSenha.Text) If txtUsuario.Text = Plan2.Range("B1") And senha = Plan2.Range("B2") Then MsgBox ("Bem-Vindo ao Fluxo de Caixa") Application.Visible = True Unload frmLogin Plan1.Visible = xlSheetVisible Plan2.Visible = xlSheetVeryHidden Plan1.Activate Else MsgBox (" Usuário/Senha incorretos...") If contador = 0 Then MsgBox ("A aplicação será encerrada !") Application.DisplayAlerts = False Application.Quit Else MsgBox (" Restam ainda " & contador & " tentavivas para fetuar o login...") contador = contador - 1 txtUsuario = Empty txtSenha = Empty txtUsuario.SetFocus End If End If End Sub |
Vamos entender o código:
a variável senha recebe um valor encriptado da senha informada na caixa de texto txtSenha.Text:
senha = Encriptar(txtSenha.Text)
A função Encriptar recebe a senha e faz a codificação da mesma.
Para criar a função Encriptar clique no menu Inserir -> Procedimento;
A seguir informe o nome Encriptar e marque o Tipo como sendo uma Função pois este procedimento deverá retonar um valor que é a senha encriptada.
![]() |
A seguir digite o seguinte código na rotina Encriptar:
Obs: Antes da rotina , na seção Geral defina o comando Option Explicit e a variável contador que iremos usar adiante
Option Explicit Public contador As Integer Function Encriptar(DataValue As Variant) As Variant Dim x As Long Dim Temp As String Dim TempNum As Integer Dim TempChar As String Dim TempChar2 As String For x = 1 To Len(DataValue) TempChar2 = Mid(DataValue, x, 1) TempNum = Int(Asc(TempChar2) / 16) If ((TempNum * 16) < Asc(TempChar2)) Then TempChar = ConvToHex(Asc(TempChar2) - (TempNum * 16)) Temp = Temp & ConvToHex(TempNum) & TempChar Else Temp = Temp & ConvToHex(TempNum) & "0" End If Next x Encriptar = Temp End Function |
A seguir repita o procedimento para criar a função ConvToHex() cujo código é exibido a seguir:
Private Function
ConvToHex(x As Integer) As String If x > 9 Then ConvToHex = Chr(x + 55) Else ConvToHex = CStr(x) End If End Function |
As duas funções acima trabalham em conjunto para receber um valor string (tratado como variant) e retornar um valor codificado.
A variável contador declarada será visível em toda a aplicação Excel.
No exemplo o usuário irá digitar um valor para usuário e senha e o valor da senha será codificado e comparado com o valor que armazenamos na planilha Login.
Após isso verificamos se o nome do usuário e a senha, já encriptada, informada corresponde aos valores na planilha Plan2 (Login) que incluímos nas células B1 e B2. Para obter o valor de uma célula usamos o nome da planilha seguido do objeto Range e a célula desejada: Plan2.Range("B1")
If txtUsuario.Text = Plan2.Range("B1") And senha = Plan2.Range("B2")
Se o usuário e a senha estiverem corretos então executamos o código abaixo
MsgBox ("Bem-Vindo ao Fluxo de Caixa")
-> Exibe uma caixa de mensagem com o texto indicado
Application.Visible = True
-> torna a aplicação visível
Unload frmLogin
-> descarrega o formulário de login
Plan1.Visible = xlSheetVisible
-> torna a planilha Plan1 visível
Plan2.Visible = xlSheetVeryHidden
-> torna a planilha Plan2 invisível (assim o usuário não tem acesso
ao usuário e senha)
Plan1.Activate
-> ativa a planilha Plan1
O objeto Application representa o Excel; em seu contexto existem a pasta de trabalho, as planilhas , células, etc.
Abaixo temos a hierarquia do modelo de objetos Excel resumido
Caso o usuário e/ou a senha não correspondam então o código abaixo será executado:
MsgBox (" Usuário/Senha incorretos...")
-> Exibe uma caixa de mensagem com o texto indicado
If contador = 0 Then
-> verifica o valor da variável contador
(que declaramos na rotina criada acima)
MsgBox ("A aplicação será encerrada !")
-> Se o valor do contador for igual a zero exibe mensagem de encerramento da
aplicação
Application.DisplayAlerts = False
-> desabilita a exibição de mensagens de alerta do Excel
Application.Quit
-> Encerra a aplicação
Else
MsgBox (" Restam ainda " & contador & " tentavivas para fetuar o login...")
-> exibe mensagem indicando o valor do contador
contador = contador - 1
-> decrementa o contador em uma unidade (definimos 3 tentativas)
txtUsuario = Empty
-> limpa a caixa de texto Usuario
txtSenha = Empty
-> limpa a caixa de texto Senha
txtUsuario.SetFocus
-> põe o foco na caixa de texto Usuario
End If
Dessa forma , já temos o formulário e o código prontos para uso.
Como e onde iremos usar esse código ?
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.
Para isso temos que usar o evento Open 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 Open do WorkBook:
![]() |
O código que será executado é o seguinte:
Application.EnableCancelKey = xlDisabled
contador = 3
Plan1.Visible = xlSheetVeryHidden
Plan2.Visible = xlSheetVeryHidden
frmLogin.Show
- Primeiro desabilitamos as tecla ESC e Ctrl+Break de forma a impedir que o usuário interrompa a execução da macro;
Valores possíveis para
EnableCancelKey: xlDisabled. A tratamento para a tecla Cancel está completamente desativada. xlErrorHandler. A interrupção é enviada para o procedimento em execução como um erro, interceptável por um manipulador de erro configurado com uma instrução On Error GoTo. O código de erro é detectável 18. xlInterrupt. O procedimento atual é interrompido, e o usuário pode depurar ou terminar o procedimento. |
- A seguir definimos a variável contador como igual a 3 e assim atribuímos
3 tentativas de senha/usuário incorretos;
- Tornamos a planilha Plan1 invisível;
- Tornamos a planilha Plan2 invisível;
- Exibimos o formulário de login;
Ah ! o valor da senha informado na planilha Login , célula B2 que é igual a 313233343536 foi obtido da rotina Encriptar. Esse valor foi colocado na planilha pois mesmo que alguém acesse a planilha e obtenha o valor ele estará codificado não poderá ser usado. Esse valor corresponde a 123456.
E dessa forma usando VBA vimos como criar um formulário de login, realizar a autenticação e proteger uma planilha via código VBA usando o Excel 2007.
Pegue o projeto completo aqui:
Fluxo_Caixa_EXCEL.zip
Eu sei é apenas Visual Basic for
Applications (VBA),
mas eu gosto...
Eu deixo para você descobrir como cancelar as teclas CTRL+SHIFT e assim impedir que o usuário tenha acesso direto à planilha.(dica : veja este link : http://www.rondebruin.nl/key.htm )
"Em verdade , em verdade vos digo que vem a hora, e agora é, em que os mortos
ouvirão a voz do Filho de Deus, e os que a ouvirem viverão."
João-5:25
Referências:
Visão geral do modelo de objeto Excel: http://msdn.microsoft.com/pt-br/library/wss56bz7.aspx