Capítulo I Preliminares: Visual Basic na planilha eletrônica Excel. 1.1. Editor do Visual Basic do Excel (VBA) A maioria dos problemas desse livro será resolvida com o VBA da planilha eletrônica Excel, para isto serão escritos programas (subrotinas e/ou funções) no editor do VBA. Para abrir este editor deve-se clicar na aba desenvolvedor do Excel e, em seguida, no ícone do Visual Basic. A figura 1.1.1 mostra a janela inicial do VBA. Figura 1.1.1: Tela inicial do VBA Excel Para escrever um programa deve ser aberto um módulo. Clica-se na aba inserir e em seguida em módulo. Figura 1.1.2: Inserindo um módulo no VBA Excel. 7
Figura 1.1.3: Tela do VBA Excel com um módulo aberto. A guia desenvolvedor pode não estar visível na barra de comandos (menu) do Excel, para isto, o usuário deve proceder da seguinte forma: No Excel da versão 2013 ou 2010 do Microsoft Office: 1) Clica-se na guia Arquivo e em seguida em Opções; 2) Clica-se em Personalizar Faixa de Opções ; 3) Em Personalizar Faixa de Opções e em Guias Principais marca-se a caixa de seleção Desenvolvedor. No Excel da versão 2007 do Microsoft Office: 1) Clica-se no Botão do Microsoft Office e, em seguida, em Opções do Excel ; 2) Clica-se em Personalizar e, em seguida, marca-se a caixa de seleção Mostrar Guia Desenvolvedor na Faixa de Opções. 1.2. Subrotinas (ou subprogramas) e funções no VBA Excel A sintaxe de uma subrotina (a forma mais simples) é dada a seguir: Sub <nome>() << comandos >> End Sub 8
No lugar de <nome> deve-se escrever o nome da subrotina (a escolha do programador). A expressão <<comandos>> deve ser substituída por comandos da linguagem de programação do VBA Excel. A execução de uma subrotina pode ser feita acionando-se a tecla F5. O cursor deve estar em uma das linhas da subrotina. Nota: executar uma subrotina e/ou função, significa acionar a função (fazê-la funcionar na planilha). Exemplo 1.2.1: Sub nome() MsgBox ("programa em visual basic") End Sub Aqui, a execução da subrotina nome vai produzir uma janela com o texto "programa em visual basic". Figura 1.2.1: execução da subrotina nome. A execução se dará na planilha que estiver aberta. Observe que o local dos argumentos da função nome (os parênteses após o verbete nome) está vazio. Normalmente uma subrotina terá a área de argumentos preenchida se for acionada por outra. Isso será visto posteriormente. Uma função tem a seguinte sintaxe: Function <nome>(<var>) <nome> = < função cuja variável é var > 9
A expressão <nome> será substituída pelo nome da função, escolhida pelo programador. <var> representa o nome da variável da função. Em geral, uma função do VBA é executada dentro de uma planilha do Excel. Exemplo 1.2.2: Function funcao(var) funcao = var ^ 2 Esta função produz um número que é o valor da variável ao quadrado (elevado a 2). A planilha seguinte mostra a execução desta função. Em qualquer planilha aberta do Excel, na célula A1 (coluna A linha 1), foi digitado =funcao(2) O resultado é mostrado na planilha: A B C D E 1 4 2 3 Tabela 1.2.1: Resultado da fórmula =funcao(2). Observa-se que, na sua execução, o nome da função é precedido pelo sinal de igualdade. Esse é o comando da planilha Excel para que a célula seja preenchida com o resultado da função. Uma função pode ter como argumento um endereço de célula da planilha. Por exemplo, se na planilha ilustrada na tabela 1, na célula C1, for escrita a fórmula =funcao(a1), a planilha se torna: A B C D E F G H 1 4 16 2 3 Tabela 1.2.2: Inclusão de uma função que faz referência a outra célula. 10
Uma função pode apresentar mais de uma variável, como no exemplo a seguir. Exemplo 1.2.3: Function expo(x,y) expo = x^y Essa função escreve o resultado da fórmula que eleva a variável x à potência y. Na tabela a seguir foram digitados os valores de 2 e 3 nas células A1 e B1 respectivamente. Na célula D1 é digitada a fórmula =expo(a1;b1) O resultado que aparece nesta célula é, então, 2 3 = 8. A B C D E F 1 2 3 8 2 Tabela 1.2.3: Execução da função expo. Observa-se que, quando é usada uma função de mais de uma variável na planilha, os argumentos são separados por ponto e vírgula. O argumento de uma função pode ser uma matriz. Um exemplo é exposto a seguir: Exemplo 1.2.4: Function mat(m) mat = M.Rows.Count Nesse exemplo, a função escreve na célula a quantidade de linhas da matriz M. A tabela abaixo ilustra a função: A B C D E 1 8 3 3 2 U V 3 1 2 4 Tabela 1.2.4: Execução da função mat. 11
Na célula D1 tem-se a expressão: =mat(a1:b3), ou seja: a matriz mat equivale às linha 1, 2 e 3, e às colunas A e B. ou, 8 3 M mat( A1: B1) u v 1 2 O comando M.Rows.Count representa o seguinte: Rows é um objeto (ou propriedade). Count é um método. Esse método conta e imprime na célula o número de linhas da matriz M. Exemplo 1.2.5: Se a função for escrita como segue: Function mat(m) mat = M.Rows(1).Columns(2) O resultado, considerando a matriz da tabela 4, será 3. O comando M.Rows(1).Columns(2) escreve o elemento da matriz M que está na linha 1 e coluna 2 (célula B2). As funções anteriores retornam como resultado um número. Uma função pode retornar, também, uma matriz. Estas funções serão abordadas mais à frente. Na figura 1.2.2 é mostrada uma tela, de um mesmo módulo, com mais de uma subrotina. Para executar uma delas, deve-se posicionar o cursor em qualquer linha da subrotina escolhida, e acionar-se a tecla F5. 12
Figura 1.2.2: Tela de um módulo com mais de uma subrotina. Na subrotina nome2, é acionada uma função escrita no mesmo módulo. Uma subrotina pode, também, acionar uma ou mais subrotinas. A figura 1.2.3 ilustra isso. Figura 1.2.3: Exemplo de uma subrotina acionada por outra. Na subrotina nome3, tem-se a seguinte expressão: ' Esta rotina chamará outra Essa expressão é um comentário. O VBA vai desconsiderar expressões escritas após o apóstrofo. Os comentários são registros, do próprio programador, importantes para a compreensão (dele e outros usuários) do programa. 1.3. Nota: sobre arquivos do Excel Sobre arquivos do Excel com subrotinas e/ou funções: As planilhas eletrônicas que contem subrotinas e/ou funções (também denominadas macros) devem ser salvas como Pasta de Trabalho Habilitada para Macro do Excel. 13