Baixe o app para aproveitar ainda mais
Prévia do material em texto
PROGRAMAÇÃO COM VBA APOSTILA DO CURSO PROF. RICARDO BORTOLI ACADEMIA AEGEA http://academia.aegea.com.br/moodle/ 2017 AEGEA Sumário http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Sumário Módulo I - Introdução ao VBA ................................................................................................ 1 Aula 01 – O que é VBA ........................................................................................................ 1 Aula 02 – Criar macros ........................................................................................................ 2 Aula 03 – Segurança de macro ........................................................................................... 2 Aula 04 – Visual Basic Editor ............................................................................................... 3 Módulo II – O ambiente de programação ................................................................................ 5 Aula 05 – Janela de projeto ................................................................................................. 5 Aula 06 – Janela de código .................................................................................................. 5 Aula 07 – Personalizando o ambiente VBA ......................................................................... 6 Módulo III - Como funciona o VBA ......................................................................................... 9 Aula 08 – Modelo de objeto do Excel .................................................................................. 9 Aula 09 – Procedimentos Sub e procedimentos Function ................................................. 12 Aula 10 – Referências relativas e referências absolutas ................................................... 13 Módulo IV – Variáveis e constantes ...................................................................................... 14 Aula 11 – Comentários ...................................................................................................... 14 Aula 12 – Variáveis ............................................................................................................ 14 Aula 13 – Variáveis II (Strings, dates e objects) ................................................................ 15 Aula 14 – Constantes ......................................................................................................... 15 Aula 15 – Vetores e matrizes ............................................................................................. 16 Módulo V – Objeto Range ..................................................................................................... 18 Aula 16 – O Objeto Range ................................................................................................. 18 Aula 17 – Propriedades úteis do Objeto Range 1 ............................................................. 18 Aula 18 – Propriedades úteis do Objeto Range 2 ............................................................. 18 Aula 19 – Propriedades úteis do Objeto Range 3 ............................................................. 19 Aula 20 – Métodos úteis do Objeto Range 1 ..................................................................... 19 Aula 21 – Métodos úteis do Objeto Range 2 ..................................................................... 19 Aula 22 – Métodos úteis do Objeto Range 3 ..................................................................... 19 Módulo VI – Funções no VBA ............................................................................................... 20 Aula 23 – Funções Integradas VBA ................................................................................... 20 Aula 24 – Funções de planilhas no VBA ........................................................................... 21 Aula 25 – Funções personalizadas no VBA ...................................................................... 21 http://academia.aegea.com.br/moodle/ AEGEA Sumário http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo VII – Controles de fluxo ........................................................................................... 22 Aula 26 – A estrutura IF THEN ELSE 1 ............................................................................. 22 Aula 27 – A estrutura IF THEN ELSE 2 ............................................................................. 22 Aula 28 – Select Case 1 .................................................................................................... 23 Aula 29 – Select Case 2 .................................................................................................... 23 Aula 30 – IF com Select Case ........................................................................................... 23 Aula 31 – Declaração GOTO ............................................................................................. 24 Módulo VIII – Estruturas de repetição .................................................................................. 25 Aula 32 – Loop For Next 1 ................................................................................................. 25 Aula 33 – Loop For Next 2 ................................................................................................. 25 Aula 34 – Loop For Next 3 ................................................................................................. 26 Aula 35 – Loop Do While ................................................................................................... 31 Aula 36 – Loop Do Until ..................................................................................................... 31 Aula 37 – Loop For Each ................................................................................................... 31 Módulo IV – Eventos no VBA ................................................................................................ 32 Aula 38 – Evento Workbook Open ..................................................................................... 32 Aula 39 – Evento Before Close .......................................................................................... 32 Aula 40 – Evento Before Save e After Save ...................................................................... 32 Aula 41 – Evento New Sheet ............................................................................................. 32 Aula 42 – Evento Window Activate .................................................................................... 32 Aula 43 – Evento Section Change ..................................................................................... 33 Aula 44 – Evento Change 1 ............................................................................................... 33 Aula 45 – Evento Change 2 ............................................................................................... 33 Aula 46 – Evento Before Double Click ............................................................................... 33 Aula 47 – Evento Activate e Deactivate ............................................................................. 33 Aula 48 – Evento On Time ................................................................................................. 33 Módulo X – Tratamento de erros e outros exemplo ............................................................. 34 Aula 49 – Tratamento de erros 1 ....................................................................................... 34 Aula 50 – Tratamento de erros 2 ....................................................................................... 34 Aula 51 – A propriedade CurrentRegion ............................................................................ 34 Aula 52 – Alterando configurações do Excel pelo VBA .....................................................34 Aula 53 – A estrutura With – End With .............................................................................. 35 http://academia.aegea.com.br/moodle/ AEGEA Sumário http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo XI – Criar fórmulas personalizadas no VBA ............................................................. 36 Aula 54 – Fórmulas sem argumentos ................................................................................ 36 Aula 55 – Fórmulas com um argumento ............................................................................ 36 Aula 56 – Fórmulas com dois argumentos ........................................................................ 36 Aula 57 – Fórmulas cujo argumento seja um intervalo de células .................................... 36 Aula 58 – Fórmulas com argumento opcional ................................................................... 37 Módulo XII – Trabalhando com caixas de diálogo no VBA ................................................... 38 Aula 59 – Função MsgBox (caixa de mensagem) ............................................................. 38 Exemplo ............................................................................................................................... 41 Aula 60 – Função InputBox ................................................................................................ 43 xPos & ypos ...................................................................................................................... 44 O botão OK ....................................................................................................................... 46 Aula 61 – Método GetOpenFileName (janela para abrir arquivo) ..................................... 50 Módulo XIII – Trabalhando com formulários e controles de formulários .............................. 51 Aula 62 – Visão geral ......................................................................................................... 51 Aula 63 – Exemplo de Userform ........................................................................................ 54 Aula 64 – Controles de Userform ....................................................................................... 54 Aula 65 – Propriedades úteis do Userform ........................................................................ 60 Aula 66 – Principais eventos do Userform ......................................................................... 60 Aula 67 – Label propriedades ............................................................................................ 63 Aula 68 – Label eventos......................................................................................................... 65 Aula 69 - TextBox propriedades ............................................................................................. 65 Aula 70 – TextBox eventos..................................................................................................... 67 Aula 71 – ComboBox propriedades ........................................................................................ 67 Aula 72 – ComboBox métodos ............................................................................................... 73 Aula 73 – ListBox propriedades .............................................................................................. 73 Aula 74 – ListBox métodos..................................................................................................... 84 Aula 75 – CheckButton e OptionButton (caixa de checagem e botão de opção) ......................... 84 Anexo ...................................................................................................................................... 90 Variáveis ............................................................................................................................ 90 http://academia.aegea.com.br/moodle/ Pág. 01 Módulo I - Introdução ao VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo I - Introdução ao VBA Aula 01 – O que é VBA O que é VBA? O VBA (Visual Basic for Application) é uma linguagem de programação utilizada para desenvolver programas executados nos principais softwares do pacote Office (Access, Excel, Word, Power Point) da Microsoft. Uma linguagem de programação permite montarmos programas que auxiliam tarefas do dia a dia de seus usuários. Para que o VBA é útil? O VBA é muito útil para três principais funções: ✓ Automatizar tarefas ✓ Criar fórmulas ✓ Desenvolver sistemas (completos e complexos) Ao longo do deste curso nós iremos então estudar a fundo estas 3 utilidades do VBA, e vamos utilizar principalmente o Excel para demonstrar os exemplos. Portanto, é importante que você já tenha feito o curso de Excel Avançado, ou que tenha bons conhecimentos em Excel para melhor aproveitar o conteúdo deste curso. http://academia.aegea.com.br/moodle/ Pág. 02 Módulo I - Introdução ao VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 02 – Criar macros O primeiro passo para se construir uma macro é habilitar a “Guia Desenvolvedor”. Tanto no Excel, como no Word, no Access ou no Power Point ou qualquer outro aplicativo do Office o procedimento é o mesmo. Lembrando que estou usando o Office 2016, mas o Office 2013 não é diferente, e o Office 2010 e 2007 não é difícil também, basta você procurar a em Opções e Personalizar Faixas de Opções/Guias. Aula 03 – Segurança de macro Do mesmo modo que o VBA pode ser utilizado para realizar ações fantásticas para te ajudar, ele também pode ser utilizado por pessoas mal-intencionadas para lhe causar algum dano. Você poderá utilizá-lo para prejudicar alguém se quiser. Por http://academia.aegea.com.br/moodle/ Pág. 03 Módulo I - Introdução ao VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli exemplo, é possível excluir arquivos, travar o Windows ou roubar seus dados. Por isso, uma dica que deixamos com essa aula é: Não abra nenhum arquivo habilitado para macro de autores que você não confia. Poder x Risco VBA – “Com grande poderes, vêm grandes responsabilidades” ✓ O VBA é tão perigoso quanto é poderoso. ✓ Não é porque você sabe que o VBA pode excluir arquivos ou copiar informações que você o usará para isso. ✓ Há 4 tipos de configuração de segurança de macro. Aula 04 – Visual Basic Editor ✓ É o ambiente de edição do VBA. ✓ Pode ser ativado através do botão Visual Basic na Guia Desenvolvedor, ou através das teclas de atalho “Alt” + “F11” http://academia.aegea.com.br/moodle/ Pág. 04 Módulo I - Introdução ao VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli No VBA existem algumas janelas de trabalho, nas quais executamos nossas atividades de programação entre elas: ✓ Janela de projetos (VBAProject); ✓ Janela de propriedades; ✓ Janela de código; ✓ Janela de Verificação Imediata. Na janela de projetos nós podemos verificar também a Estrutura de modelos de objetos do Excel. E este assunto será melhor estudado na aula 5. http://academia.aegea.com.br/moodle/ Pág. 05 Módulo II – O ambiente de programação http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo II – O ambiente de programação Aula 05 – Janela de projeto A Janela de Projeto, também chamada de VBA Project, é uma janela dentro do editor do Visual Basic, onde se encontram os objetos e estruturas nas quais estamos trabalhando. A tecla de atalho para abrir a janela de projeto é: “Crtl” + “R”. Cada arquivo do Excel aberto, o VBA trata como um projeto. Dentro da Janela de Projeto, o VBA mostra: ✓ as planilhas do Excel como Objetos ✓ as macros organizadas em Módulos e ✓ os userforms em Formulários PelaJanela de Projetos também é possível exportar ou importar arquivos. Aula 06 – Janela de código A Janela de Código é local destinado a registro das macros. Sempre que gravarmos uma macro ela ficará registrada na Janela de Código dentro de um módulo. Cada objeto possui sua respectiva Janela de Código. Na Janela de Código as macros poderiam ser visualizadas uma a uma, se ativarmos o botão “Exibir Procedimento”, ou todas de uma vez se ativarmos o botão “Exibir Módulo Completo” http://academia.aegea.com.br/moodle/ Pág. 06 Módulo II – O ambiente de programação http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 07 – Personalizando o ambiente VBA Menu Ferramentas > Opções 1. Exibe uma mensagem caso a declaração da variável esteja incorreta; 2. Exige a declaração da variável; 3. Exige a relação de membros para seleção; 4. Exige os parâmetros do comando como dica flutuante; 5. Exige os valores de cada dado ao posicionar o mouse sobre o dado; 6. Permite mover com o mouse o dado selecionado; 7. Define se a Janela de Código deve exibir todas as macros na sequência ou exibir uma a uma; 1 2 3 4 5 6 7 8 http://academia.aegea.com.br/moodle/ Pág. 07 Módulo II – O ambiente de programação http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli 8. Exibe a linha que separa visualmente as macros na Janela de Código. Formatar os elementos relativos ao texto no VBA Alterar a aparência como as linhas de grade em um formulário http://academia.aegea.com.br/moodle/ Pág. 08 Módulo II – O ambiente de programação http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Definir se as janelas devem se posicionar como encaixáveis ou flutuantes http://academia.aegea.com.br/moodle/ Pág. 09 Módulo III - Como funciona o VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo III - Como funciona o VBA Aula 08 – Modelo de objeto do Excel O VBA possui: ✓ Objetos; ✓ Propriedades; ✓ Métodos. http://academia.aegea.com.br/moodle/ Pág. 10 Módulo III - Como funciona o VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli http://academia.aegea.com.br/moodle/ Pág. 11 Módulo III - Como funciona o VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli É possível alterar as propriedades de um objeto de três formas: ✓ Editando o objeto ✓ Alterando as propriedades na Janela de Projetos ✓ Através de comandos na janela de código do objeto. * Algumas propriedades não são editáveis. http://academia.aegea.com.br/moodle/ Pág. 12 Módulo III - Como funciona o VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Resumo: ✓ Objeto: Um objeto representa um elemento de um aplicativo, como uma planilha, uma célula, um gráfico, um formulário ou um relatório. ✓ Coleção: é um objeto que contém vários outros objetos ✓ Estrutura: Hierarquia entre os objetos ✓ Método: é uma ação que um objeto pode executar. ✓ Propriedade: é um atributo de um objeto que define uma das características do objeto Aula 09 – Procedimentos Sub e procedimentos Function Existem dois tipos de procedimentos: ✓ Sub: Grupo de declarações que executam ações ➢ Procedimento Sub: Sempre começa com a palavra-chave SUB e encerra com a END SUB ✓ Function: Grupo de declarações que executam cálculos ➢ Procedimento Function: Sempre começa com a palavra-chave FUNCTION e encerra com a END FUNCTION) http://academia.aegea.com.br/moodle/ Pág. 13 Módulo III - Como funciona o VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Os nomes dos procedimentos podem possuir letras, números e alguns caracteres especiais. Porém o primeiro caractere do nome de um procedimento deve uma letra, nunca número. Não se pode inserir espaço “ ” nem ponto “.” no nome dos procedimentos. Caracteres que não são permitidos: !, @, #, $, % e ^ O VBA não faz distinção entre MAIÚSCULA e minúsculas. Não é aconselhável nomear procedimentos com nomes de alguns objetos como células (A1), pois pode gerar conflitos no aplicativo. Nomes com no máximo 255 caracteres. Formas de execução dos procedimentos SUB ✓ Botão “play” executar Sub/UserForm ✓ Tecla F5 ✓ Caixa de Macro ✓ Botão ou Tecla de Atalho atribuída ✓ Através de outra macro Formas de execução dos procedimentos FUNCTION ✓ Através da planilha, inserindo õ nome e argumentos da função criada; ✓ A partir de um procedimento SUB ✓ Na guia Fórmulas > Inserir Função Aula 10 – Referências relativas e referências absolutas Referências relativas: Muda o endereço de referência relativamente à declaração Referências absolutas: Não muda o endereço de referência. http://academia.aegea.com.br/moodle/ Pág. 14 Módulo IV – Variáveis e constantes http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo IV – Variáveis e constantes Aula 11 – Comentários Os comentários no VBA são informações digitadas que o VBA não lê como uma declaração. Os comentários no VBA podem ser inseridos de duas formas: ➢ ‘ sinal apóstrofo antes do comentário ➢ REM – palavra-chave antes do comentário Aula 12 – Variáveis A variável é um local nomeado para o armazenamento de valores, que podem conter dados modificáveis durante a execução do programa. Cada variável tem um nome que a identifica exclusivamente As variáveis possuem tipos de dados ✓ Integer Números inteiros de -32.768 a 32.767 ✓ Long Números de -2.147.483.648 a 2.147.483.647 ✓ String Texto de 0 a aproximadamente 2 bi de caracteres http://academia.aegea.com.br/moodle/ Pág. 15 Módulo IV – Variáveis e constantes http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli ✓ Date Datas de 1/1/100 a 31/12/9999 ✓ Variant Qualquer valor (padrão para variáveis não declaradas) ✓ Boolean Verdadeiro ou Falso Quando você declara o tipo de uma variável e não determinou o valor desta ela automaticamente recebe o valor de “0” zero. Aula 13 – Variáveis II (Strings, dates e objects) As variáveis do tipo String, ✓ recebem valores de texto; ✓ seus valores devem ser declarados entre “aspas”; ✓ pode ser de comprimento fixo ou variável. As variáveis do tipo Date, ✓ recebem valores de data; ✓ seus valores devem ser declarados entre #hashtags# ✓ Se apresentam no formato inglês MM/DD/AAAA As variáveis do tipo Object, ✓ recebem valores de objetos; ✓ seus valores devem ser declarados com a instrução SET ✓ Permite que se atribua propriedades e métodos do objeto à variável Aula 14 – Constantes Uma CONSTANTE é uma variável que NÃO PERMITE ALTERAÇÕES. Se você tentar modificar uma constante, o Visual Basic gerará uma mensagem de erro. http://academia.aegea.com.br/moodle/ Pág. 16 Módulo IV – Variáveis e constantes http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli O VBA possui constantes próprias muito utilizadas, tais como as constantes de alinhamento: ✓ xlcenter ✓ xlleft ✓ xlright Aula 15 – Vetores e matrizes Vetores são variáveis que recebem vários valores. O primeiro vetor sempre começa no índice 0 (zero). http://academia.aegea.com.br/moodle/ Pág. 17 Módulo IV – Variáveis e constantes http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Você pode declarar uma vetor como indefinida no início do seu código, e posteriormente o redeclarar com o uso da palavra-chave: ReDim. http://academia.aegea.com.br/moodle/ Pág. 18 Módulo V – Objeto Range http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo V – Objeto Range Aula 16 – O Objeto Range O objeto range é uma célulaou um intervalo de células. Para utilizar o objeto range deve-se declarar: A palavra-chave RANGE seguida de (“nome da célula”) ou (“nome do intervalo”). É possível se referir a um objeto range que está em uma outra planilha. Para isso deve-se utilizar a declaração WORSHEETS seguida por (“nome da planilha”).RANGE(“nome da célula”). Aula 17 – Propriedades úteis do Objeto Range 1 A propriedade CELLS indica a posição de uma célula com relação às linhas e colunas. A propriedade OFFSETS define um deslocamento/distância da célula declarada. Tanto a propriedade CELLS quanto a propriedade OFFSETS deve ser declara com o indicador de linhas “ROWS” e de colunas “COLUMNS” entre parênteses conforme exemplos a baixo: ➢ cells(nº rows, nº columns) ➢ offsets(nº rows, nº columns) Aula 18 – Propriedades úteis do Objeto Range 2 ➢ Value: Representa o valor de uma célula ou intervalo; ➢ Text: Representa o texto de uma célula; ➢ Count: Representa a quantidade de células; ➢ Column: Representa o número da coluna de uma célula; ➢ Row: Representa o número da linha de uma célula. http://academia.aegea.com.br/moodle/ Pág. 19 Módulo V – Objeto Range http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 19 – Propriedades úteis do Objeto Range 3 ➢ Address: Representa o endereço de uma célula; ➢ HasFormula: Indica se a célula possui uma fórmula; ➢ Font: Refere-se a fonte da célula; ➢ Interior: Refere-se ao preenchimento da célula; ➢ Formula: Escreve uma fórmula na planilha. Aula 20 – Métodos úteis do Objeto Range 1 ➢ Select: Seleciona uma célula ou intervalo; ➢ Copy: Copia uma célula ou intervalo; ➢ PasteSpecial: Cola uma célula ou intervalo com formatos especiais; ➢ Cut: Recorta uma célula ou intervalo. Aula 21 – Métodos úteis do Objeto Range 2 Clearcontents: Apaga o conteúdo de célula ou intervalo; Clearformats: Apaga a formatação de uma célula ou intervalo; Clear: Apaga todas as informações de uma célula ou intervalo; Clearcoments: Apaga os comentários de uma célula ou intervalo; Merge/Unmerge: Mesclar e desfaz mesclar células. Aula 22 – Métodos úteis do Objeto Range 3 ➢ Delete: Deleta uma célula ou intervalo ➢ Insert: Insere uma célula ou intervalo ➢ Find: Localiza um valor ➢ Replace: Substituir http://academia.aegea.com.br/moodle/ Pág. 20 Módulo VI – Funções no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo VI – Funções no VBA Aula 23 – Funções Integradas VBA Quando falamos de funções no VBA, existem três tipos diferente: ✓ Funções Integradas: Já estão pré-definidas no VBA ✓ Funções de Planilha: Padrões do Excel ✓ Funções Personalizadas: Criadas pelo usuário ✓ Msgbox: Exibe uma caixa de mensagem ✓ Inputbox: Exibe uma caixa de mensagem para o usuário digitar informações. ✓ Left: Extrai um determinado número de caracteres da esquerda de uma string; ✓ Right: Extrai um determinado número de caracteres da direita de uma string; http://academia.aegea.com.br/moodle/ Pág. 21 Módulo VI – Funções no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli ✓ Len: Retorna o número de caracteres de uma string; ✓ Ucase: Transforma as letras em maiúscula. Aula 24 – Funções de planilhas no VBA Ativa a partir da declaração Application.WorksheetFunction ✓ SUM: Corresponde à função SOMA do Excel; ✓ VLOOKUP: Corresponde à função PROCV do Excel; ✓ RANDBETWEEN: Corresponde à função ALEATÓRIO do Excel. Aula 25 – Funções personalizadas no VBA As funções personalizadas são fórmulas criadas pelo usuário para serem utilizadas posteriormente como funções de planilha. http://academia.aegea.com.br/moodle/ Pág. 22 Módulo VII – Controles de fluxo http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo VII – Controles de fluxo Aula 26 – A estrutura IF THEN ELSE 1 A instrução IF Then Else faz com que o VBA verifique se uma condição seja verdadeira, se a condição for verdadeira o VBA executa um código, se a condição for falsa o VBA executa outro código ou não executa nada. IF: Condição Then: Resposta para condição verdadeira Else: Resposta para condição falsa End IF: Encerra a estrutura IF Aula 27 – A estrutura IF THEN ELSE 2 http://academia.aegea.com.br/moodle/ Pág. 23 Módulo VII – Controles de fluxo http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 28 – Select Case 1 A instrução Select Case nos permite fazer uma escolha quando há diversas opções disponíveis. Sua estrutura é: SELECT CASE e oNomedaEstrutura CASE IS = Opção a escolher END SELECT – Que encerra o nome da estrutura Aula 29 – Select Case 2 CASE IS par indicar = CASE ELSE para indicar outra opção para exceto as anteriores CASE TO para indicar opção com valores entre um intervalo Aula 30 – IF com Select Case Quando você tem várias opções e um teste lógico para filtrar estas opções a melhor forma de se fazer isso dentro do VBA é utilizando em conjunto as estruturas IfThenElse e SELECT CASE http://academia.aegea.com.br/moodle/ Pág. 24 Módulo VII – Controles de fluxo http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 31 – Declaração GOTO É um desvio incondicional para uma linha especificada dentro de uma função VBA. É também a forma mais rápida de se alterar o fluxo do seu código. Muitas instruções GoTo podem tornar o código difícil de ler e depurar. Por isso aconselhamos o uso de controles de fluxos estruturados com a instrução IfThenElse e Select Case. http://academia.aegea.com.br/moodle/ Pág. 25 Módulo VIII – Estruturas de repetição http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo VIII – Estruturas de repetição Aula 32 – Loop For Next 1 A instrução ForNext nos permite executar o mesmo código por um determinado número de vezes. Aula 33 – Loop For Next 2 “Você tem algo importante para frisar para os seus leitores? Use uma barra lateral para dar destaque.” http://academia.aegea.com.br/moodle/ Pág. 26 Módulo VIII – Estruturas de repetição http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 34 – Loop For Next 3 O For Loop no VBA é um dos loops mais usados no VBA. O loop For tem duas formas: Para o próximo e para cada em seguida. O loop For normalmente é usado para mover sequencialmente através de uma lista de itens ou números. Para finalizar o loop FOR em qualquer ponto, podemos usar a instrução EXIT FOR. 1 2 3 Para a_counter = start_counter Para end_counter Faça algo aqui Próxima a_counter O que estamos fazendo aqui essencialmente é criar um loop que usa uma variável a_counter como o 'time keeper' do loop. Definimos -lo para um valor igual a start_counter no início do loop e, em seguida, increment (ou reduzi-lo) por 1 durante cada ciclo até. O loop será executado até o momento em que o valor do a_counter se torna igual a end_counter. O loop é executado pela última vez quando ambos os valores acima coincidem e depois param. Exemplo de um LOOP FOR 1 2 3 4 5 6 7 Sub my_for_loop1 () Para a_counter = 1 a 10 J = um contador Próxima a_counter Msgbox "O valor do contador no último loop foi" & a_counter End Sub O valor final do a_counter no loop acima é 11. http://academia.aegea.com.br/moodle/ Pág. 27 Módulo VIII – Estruturas de repetição http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli VBA para loop em reverso com instrução STEP: Não é necessário que o contador no loop for apenas se mova de um valor inferior para um valor mais alto - você pode ter o loop for também. Aqui está um exemplo de loop for reverse: 1 2 3 4 5 6 7 Sub my_for_loop2 () Para a_counter = 10 a 1 Passo -1J = um contador Próxima a_counter Msgbox "O valor do contador no último loop foi" & a_counter End Sub O valor final do a_counter neste loop é 1. Como você pode ver, podemos usar a instrução Step n para garantir que o loop for seja para frente ou para trás. Por padrão, o valor Step é 1, no entanto, pode ser definido como um número maior que 1 para saltar para a frente ou negativos para o loop for para trabalhar em sentido inverso. VBA For Each... In... Next Loop: O loop For Each... In... Next possui a seguinte sintaxe: 1 2 3 Para cada item_in_grupo Em group_of_items Faça algo aqui Próximo item_in_grupo O item_in_grupo aqui pertence a um grupo_de_artigos (smart não é I). O que quero dizer é que o objeto usado como um group_of_items tem que ser uma coleção de objetos. Você não pode executar um loop 'para cada item' em objetos http://academia.aegea.com.br/moodle/ Pág. 28 Módulo VIII – Estruturas de repetição http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli individuais (para que a Microsoft não lance o erro de runtime amigável 438 em você!) O loop acima move um item de cada vez começando com o primeiro item na coleção de objetos. Você pode usar este particular para a sintaxe loop para iterar ao longo de folhas em uma pasta de trabalho, formas em uma folha, tabelas dinâmicas em uma folha ou qualquer coleção de objetos em geral. Vejamos o exemplo de como você pode usar o loop for para iterar em todas as planilhas de uma pasta de trabalho: 1 2 3 4 5 Sub my_for_loop3 () Para cada sht Em ActiveWorkbook.Worksheets MsgBox sht.Name Próxima sht End Sub Agora vamos ver como podemos passar por todas as tabelas dinâmicas em uma folha: 1 2 3 Sub my_for_loop4 () Para Cada pvt Em ActiveSheet.PivotTables MsgBox pvt.Name http://academia.aegea.com.br/moodle/ http://www.databison.com/wp-content/uploads/2009/07/for-loop-vba-error-run-time-error-438.png Pág. 29 Módulo VIII – Estruturas de repetição http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli 4 5 Próxima pvt End Sub End For Loop antes da condição final: Se você precisar terminar o loop For antes que a condição final seja alcançada ou atendida, basta usar o END FOR em conjunto com a instrução IF. No exemplo dado abaixo, saímos do loop for prematuramente e antes que a condição final seja atendida. Por exemplo, a seguir, o loop sai quando a_counter atinge um valor de 3. 1 2 3 4 5 6 Sub my_for_loop5 () Para a_counter = 0 a 5 MsgBox a_counter Se (a_counter = 3) Então saia para Próxima a_counter End Sub Mover para fora de ou ignorar um loop específico em um loop for: Não é aconselhável mover para fora um loop for e depois voltar para trás. Vamos dar um exemplo muito complicado: 1 2 3 4 5 6 7 8 9 Sub my_for_loop6 () Dim j As Integer Para i = 0 a 5 B: Se (j = 3) Então GoTo a: Ji Em seguida i uma: J = 4 http://academia.aegea.com.br/moodle/ Pág. 30 Módulo VIII – Estruturas de repetição http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli 10 11 12 13 Vá para b MsgBox ( "Valor final de j =" & j) End Sub O que tentamos fazer aqui é um movimento fora do loop for em uma iteração particular (quando j = 3). O que você acha que é o valor final de j no exemplo acima. 3? 5? Bem... nenhum deles realmente. O loop executa indefinidamente e em breve levaria ao estouro. No entanto, é possível ignorar um loop no For Loop. Você pode incrementar o contador em 1 (ou qualquer outro número) e isso pode fazer com que o loop for salte todos os loops entre eles. Aqui está um exemplo. 1 2 3 4 5 6 Sub my_for_loop7 () Para i = 0 a 5 I = i + 1 MsgBox i Em seguida i End Sub No entanto, novamente, esta não é uma boa prática de codificação e pode levar a dores de cabeça para as pessoas mantendo o código VBA mais tarde. Em vez disso, verifique se a condição particular deve ser ignorada em um loop FOR, tente usar uma função IF ou mesmo uma instrução SELECT CASE. http://academia.aegea.com.br/moodle/ Pág. 31 Módulo VIII – Estruturas de repetição http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 35 – Loop Do While Aula 36 – Loop Do Until Aula 37 – Loop For Each http://academia.aegea.com.br/moodle/ Pág. 32 Módulo IV – Eventos no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo IV – Eventos no VBA Aula 38 – Evento Workbook Open O evento Open é um evento da pasta de trabalho, que é disparado toda vez que uma pasta de trabalho é aberta. Aula 39 – Evento Before Close O Evento BeforeClose acontece sempre antes de uma pasta de trabalho ser fechada. Aula 40 – Evento Before Save e After Save ➢ O evento BeforeSave é disparado sempre antes de uma pasta de trabalho ser salva. ➢ O evento AfterSave é disparado sempre após uma pasta de trabalho ser salva. Aula 41 – Evento New Sheet O Evento NewSheet é disparado sempre após uma nova planilha ser criada na pasta de trabalho. Aula 42 – Evento Window Activate ➢ O evento WindowActivate é acionado sempre que uma janela do Excel é ativada ➢ O evento WindowDeactivate é disparado sempre que uma janela do Excel é desativada http://academia.aegea.com.br/moodle/ Pág. 33 Módulo IV – Eventos no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 43 – Evento Section Change O evento SelectionChange é um evento de planilha no VBA que é disparado sempre que a seleção de uma célula da planilha é alterada. Aula 44 – Evento Change 1 O evento Change é um dos eventos de planilha mais importantes e mais utilizados no VBA. Este evento é disparado sempre que o valor de uma célula é alterado numa planilha. Aula 45 – Evento Change 2 Continuação: conteúdo disponível apenas na video-aula. Aula 46 – Evento Before Double Click O evento BeforeDoubleClick é acionado sempre antes de o usuário der um duplo clique com o mouse numa célula da planilha. Aula 47 – Evento Activate e Deactivate ➢ O evento Activate é acionado sempre que uma planilha é selecionada no Excel ➢ O evento Deactivate é acionado sempre que uma planilha perde o foco (a seleção) no Excel Aula 48 – Evento On Time O evento On Time permite que uma macro seja executada numa hora programada. http://academia.aegea.com.br/moodle/ Pág. 34 Módulo X – Tratamento de erros e outros exemplo http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo X – Tratamento de erros e outros exemplo Aula 49 – Tratamento de erros 1 Podemos dizer que é quase inevitável que ocorram erros de programação quando criamos nossos códigos. Por mais experiente que seja o programador é muito difícil prever todas as ações dos usuários que irão utilizar os programas. A declaração On Error em conjunto com a declaração GoTo é uma boa opção para alterar o fluxo do programa quando há a possibilidade de erro acontecer. Aula 50 – Tratamento de erros 2 A declaração On Error em conjunto com a declaração Resume Next é uma opção para ignorarmos um erro quando ele acontecer. Aula 51 – A propriedade CurrentRegion É uma das propriedades mais importantes do objeto Range quando precisamos trabalhar com banco de dados no Excel. Através da propriedade CurrentRegion podemos facilmente obter o número total de linhas de uma base de dados e assim fazer o cadastro do próximo item na linha abaixo. Aula 52 – Alterando configurações do Excel pelo VBA Com o VBA é possível alterar algumas configurações do Excel. Através de configurações booleanas, que são aquelas com o valor de verdadeiro ou falso, vocêhttp://academia.aegea.com.br/moodle/ Pág. 35 Módulo X – Tratamento de erros e outros exemplo http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli pode construir um código, que fará referência às propriedades ou funções da WorkBook, WorkSheet, Application entre outros objetos. Aula 53 – A estrutura With – End With A instrução With e End With é uma importante ferramenta para deixar o seu código mais rápido e otimizado. http://academia.aegea.com.br/moodle/ Pág. 36 Módulo XI – Criar fórmulas personalizadas no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo XI – Criar fórmulas personalizadas no VBA Aula 54 – Fórmulas sem argumentos Fórmulas sem argumentos são aquelas que não precisam de parâmetros, apenas colocamos o nome da função abrimos e fechamos parênteses, por exemplo a função HOJE(), AGORA(). Aula 55 – Fórmulas com um argumento Fórmulas com um argumento são aquelas que possuem um parâmetro a ser informado, após colocamos o nome da função, abrimos os parênteses, informamos o argumento, e fechamos os parênteses, por exemplo a função RAIZ(n). Aula 56 – Fórmulas com dois argumentos Fórmulas com dois argumentos são aquelas que possuem dois parâmetro a serem informados, após colocamos o nome da função, abrimos os parênteses, informamos o primeiro argumento, inserimos “;” (ponto e vírgula), e então fechamos os parênteses, por exemplo a função POTÊNCIA(núm;potência). Aula 57 – Fórmulas cujo argumento seja um intervalo de células Existem fórmulas no Excel cujos argumentos da função são intervalos de células, ou matrizes, como é o caso da função MAIOR ou a função PROCV. No VBA, é possível criar fórmulas com um intervalo como argumento. Este intervalo também pode ser chamado de FAIXA. http://academia.aegea.com.br/moodle/ Pág. 37 Módulo XI – Criar fórmulas personalizadas no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 58 – Fórmulas com argumento opcional Em determinadas fórmulas no Excel os parâmetros não são obrigatórios, como a função ESQUERDA() cujo segundo argumento não é obrigatório. No VBA também é possível criar esse tipo de função com argumento opcional. http://academia.aegea.com.br/moodle/ Pág. 38 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo XII – Trabalhando com caixas de diálogo no VBA Aula 59 – Função MsgBox (caixa de mensagem) O que é? A função MsgBox exibe uma caixa de mensagem ao usuário e aguarda com que o usuário clique em um de seus botões para que esta seja fechada. A estrutura de chamada à função MsgBox se faz da seguinte forma: MsgBox([prompt][, buttons] [, title] [, helpfile, context]) As VbMsgBoxResult Prompt Obrigatória. Expressão de seqüência de caracteres exibida como mensagem na caixa de diálogo. O comprimento máximo de prompt é de aproximadamente 1.024 caracteres, dependendo da largura dos caracteres utilizados. Se prompt consistir em mais de uma linha, você poderá separar as linhas utilizando um caractere de retorno de carro (Chr(13)), um caractere de alimentação de linha (Chr(10)) ou uma combinação de caracteres de retorno de carro e alimentação de linha (Chr(13) & Chr(10)) entre cada linha. Buttons Opcional. Expressão numérica que é a soma de valores que especifica o número e o tipo de botões a exibir, o estilo de ícone a utilizar, a identidade do botão padrão e a modalidade da caixa de mensagem. Se omitido, o valor padrão para buttons é 0. http://academia.aegea.com.br/moodle/ Pág. 39 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Title Opcional. Expressão de seqüência de caracteres exibida na barra de título da caixa de diálogo. Se você omitir title, o nome do aplicativo será inserido na barra de título. Helpfile Opcional. Expressão de seqüência de caracteres que identifica o arquivo de Ajuda a ser utilizado para fornecer ajuda sensível ao contexto relativa à caixa de diálogo. Se helpfile for fornecido, context também deverá ser fornecido. Context Opcional. Expressão numérica que é o número de contexto da Ajuda atribuído ao tópico da Ajuda apropriado por seu autor. Se context for fornecido, helpfile também deverá ser fornecido. Definições As definições do argumento buttons são as seguintes: CONSTANTE VALOR DESCRIÇÃO VbOKOnly 0 Exibe somente o botão OK. VbOKCancel 1 Exibe os botões OK e Cancelar. VbAbortRetryIgnore 2 Exibe os botões Abortar, Repetir e Ignorar. VbYesNoCancel 3 Exibe os botões Sim, Não e Cancelar. VbYesNo 4 Exibe os botões Sim e Não. VbRetryCancel 5 Exibe os botões Repetir e Cancelar. vbCritical 16 Exibe o ícone Mensagem crítica. vbQuestion 32 Exibe o ícone Consulta de aviso. vbExclamation 48 Exibe o ícone Mensagem de aviso. vbInformation 64 Exibe o ícone Mensagem de informação. vbDefaultButton1 0 O primeiro botão é o padrão. vbDefaultButton2 256 O segundo botão é o padrão. vbDefaultButton3 512 O terceiro botão é o padrão. vbDefaultButton4 768 O quarto botão é o padrão. http://academia.aegea.com.br/moodle/ Pág. 40 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli vbApplicationModal 0 Janela restrita do aplicativo; o usuário deve responder à caixa de mensagem antes de continuar o trabalho no aplicativo atual. vbSystemModal 4096 Janela restrita de sistema; todos os aplicativos são suspensos até que o usuário responda à caixa de mensagem. vbMsgBoxHelpButton 16384 Adiciona o botão ‘Ajuda’ à caixa de mensagens VbMsgBoxSetForeground 65536 Especifica a janela da caixa de mensagens como a janela de primeiro plano vbMsgBoxRight 524288 O texto é alinhado à direita vbMsgBoxRtlReading 1048576 Especifica que o texto deve aparecer como leitura da direita para a esquerda em sistemas hebraico e árabe O primeiro grupo de valores (0 a 5) descreve o número e o tipo de botões exibidos na caixa de diálogo; o segundo grupo (16, 32, 48, 64) descreve o estilo de ícone; o terceiro grupo (0, 256, 512) determina qual botão é o padrão e o quarto grupo (0, 4.096) determina a modalidade da caixa de mensagem. Quando estiver somando números para criar um valor final para o argumento buttons, utilize somente um número de cada grupo. Observação: Essas constantes são especificadas pelo Visual Basic for Applications. Como resultado, os nomes podem ser utilizados em qualquer lugar do seu código em vez dos valores reais. Valores retornados CONSTANTE VALOR DESCRIÇÃO vbOK 1 OK vbCancel 2 Cancelar vbAbort 3 Abortar vbRetry 4 Repetir vbIgnore 5 Ignorar vbYes 6 Sim vbNo 7 Não http://academia.aegea.com.br/moodle/ Pág. 41 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Como o MsgBox é uma Função (Function), é possível capturar o valor retornado conforme a ação do usuário. Exemplo Apesar do grande número de opções e parâmetro oferecidos pelo MsgBox, vamos nos concentrar em sua funcionalidade mais simples neste momento, que é emitir mensagens ao usuários. Veja este exemplo de código abaixo: 1 Public Sub TesteMsgBox() 2 MsgBox "Seja bem vindo ao Microsoft Excel!" 3 End Sub Execute a função e terá o seguinte resultado: No código de exemplo, apenas o primeiro parâmetro é informado, o suficiente para fazer uso de mensagens simples. Porém é possível personalizar ainda mais a caixa de mensagem conforme mostra o próximo código de exemplo: 1 2 3 Public Sub TesteMsgBox() MsgBox "Seja bem vindo ao Microsoft Excel!", vbInformation, _ "Testando o MsgBox" End Sub Note que mais dois parâmetros foram informados, o parâmetro Buttone Title. Execute a função e terá o seguinte resultado: http://academia.aegea.com.br/moodle/ http://www.tomasvasquez.com.br/blog/microsoft-office/vba-emitindo-mensagens-personalizadas-com-msgbox Pág. 42 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli O parâmetro Title permitiu alterar o título da MsgBox, enquanto o parâmetro Button alterou o contexto da informação. Como foi informado que o botão a ser mostrado seria do tipo vbInformation, um ícone de informação foi adicionado ao caixa e mensagem. Outro tipos de Buttons podem ser utilizadas, que geraram diferentes ícones, conjunto de botões, alterando inclusive o som que é executado ao mostrar a caixa. Claro que o ideal é sempre colocar uma mensagem que esteja de acordo com o contexto. Veja a diferença da aparência se mudar o parâmetro para o seguinte: 1 2 3 Public Sub TesteMsgBox() MsgBox "Ocorreu algum erro!", vbCritical, "Testando o MsgBox" End Sub O resultado da execução do código será a seguinte: Note a mudança do ícone e do som emitido pelo aplicativo. A mensagem também foi alterada para refletir a contexto do ícone utilizado. http://academia.aegea.com.br/moodle/ http://www.tomasvasquez.com.br/blog/microsoft-office/vba-emitindo-mensagens-personalizadas-com-msgbox http://www.tomasvasquez.com.br/blog/microsoft-office/vba-emitindo-mensagens-personalizadas-com-msgbox Pág. 43 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 60 – Função InputBox Os parâmetros do InputBox: Em primeiro lugar, vejamos a sintaxe desta função Visual Basic: InputBox (prompt de [, título] [, padrão] [, xpos] [, ypos] [, helpfile] [,contexto]) As configurações entre colchetes ([]) são opcionais. Apenas uma configuração é obrigatória: o Prompt. Prompt (Mensagem) Esta é a mensagem que você envia para o usuário fazer o seu pedido. Esta configuração é obrigatória (mandatory) e deve ser como uma String (cadeia de caracteres). Observação: Em geral, convém fazer uma pergunta (ou enviar uma mensagem para o usuário) solicitando que ele digite uma resposta que não seja "sim" ou "não". Caso contrário, será preciso usar uma MsgBox. Exemplo: Dim Nom As String Nome= InputBox ("Digite seu nome;") Title (Título) Esta é a primeira configuração opcional. Como o próprio nome indica, é preciso adicionar um título ao diálogo. Este título será na forma de uma cadeia de caracteres (string) e será inserido na barra de título da caixa de diálogo. http://academia.aegea.com.br/moodle/ Pág. 44 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Exemplo: Dim Nome As String Nome = InputBox ("Digite o seu NOME:", "NOME") Observação: esta configuração é opcional, se ela for omitida, o padrão aparecerá com o nome do aplicativo utilizado na barra de título. Default (Valor padrão) A caixa de diálogo InputBox é composta de 4 partes: a janela, a barra de título, a caixa de texto e os botões. Aqui, Default vai exibir, em sua inicialização, um valor padrão na TextBox (caixa de texto). Exemplo: Dim Nome As String Nome = InputBox ("Digite o seu NOME;", "NOME", "OLIVEIRA") xPos & ypos Essas duas configurações também são opcionais e permitem colocar o nosso InputBox onde desejarmos. Trata-se do posicionamento horizontal (xpos) e vertical (ypos), mais especificamente, a distância, em pixels, que separa a borda esquerda (ou superior) do InputBox, da margem esquerda (ou superior) da tela. Da tela, e não do aplicativo. Exemplo: Dim Nome As String Nome = InputBox ("Digite o seu NOME", "NOME", "OLIVEIRA", 100, 100) http://academia.aegea.com.br/moodle/ Pág. 45 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Helpfile e Context Essas duas configurações opcionais são inseparáveis. Se você fizer referência a uma, deverá fazer referência a outra, caso contrário você obterá um erro de execução 5: argumento ou chamada de procedimento incorreto. Helpfile: ou arquivo de ajuda, é utilizado para identificar o arquivo de ajuda. Trata- se do seu nome (ex: "DEMO.HLP") ou do seu caminho de acesso (ex: "c:\Help.cam"). Context: ou ajuda contextual, é o número de ajuda contextual, atribuída pelo autor, para ajudar no tópico correspondente. No Microsoft Office Excel 2007, por exemplo, se estas duas configurações forem corretamente referenciadas, um botão adicional Help será adicionado ao diálogo. Este botão corresponde à tecla F1 do seu aplicativo. Exemplo: <codw basic>Dim Nome As String Nome = InputBox ("Digite o seu NOME", "NOME",,,, "c:\Help.cam", 0) </code> ou: Dim Nome As String Nome = InputBox ("Digite o seu NOME", "NOME", "OLIVEIRA", 200, 200, "DEMO.HLP", 10) Configurações em variáveis Assim como todas as funções VB, as configurações podem ser armazenadas em variáveis. Mas, muito cuidado para definir o tipo certo. Veja um exemplo que passa por todas as configurações variáveis intermediárias: http://academia.aegea.com.br/moodle/ Pág. 46 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Dim Número As Integer Mensagem Dim As String, Titulo As String, Por padrão As String, PosX As Integer, PosY As Integer, Ajuda AS String, NumAJUDA As Long Mensagem = "Entre um número inteiro" Titulo = "digitação numérica" Por padrão= "13" PosX = 250 PosY = 360 Help = "c:\Help.cam" NumAjuda = 3152 Número= InputBox (Mensagem, Título, PorPadrão, PosX, PosY, NumAjuda) Observação: Aqui, nós digitamos, por padrão, um valor do tipo String: PorPadrão= "13". Ora, nossa variável encarregada de armazenar o resultado do InputBox é Integer. Assim, esperaríamos um retorno de erro Tipo errado. Mas não, neste caso, VB sabe reconhecer que o valor digitado é numérico. Para confirmar isso, basta adicionar no final do código anterior: MSGBox Número * 2 InputBox - os botões Existem três botões diferentes possíveis no InputBox: O botão OK Quando o usuário pressiona este botão (ou pressiona a tecla "Enter"), a função InputBox retorna tudo o que a caixa de texto contém. Se nada foi digitado, ela retorna a cadeia: "". http://academia.aegea.com.br/moodle/ Pág. 47 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli O botão CANCELAR Quando o usuário pressiona esta tecla, a função InputBox retorna a sequência de comprimento zero: "". O botão AJUDA Este botão abre a ajuda do aplicativo ou a ajuda correspondente ao arquivo e contexto de ajuda, definidos nas configurações. Erros comuns Saiba que com este recurso, você deverá lidar com tudo que é tipo de erro que o usuário possa fazer. Do erro de entrada ao erro de incompreensão, passando pelo erro voluntário. Na certa, você vai precisar de um gerenciador de erros, adaptado e integrado ao seu código. Erro de tipo de digitação Erro de execução "13" Incompatibilidade de tipo: esta mensagem de erro aparece quando você pede ao usuário um determinado tipo de dado (que você declara em suas variáveis) e digita outro. Por exemplo, você pede a introdução de um número inteiro e ele entra um número decimal. Exemplo: Dim Número As Integer 'Aqui nós sabemos que é pedido um Integer Número = InputBox ("Digite um número inteiro:", "Digitação numérica") Se o usuário digitar 13,5 e pressionar o botão OK, uma mensagem de erro aparecerá. Mesma coisa, mesma sanção, se o usuário digitar uma letra, ou não digitar nada e pressionar o botão Cancelar. http://academia.aegea.com.br/moodle/ Pág. 48 Módulo XII – Trabalhandocom caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Como remediar esta situação? Simplesmente com a ajuda de um processamento de erro. Exemplo: Dim Número As Integer "Em caso de erro, acesse a etiqueta <bold>Tipo errado</bold> On Error GoTo Tipo errado Número = InputBox ("Digite um número inteiro:", "Digitação numérica") `Veja o exemplo do tratamento desejado Selecione a casa Número Case Is > = 18: MsgBox "Menção Muito Bem" Case Is > = 16: MsgBox "Menção Bem" Case Is > = 14: MsgBox "Menção Passável" Case Is > = 10: MsgBox "Nenhuma menção" Case Is > = 8: MsgBox "Menção nada boa" Case Is > = 6 MsgBox "Menção ruim" Case Else: MsgBox "Menção muito ruim" End Select Exit Sub 'Não esquecer a Saída para não tratar Tipo Errado Tipo Errado: MsgBox "Você não digitou um número inteiro", vbCritical Número de caracteres Visível pelo seu tamanho, o InputBox não é feito para inserir dados longos. Na verdade, a entrada é limitada a 255 caracteres. Além disso, a função InputBox só envia 254. Portanto, cuidado para não pedir dados muito "longos" através dela. http://academia.aegea.com.br/moodle/ Pág. 49 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Variável obrigatória A função InputBox precisa de uma variável para ser armazenada nela. Ao contrário da MsgBox que não precisa disso, sem variável você obterá certamente a mensagem de erro: Erro de compilação Esperado: = Exemplo do que não devemos fazer: InputBox ("Digite um número inteiro: ", "Digitação numérica") Botão CANCELAR Como vimos anteriormente, não é possível cancelar se o código pedir um número. Na verdade, a função retorna uma string ("" é uma cadeia de caracteres...) quando clicarmos neste botão; teremos o erro 13, ou seja, incompatibilidade de tipo. Para uma variável declarada As String, isso é diferente. Se o usuário cancelar, a variável conterá um dado: "". Ora, este dado pode ser primordial para o sucesso do resto do seu código. Como evitar isso? Fazendo looping, enquanto o comprimento da cadeia enviada pela função for igual a zero. Assim: Exemplo: Dim Nome As String Nome = InputBox ("Digite seu NOME: ", "Entre NOME") Do While Len (Name) = 0 MsgBox "Este dado é obrigatório" Nome = InputBox ("Digite seu NOME:", "Entre NOME") Loop MsgBox "Seu NOME é: " & Nome http://academia.aegea.com.br/moodle/ Pág. 50 Módulo XII – Trabalhando com caixas de diálogo no VBA http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Pois é, mas isso cria um problema adicional. Se o usuário, após um momento de pouca sorte, só vir o botão Cancelar, minha macro vai ficar dando voltas para sempre? Para remediar isso, vamos inserir um registro e uma porta de saída. Exemplo: Dim Nome As String Dim, Cpt As Integer Cpt = 1 Nome = InputBox ("Digite seu NOME:", "Entre NOME") Do While Len (Nome) = 0 Cpt = Cpt + 1 If Cpt = 4 Then GoTo Muitoburroparacontinuar MsgBox "Este dado é obrigatório. Mais que " & 4 -. Cpt & " tentativas." Nome = InputBox ("Digite seu NOME:", "Entre NOME") Loop MsgBox "Seu NOME é:" & Nome Exit Sub Muitoburroparacontinuar: MsgBox "Por favor, pare com a informática. Aula 61 – Método GetOpenFileName (janela para abrir arquivo) O método GetOpenFileName no VBA é responsável por exibir uma caixa de diálogo (como a da imagem abaixo), onde o usuário pode selecionar um determinado arquivo numa pasta do computador. http://academia.aegea.com.br/moodle/ Pág. 51 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Módulo XIII – Trabalhando com formulários e controles de formulários Aula 62 – Visão geral Um formulário, seja impresso ou online, é um documento projetado com uma estrutura e um formato padrão que facilitam a captura, a organização e a edição de informações. ✓ Formulários impressos contêm instruções, formatação, rótulos e espaços em branco para escrever ou digitar dados. Você pode usar o Excel e os modelos do Excel para criar formulários impressos. ✓ Formulários online contêm os mesmos recursos de formulários impressos e também possuem controles. Controles são objetos que exibem dados ou permitem que os usuários facilmente insiram ou editem dados, realizem ações ou façam seleções. Em geral, esses controles tornam o formulário mais fácil de utilizar. Exemplos de controles comuns incluem caixas de listagem, botões de opção e botões de comando. Controles também podem executar macros atribuídas e responder a eventos, como cliques com o mouse, por meio da execução de um código VBA (Visual Basic for Applications). Um UserForm do objeto é uma caixa de diálogo ou janela que compõe a parte da interface do usuário do aplicativo. Coleção UserForms é uma coleção cujos elementos representam cada carregado UserForm em um aplicativo. A coleção de UserForms tem uma propriedade Count, uma propriedade do Item e um método Add. Contagem Especifica o número de elementos na coleção; Item (o membro padrão) especifica http://academia.aegea.com.br/moodle/ https://msdn.microsoft.com/pt-br/library/office/gg264568.aspx https://msdn.microsoft.com/pt-br/library/office/gg264568.aspx Pág. 52 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli um membro da coleção específico; e Adicionar um novo elemento UserForm a coloca na coleção. Para criar uma caixa de diálogo personalizada, você deve criar um UserForm. Para criar um UserForm, clique em UserForm no menu Inserirno Editor do Visual Basic. Use a janela Propriedades para alterar o nome, o comportamento e a aparência do formulário. Por exemplo, para alterar a legenda em um formulário, defina a propriedade Caption. Como exibir um UserForm A sintaxe é usada para exibir um UserForm programaticamente é o seguinte: UserFormName.Show Para exibir um UserForm cujo nome seja UserForm1, use o código a seguir: UserForm1.Show Você pode carregar um UserForm na memória sem exibi-lo realmente. Um UserForm complexo pode levar vários segundos para aparecer. Como você pode pré-carregar um UserForm na memória, você pode decidir quando provocar essa sobrecarga. Para carregar UserForm1 na memória sem exibi-lo, use o seguinte código: Load UserForm1 Para exibir o formulário de usuário, você deve usar o método Show que foi mostrado anteriormente. http://academia.aegea.com.br/moodle/ Pág. 53 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Como ocultar temporariamente um UserForm Se você deseja ocultar temporariamente um UserForm, use o método Ocultar. Você talvez queira ocultar um UserForm, se seu aplicativo envolve a movimentação entre os UserForms. Para ocultar um UserForm, utilize o seguinte código: UserForm1.Hide Como remover um UserForm da memória Para remover um UserForm da memória, use a instrução Unload. Para descarregar um UserForm é chamado UserForm1, utilize o seguinte código: Unload UserForm1 Se você descarregar um UserForm em um procedimento de evento que está associado com um UserForm ou que está associado com um controle em um formulário de usuário (por exemplo, você clica um controle CommandButton ), você pode usar "Me" palavra-chave em vez do nome do UserForm. Para usar o "Me" palavra-chave para descarregar um UserForm, use o seguinte código: Unload Me Como usar eventos UserForm Os UserForms suportam muitos eventos predefinidos que você pode anexar os procedimentos do VBA. Quando o evento ocorrer,é executado o procedimento anexado ao evento. Uma única ação executada por um usuário pode iniciar vários http://academia.aegea.com.br/moodle/ Pág. 54 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli eventos. Entre os eventos mais frequentemente usados para um UserForm são o evento Inicializar, o evento Clicar e o evento Finalizar. Observação: Um módulo do Visual Basic que contenha um procedimento de evento pode ser chamado como um módulo "UserForm atrás". Um módulo que contém os procedimentos de evento não é visível na coleção Modules da janela do Microsoft Project Explorer do Editor do Visual Basic. Clique duas vezes no corpo de um UserForm para exibir o módulo do código do UserForm. Aula 63 – Exemplo de Userform Aula 64 – Controles de Userform Os controles de formulários podem ser inseridos através da caixa de ferramentas do VBA Editor. Controles de formulário são os controles originais que são compatíveis com versões anteriores do Excel, começando com a versão 5.0. Esses controles também foram projetados para uso em planilhas de macros XLM. http://academia.aegea.com.br/moodle/ Pág. 55 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Use Controles de Formulário quando desejar fazer referência a dados de célula e interagir com eles facilmente sem usar código VBA ou quando quiser adicionar controles a planilhas de gráfico. Por exemplo, depois de adicionar um controle de caixa de listagem a uma planilha e vinculá-lo a uma célula, você pode retornar um valor numérico para a posição atual do item selecionado no controle. Em seguida, pode usar esse valor numérico junto com a função ÍNDICE para selecionar diferentes itens na lista. Também é possível executar macros usando controles de Formulário. Você pode anexar uma macro existente a um controle ou escrever e gravar uma nova macro. Quando um usuário do formulário clicar no controle, este executará a macro. No entanto, esses controles não podem ser adicionados a UserForms, usados para controlar eventos ou modificados para executar scripts da Web em páginas da Web. http://academia.aegea.com.br/moodle/ Pág. 56 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Resumo de controles de formulário Nome do botão Exemplo Descrição Rótulo Identifica a finalidade de uma célula ou caixa de texto ou exibe texto descritivo (como títulos, legendas, imagens) ou breves instruções. Caixa de grupo Controles relacionados a grupos em uma unidade visual de um retângulo com um rótulo adicional. Em geral, botões de opção, caixas de seleção ou itens de conteúdo intimamente relacionados são agrupados. Botão Executa uma macro que realiza uma ação quando um usuário clica nele. Um botão também é chamado de botão de ação. http://academia.aegea.com.br/moodle/ Pág. 57 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Nome do botão Exemplo Descrição Caixa de seleção Ativa ou desativa um valor que indica uma opção oposta ou não ambígua. Você pode marcar mais de uma caixa de seleção em uma planilha ou em uma caixa de grupo. Uma caixa de seleção pode ter um destes três estados: marcada (ativada), desmarcada (desativada) e mista, significando uma combinação dos estados ativado e desativado (como em uma seleção múltipla). Botão de opção Permite uma única opção dentro de um conjunto limitado de opções mutuamente exclusivas; um botão de opção está geralmente contido em uma caixa de grupo ou em um quadro, podendo ter um destes três estados: marcado (ativado), desmarcado (desativado) e misturado, significando uma combinação dos estados ativado e desativado (como em uma seleção múltipla). Um botão de opção também é chamado de botão de rádio. http://academia.aegea.com.br/moodle/ Pág. 58 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Nome do botão Exemplo Descrição Caixa de listagem Exibe uma lista de um ou mais itens de texto na qual um usuário pode escolher uma opção. Use uma caixa de listagem para exibir diversas opções que variam em número ou conteúdo. Existem três tipos de caixas de listagem: • Uma caixa de listagem de seleção única permite apenas uma opção. Nesse caso, ela se assemelha a um grupo de botões de opção, com a diferença de que a caixa de listagem pode lidar com um grande número de itens de maneira mais eficiente. • Uma caixa de listagem de seleção múltipla permite uma opção ou opções contíguas (adjacentes). • Uma caixa de listagem com seleção estendida permite uma opção, opções contíguas e opções não contíguas (ou disjuntas). http://academia.aegea.com.br/moodle/ Pág. 59 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Nome do botão Exemplo Descrição Caixa de combinação Combina uma caixa de texto com uma caixa de listagem de modo a criar uma caixa de listagem suspensa. Uma caixa de combinação é mais compacta do que uma caixa de listagem, mas requer que o usuário clique na seta para baixo para exibir a lista de itens. Use uma caixa de combinação para permitir que um usuário digite uma entrada ou escolha apenas um item da lista. O controle exibe o valor atual na caixa de texto, independentemente de como esse valor foi inserido. Barra de rolagem Percorre um intervalo de valores quando você clica nas setas de rolagem ou arrasta a caixa de rolagem. Além disso, é possível percorrer uma página (ou um intervalo predefinido) de valores clicando na área entre a caixa de rolagem e uma das setas de rolagem. Normalmente, um usuário também pode digitar um valor de texto diretamente em uma célula ou caixa de texto associada. Botão de rotação Aumenta ou diminui um valor, como um incremento de número, um horário ou uma data. Para aumentar o valor, clique na seta para cima e, para diminuí-lo, clique na seta para baixo. Normalmente, um usuário também pode digitar um valor de texto diretamente em uma célula ou caixa de texto associada. http://academia.aegea.com.br/moodle/ Pág. 60 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Aula 65 – Propriedades úteis do Userform Formulários de usuário têm Propriedades que determinam a aparência como posição, tamanho e cor; e aspectos do seu comportamento. Você pode checar as propriedades de um UserForm na janela de propriedades do Editor de VBA. Ao criar formulários de usuário, defina a propriedade BorderStyle para definir bordas e define a propriedade Caption para colocar o texto na barra de título. No código, você pode usar o Ocultar e Mostrar métodos para tornar um UserForm invisíveis ou visíveis em tempo de execução. Aula 66 – Principais eventos do Userform Formulários de usuário também podem responder a eventos iniciada por um usuário ou disparado pelo sistema. Por exemplo, você pode escrever o código no procedimento de evento inicializar de UserForm para inicializar variáveis de nível de módulo antes UserForm seja exibida. Além das propriedades e eventos, você pode usar os métodos para manipular os formulários de usuário usando o código. Por exemplo, você pode usar o método Move para alterar o local e o tamanho de um UserForm. UserForm é um tipo de dados do objeto. Você pode declarar variáveis como tipo UserForm antes de defini-los para uma instância de um tipo de UserForm declaradasem tempo de design. Da mesma forma, você pode passar um argumento para um procedimento como tipo UserForm. Você pode criar várias instâncias de formulários do usuário no código, usando a palavra-chave New em instruções Dim, Defina e estática. http://academia.aegea.com.br/moodle/ Pág. 61 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Você pode acessar a coleção de controles em um UserForm usando a coleção Controls. Por exemplo, para ocultar todos os controles em um UserForm, use código semelhante ao seguinte: For Each Control in UserForm1.Controls Control.Visible = False Next Control Evento Initialize: Ocorre depois que um objeto é carregado, mas antes de ser mostrada. Sintaxe Private Sub objeto _Initialize() O espaço reservado do objeto representa uma expressão de objeto que avalia para um objeto na lista Aplica-se a. O evento Initialize geralmente é usado para preparar um aplicativo ou um UserForm para uso. Variáveis são atribuídos valores iniciais e controles podem ser movidos ou redimensionados para acomodar os dados de inicialização. Eventos ativar e desativar O evento Activate ocorre quando um objeto se torna a janela ativa. O evento Deactivate ocorre quando um objeto não é mais a janela ativa. Sintaxe Private Sub objeto _Activate() Private Sub objeto _Deactivate() http://academia.aegea.com.br/moodle/ Pág. 62 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli O espaço reservado do objeto representa uma expressão de objeto que avalia para um objeto na lista Aplica-se a. Um objeto pode se tornar ativo usando o método Show no código. O evento Activate somente pode ocorrer quando um objeto está visível. Um UserForm carregado com Load não estiver visível, a menos que você use o método Show. Os eventos ativar e desativar somente ocorrerem quando você mover o foco em um aplicativo. Mover o foco para ou de um objeto em outro aplicativo não aciona o evento. O evento Deactivate não ocorre quando o descarregamento de um objeto. Evento QueryClose Ocorre antes que um UserForm feche. Sintaxe Private Sub UserForm_QueryClose( cancel As Integer, closemode As Integer) A sintaxe do evento QueryClose tem estas partes: Parte Descrição cancelar Um número inteiro. A configuração desse argumento como qualquer valor diferente de 0 para o evento QueryClose em todos os formulários de usuário carregados e impede que o UserForm e o aplicativo fechem. closemode Um valor ou constante que indica a causa do evento QueryClose. Return Values O argumento closemode retorna os seguintes valores: http://academia.aegea.com.br/moodle/ https://msdn.microsoft.com/pt-br/library/office/gg264568.aspx https://msdn.microsoft.com/pt-br/library/office/gg264568.aspx Pág. 63 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli Constante Valor Descrição vbFormControlMenu 0 O usuário escolheu o comando Close do menu Control no UserForm. vbFormCode 1 A instrução Unload é invocada do código. vbAppWindows 2 A sessão operacional atual do Windows está terminando. vbAppTaskManager 3 O Task Manager do Windows está fechando o aplicativo. Estas constantes estão listadas na biblioteca de objetos do Visual Basic for Applications no Pesquisador de Objetos. Observe que vbFormMDIForm também é especificado no Object Browser, mas ainda não tem suporte. Remarks Este evento é tipicamente usado para garantir que não haja tarefas inacabadas nos formulários do usuário incluídas em um aplicativo antes que o aplicativo seja fechado. Por exemplo, se um usuário não tiver salvado dados novos em qualquer UserForm, o aplicativo poderá solicitar que o usuário salve os dados. Quando um aplicativo fechar, você poderá usar o procedimento de eventos QueryClose para definir a propriedade Cancel como True, parando o processo de fechamento. Aula 67 – Label propriedades Controles de rótulo são principalmente usados para descrever outros controles em um formulário de usuário. Um controle de rótulo não pode ser editado pelo usuário durante a execução do UserForm. Use a propriedade Caption para definir ou retornar o http://academia.aegea.com.br/moodle/ https://msdn.microsoft.com/pt-br/library/office/gg264568.aspx https://msdn.microsoft.com/pt-br/library/office/gg264568.aspx Pág. 64 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli texto em um controle Label. Outras propriedades usadas com frequência para a formatação de um controle de rótulo incluem a propriedade Font e a propriedade ForeColor. Como usar uma instrução WITH para formatar um controle Label Para usar a instrução WITH para alterar as propriedades de um controle Label, siga estas etapas: 1. Inicie o Excel e abra uma nova pasta de trabalho em branco. 2. No menu Ferramentas, aponte para Macro e, em seguida, clique em Editor do Visual Basic. 3. No menu Inserir, clique em UserForm para inserir um formulário de usuário em sua pasta de trabalho. 4. Adicione um controle de rótulo ao UserForm. 5. Adicione um controle CommandButton ao UserForm. 6. Clique duas vezes no controle CommandButton para abrir a janela de código para o formulário de usuário. 7. Na janela código, digite o seguinte código para o evento Click CommandButton1: Private Sub CommandButton1_Click() With Label1 ' Set the text of the label. .Caption = "This is Label Example 1" ' Automatically size the label control. .AutoSize = True .WordWrap = False ' Set the font used by the Label control. .Font.Name = "Times New Roman" .Font.Size = 14 .Font.Bold = True ' Set the font color to blue. .ForeColor = RGB(0, 0, 255) End With End Sub 8. No menu Executar, clique em Executar Sub/UserForm. http://academia.aegea.com.br/moodle/ Pág. 65 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli 9. Clique no CommandButton. Aula 68 – Label eventos O conteúdo não apresentado na Aula 67 estão disponíveis na vídeo-aula do seu curso. Aula 69 - TextBox propriedades Controles TextBox são frequentemente usados para coletar entrada do usuário. A propriedade Text contém a entrada que é feita em um controle TextBox. Como usar um controle TextBox para validar uma senha Se você definir a propriedade PasswordChar de um controle TextBox, ele se torna um controle de "edição mascarada". Cada caractere digitado no controle TextBox é substituído visualmente pelo caractere que você especificar. Para usar um controle TextBox para validar a senha, execute estas etapas: 1. Inicie o Excel e abra uma nova pasta de trabalho em branco. 2. No menu Ferramentas, aponte para Macro e, em seguida, clique em Editor do Visual Basic. 3. No menu Inserir, clique em UserForm para inserir um formulário de usuário em sua pasta de trabalho. 4. Adicione um controle TextBox para o formulário de usuário. 5. No menu Exibir, clique em Propriedades para tornar visível a janela Propriedades. http://academia.aegea.com.br/moodle/ Pág. 66 Módulo XIII – Trabalhando com formulários e controles de formulários http://academia.aegea.com.br/moodle/ - Profº Ricardo Bortoli 6. Na propriedade PasswordChar do controle TextBox, digite *. Observação: Você está alterando o valor de um asterisco. 7. Adicione um controle CommandButton ao UserForm. 8. Clique duas vezes no controle CommandButton para abrir a janela de código para o formulário de usuário. 9. Na janela código,
Compartilhar