Editor VBA
Programando no Editor do VBA - Visual Basic for Applications
Para acessar o editor de Visual Basic for Applications: Menu Ferramentas/ Macro / Editor do Visual Basic ou Alt + F11. Será aberta a janela abaixo:
Senão existir o Módulo1, vá até o Menu Inserir / Módulo, pois deverá de ter pelo menos um, para criar as macros, sub-rotinas, etc.
Project Explorer - É onde estão a lista das planilhas, módulos, formulários. Clique no Menu Exibir / Project Explorer ou Ctrl + R quando desejar exibi-la.
Código - É onde escrevemos a codificação de macros, functions, etc. Tecle F7 quando desejar exibi-la.
Propriedades - É onde estão as propriedades da planilha, formulários e objetos. Clique no Menu Exibir / Properties ou F4 quando desejar exibi-la.
Cores do VBA
Cor |
Significado |
Azul |
Palavras-Chave da linguagem. Ex: Sub, End Sub, Function, If, Then, Else, While, Loop,… A primeira letra fica em maiúscula. |
Vermelho |
Sempre que escreve na janela de código uma linha em linguagem VBA, o editor vai verificar a sintaxe e indicará se existe ou não algum erro de escrita. Se for detectado um erro a linha fica em vermelho e é exibida uma mensagem de erro. |
Preto |
Nome de variáveis, procedimentos, valores, operadores,… É o nome criado pelo criador (programador). |
Verde |
Comentário colocado no início dos procedimentos. Estes comentários servem para o criador poder colocar algumas explicações aos procedimentos realizados. Essas palavras com esta cor são ignoradas no procedimento, não produzem qualquer efeito na sua execução. Para inserir comentários bastará que o caractere ' (apóstofo) anteceda o texto. |
Amarelo |
Um sombreado amarelo poderá aparecer sobre a linha que identifica um procedimento. Esta cor pode simbolizar a ocorrência de um erro na execução do respectivo procedimento ou o a execução está parado nesta linha. O procedimento iniciou a execução, durante a qual detectou um erro e agora está parado, mas ainda em execução. Quando isto acontecer não deverá voltar a dar ordem de execução do procedimento, sem antes parar (Stop) a execução mal sucedida, a não ser que seja corrigida o erro. |
Prefixos utilizados em módulos, formulários
Quando criamos módulos, formulários, estes objetos como outros que inserimos também dentro de formulários, possuem um prefixo, que facilitam a identificação dentro da codificação e mesmo fora.
Objeto |
Prefixo |
---|---|
Módulo |
mdl |
Formulário |
frm |
Rótulo (Label) |
lbl |
Caixa de Texto (Text Box) |
txt |
Botão de Comando (Command Button) |
cmd |
Caixa de Combinação (Combo Box) |
cmb |
Moldura (Frame) |
fra |
Caixa de Seleção (Check Box) |
chk |
Botão de Opção (Option) |
opt |
Masked Edit Box |
msk |
Os objetos abaixo do formulário pertencem ao mesmo, e servem para criarmos a parte visual do projeto no VBA do excel, semelhante ao Visual Basic e outras linguagens visuais.
Criando um pequeno Controle de Despesas
A partir da célula A7, digite os dados:
Cadastro de Clientes | |||
Código | Nome | Cidade | Telefone |
Vá até a célula I3 e digite: Área de recepção de dados e cole a partir da célula I4 das células A9 até D9 (Código, Nome, Cidade e Telefone).
Nomeando as células
Para facilitar o trabalho na codificação da macro, vamos nomear as células com o nome respectivo (como se fossem campo em uma tabela).
Para que o excel guarde cada linha (registro), há necessidade criar uma macro para receber estes dados.
Pressione Alt + F11. Senão existir um módulo, crie-o e dentro da janela de código (pressione F7 se a mesma não estiver visível), digite a macro abaixo:
Sub Recepcao_Cliente()
'Macro para receber os dados do cliente
Dim nCodigo As Long 'Declaração da variável como inteiro longo
Dim sNome As String * 40 'Declaração da variável com tamanho de 40 caracteres
Dim sCidade As String * 25
Dim sTelefone As String * 14 'Como tem traço, dois pontos, foi declarada como string
'Será solicitado os dados dos campos abaixo
nCodigo = Application.InputBox("Informe o Código:", , , , , , , 1)
sNome = Application.InputBox("Informe o Nome:", , , , , , , 2)
sCidade = Application.InputBox("Informe a Cidade:", , , , , , , 2)
sTelefone = Application.InputBox("Informe o Telefone:", , , , , , , 2)
Range("Codigo").Select 'Seleciona a célula Código
ActiveCell.FormulaR1C1 = nCodigo 'Armazena o código digitado acima nesta célula
Range("Nome").Select
ActiveCell.FormulaR1C1 = sNome
Range("Cidade").Select
ActiveCell.FormulaR1C1 = sCidade
Range("Telefone").Select
ActiveCell.FormulaR1C1 = sTelefone
End Sub
Pressione a tecla F5 para executar a macro. Será solicitado os dados referente a cada campo. Insira-os e a seguir vá até a planilha para conferir. Você notará que os dados foram colocados na sua respectiva célula.
Se você executar a macro novamente, verá que os dados são sobrepostos, pois o endereço é fixo. Na verdade esta macro é somente para receber os dados. Falta a macro para o transporte para a primeira área, que é na verdade onde os dados ficarão armazenados e não serão no final sobrepostos.
Macro Transporte
Faremos a criação desta macro, através do gravador da macro.
Já dentro da planilha, Selecione a célula I5 e faça os procedimentos a seguir:
Se você executar novamente a macro transporte, notará que os dados ainda se sobrepõem. Devemos fazer uma pequena alteração nesta macro.
Pressione Alt + F11 e no Project Explorer (onde estão a lista das planilhas, módulos), deverá existir o Módulo2. Selecione-o e pressione a tecla F4. Se a janela de propriedades não estava ativa, agora está. Altere a propriedade Name para: mdlTransporte_Cliente.
Na janela de código, altere a linha Range("A10").Select e no lugar coloque: ActiveCell.Offset(1, 0).Range("A1").Select para que o endereço fique relativo e não absoluto. Agora cada vez que você incluir pela macro recepção e pressionar Ctrl + T, os dados serão inseridos linha a linha.
Utilizando formulário no VBA
Pressione Alt + F11 e a seguir clique no Menu Inserir / UserForm. Será exibido o formulário com a caixa de Ferramentas.
Na janela Project Explorer conforme figura acima, aparece a pasta UserForm1 cm formulário UserForm1.
Alterando dados do formulário UserForm1
Pressione a tecla F4 para exibir a janela de Propriedades altere:
Name: frmCliente
Caption: Cadastro de Clientes
Caption é um título, ou seja: é o nome externo do formulário, enquanto que Name é o nome interno. Foi colocado como frmCliente, pois cada objeto tem seu prefixo, que neste caso identifica como sendo o formulário.
Inserindo Moldura
A moldura (frame) tem a função de agrupar objetos, ou seja: imagine que você tenha várias caixas de textos e deseja que as mesmas não fiquem habilitadas (elas ficaram inacessíveis), ao fazer isso com o frame, as caixas também serão afetadas.
Selecione a moldura na caixa de ferramentas e arraste-a dentro do formulário, alterando as propriedades:
Name: fraDados
Caption: Dados
Insira dentro da moldura, os objetos abaixo:
Objeto |
Propriedade |
Valor |
---|---|---|
Rótulo |
Name |
lblCodigo |
Caption | Codigo | |
Caixa de Texto |
Name |
txtCodigo |
Text | Deixar em branco | |
Rótulo |
Name |
lblNome |
Caption |
Nome |
|
Caixa de Texto |
Name |
txtCidade |
Text |
Deixar em branco |
|
Rótulo |
Name |
lblTelefone |
Caption |
Telefone |
|
Caixa de Texto |
Name |
txtTelefone |
Text |
Deixar em branco |
|
Botão de Comando |
Name |
cmdSalvar |
Caption |
Salvar |
|
Botão de Comando |
Name |
cmdSair |
Caption |
Sair |
O formulário deverá ter a aparência conforme figura abaixo:
Observe que foi inserido outra moldura para os botões.
Executando o formulário
Clique dentro do formulário e pressione a tecla F5 para executa-lo.
Codificando o formulário
Dê um duplo clique no botão Sair. Entre o Private Sub e o End Sub, aperte a tecla Tab e digite a instrução End. Pressione a tecla F5 para executa-lo. Dê um clique no botão Sair para finalizar o formulário.
Dê um duplo clique no botão Salvar. Entre o Private Sub e o End Sub, aperte a tecla Tab e digite os códigos abaixo:
'Seleciona cada campo e armazena os dados digitados nas caixas de
'texto, nas células de recepção dos dados da planilha
Range("Codigo").Select
ActiveCell.FormulaR1C1 = txtCodigo.Text
Range("Nome").Select
ActiveCell.FormulaR1C1 = txtNome.Text
Range("Cidade").Select
ActiveCell.FormulaR1C1 = txtCidade.Text
Range("Telefone").Select
ActiveCell.FormulaR1C1 = txtTelefone.Text
Transporte_Cliente 'Chama a macro para o transporte dos dados
Pressione a tecla F5 para executar. Digite os dados e a seguir, dê um clique no botão Salvar.