Curso Excel VBA - Apostila
Curso Excel VBA - Apostila
Curso Excel VBA - Apostila
ndice analtico
1 2
2 2 3 3 3 4 4 6 7 8 9 11 11 12 14 16 16 17 17 17 18 18 19
MENUS DE APLICAO
A interface com o usurio O sistema de menu Criando um novo item de menu dentro do menu padro Criando um novo boto na barra de ferramentas
20
20 20 20 22
FERRAMENTAS ESTATSTICAS
Instalar e usar as Ferramentas de anlise Para instalar as Ferramentas de anlise Para usar as Ferramentas de anlise Ferramenta de anlise Estatstica Descritiva Caixa de dilogo Estatstica Descritiva
23
24 24 24 24 25
ii
Ferramenta de anlise Histograma Caixa de dilogo Histograma Ferramenta de anlise Gerao de Nmero Aleatrio Caixa de dilogo Gerao de Nmero Aleatrio Ferramenta de anlise Regresso Caixa de dilogo Regresso
26 26 28 28 30 30
MACROS
Gravar uma macro Editar uma macro Explorer do projeto A janela de cdigo Elementos da janela Digitando cdigo Executar uma macro Adicionar controles a uma planilha Tipos de botes, caixas de seleo e outros controles na barra de Formulrios Usando referncias relativas e referncias absolutas Referncias absolutas e relativas em cdigo VBA Compreendendo a sintaxe do Visual Basic Sintaxe do comando Activate Sintaxe da funo MsgBox Sintaxe da instruo Option Compare Sintaxe da instruo Dim A linguagem do VBA Objetos, propriedades, mtodos e eventos Objetos do VBA Objeto Application Como usar o objeto Application Objeto Worksheets Propriedade Worksheets Propriedade ActiveSheet Objeto Range Propriedade Range Propriedade Cells Range e Cells Propriedade Offset Mtodo Union A linguagem VBA Tipos de dados Programao estruturada If ... Then ... Else Select Case Do ... Loop
32
32 33 34 35 35 36 37 37 37 39 40 40 40 41 41 42 42 43 44 44 44 45 45 45 46 46 46 47 47 48 49 50 52 52 53 55
iii
For ... To ... Next For ... Each ... Next With...End With Regras de nomenclatura de objetos Trabalhando com dados da planilha Loop atravs de um intervalo de clulas Selecionar e ativar clulas Trabalhar com a clula ativa Criando uma interface com o usurio Erros e tratamentos de erros Direcionando a execuo quando ocorre um erro A instruo On Error A instruo Resume Saindo de um procedimento Tratando os erros em procedimento aninhados Obtendo informaes sobre um erro O objeto Err O objeto Error e a coleo Errors O mtodo AccessError O evento Error Procedimentos automticos
56 57 59 64 66 70 71 73 74 77 77 77 78 78 79 80 80 81 81 81 82
83
83 83
iv
Introduo
O presente trabalho procura apresentar, de uma maneira o mais prtica possvel, um aplicativo que presena constante em quase todos os computadores hoje em dia mas que, apesar disso, permanece com grande parte de suas reais capacidades ignoradas: o Microsoft Excel. O fato que muitas vezes gastamos um tempo precioso em tarefas repetitivas de manipulao de dados e clculos que poderiam ser realizados em uma frao aprecivel deste tempo, desde que nos debrucemos sobre algumas ferramentas de uso at simples, mas que permanecem escondidas atrs de opes de menus que no utilizamos freqentemente ou at mesmo do medo de enfrentar algumas linhas de programao, como se fosse isto tarefa para iniciados deste mundo de linguagens e cdigos. Durante o estudo deste trabalho, buscaremos desmistificar as ferramentas mais eficazes para introduo de dados em tabelas, busca, filtragem e resumo destes dados, visando extrair a informao oculta por trs de um emaranhado de valores e identificadores. Como ser visto, so ferramentas simples, mas no to simples que no requeiram uma experincia anterior na utilizao bsica do Microsoft Excel, em seus conceitos de utilizao de planilhas, formatao de dados, criao de frmulas para clculos e gerao de grficos. Todos estes assuntos sero considerados como alicerce inicial para este estudo.
Utilizando tabelas
No Microsoft Excel, pode-se resumir ou analisar valores em uma lista de vrias maneiras: Para calcular o valor de total geral de uma coluna ou linha de dados, pode-se usar o recurso AutoSoma para criar rapidamente uma frmula que some os valores na coluna ou linha. Pode-se calcular automaticamente subtotais de valores em uma lista. Por exemplo, se voc tiver uma lista que contm valores de vendas de vendedores de diferentes regies, pode-se calcular valores de subtotal para cada vendedor ou cada regio. Para calcular o valor total de linhas em uma lista que atendam a uma condio especfica, pode-se usar o comando AutoFiltro para exibir as linhas que atendem condio e usar, em seguida, o recurso AutoSoma para calcular o total para as linhas visveis apenas. Para resumir somente os valores que atendem a critrios complexos, como "fornecer uma conta das linhas ou registros em que as vendas foram superior a 1.000 mas inferiores a 2.500", use uma funo de banco de dados. Para usar uma funo de banco de dados, voc deve criar um intervalo de critrios para especificar a condio a ser atendida. Pode-se criar uma frmula que calcule totais para os valores de uma lista, com base em uma condio especfica, usando o Assistente de soma condicional. Pode-se resumir os valores de uma lista de um relatrio que use mtodos de clculo e formataes especificadas por voc atravs de uma Tabela dinmica.
Rtulos de coluna
Crie rtulos de coluna na primeira linha da lista. O Microsoft Excel usa estes rtulos para criar relatrios e para localizar e organizar dados. Use estilos de fonte, alinhamento, formato, padro, borda ou maisculas para os rtulos de coluna que sejam diferentes do formato atribudo aos dados da lista. Use bordas de clula, e no linhas em branco ou tracejadas, para inserir linhas abaixo dos rtulos quando desejar separar os rtulos dos dados.
no exista ainda nenhum dado inserido, basta digitar os rtulos de identificao das colunas onde sero introduzidos dados e acionar o comando Formulrio para comear uma nova lista. Ser exibido ento um formulrio, como mostrado acima, contendo todos os campos selecionados da tabela. Clicando-se em Novo, criado um novo registro limpo que pode ser utilizado para a introduo de dados. A partir da, pode-se ir digitando os dados e teclando-se TAB aps cada 3
introduo. Ao final dos dados, o cursor voltar para a tecla Novo. Caso se queira continuar a introduzir dados, basta teclar ENTER neste momento e retornar a digitao. Pode-se tambm eliminar linhas da tabela atravs deste formulrio, utilizando-se a tecla Excluir. Cada excluso movimentar os dados remanescentes nas colunas para cima em uma linha. Assim, deve-se ter muito cuidado ao eliminar clulas quando nem todos as colunas de uma lista esto selecionadas, j que a excluso provocar a perda da associao entre os dados. Uma caracterstica menos conhecida desta ferramenta sua capacidade de funcionar como ferramenta de filtro. Esta funo pode ser acionada utilizando-se a tecla Critrios. Neste momento, ser exibido um registro em branco onde o usurio poder introduzir critrios de seleo de registros (exemplos: > 10, <=1000, <> Carlos, etc.) em determinados campos. Note que possvel especificar mais de um critrio ao mesmo tempo. Desta maneira, pode-se criar uma regra que procure aqueles registros que possuam Altura > 1,50 e Idade > 16, por exemplo. Aps definir os critrios, basta utilizar a tecla Formulrio para retornar ao formulrio de entrada de dados. Atravs das teclas Localizar anterior e Localizar prxima pode-se acessar todos os registros que atendam aos critrios especificados.
Para especificar somente datas ou horas, clique em Data ou Hora. 4. Clique no operador que voc deseja na caixa Dados e especifique o limite superior ou inferior para os dados, ou ambos os limites, dependendo do operador selecionado. Pode-se inserir valores, referncias de clulas ou frmulas para os limites. Se voc desejar permitir que a clula que voc est restringindo fique em branco, ou se voc definir limites que usam uma referncia de clula ou frmula que depende de clulas que estejam inicialmente em branco, certifique-se de que Ignorar em branco esteja marcada. Para impor as restries que voc definiu para as clulas em branco, tratando essas clulas
como se contivessem zeros, desmarque a caixa de seleo Ignorar em branco. 5. Para exibir mensagens que solicitam entradas e para explicar ou evitar entradas incorretas,
especifique os tipos de mensagens que voc deseja nas guias Mensagem de entrada e Alerta de erro. 6. Para desativar a exibio de mensagens, desmarque a caixa de seleo Mostrar mensagem de entrada ao selecionar clula na guia Mensagem de entrada e desmarque a caixa de seleo Mostrar alerta de erro aps ser inserido dado invlido na guia Alerta de erro. Observaes Quando voc especificar o tipo de dados permissvel, a formatao da clula no ser afetada. Para formatar as clulas como nmeros, datas ou horas, clique em Clulas no menu Formatar e clique, em seguida, na guia Nmero. Selecione o formato desejado na caixa Categoria e depois selecione as opes desejadas. Uma frmula para um limite pode avaliar dados apenas na planilha em que voc configurou as restries. Para usar os dados contidos em outras planilhas ou pastas de trabalho em uma frmula, insira uma referncia para os dados externos em uma clula na planilha ativa, ou defina um nome para os dados externos na planilha ativa. A frmula poder, ento, referir-se clula ou ao nome na mesma planilha. Por exemplo, se os dados que voc deseja usar em uma frmula estiverem na clula A6 na primeira planilha em uma pasta de trabalho denominada Despesas.xls, voc poder definir o nome DadosVlidos na planilha ativa como =[Despesas.xls]Plan1!$A$6 e inserir uma referncia para DadosVlidos quando voc especificar os limites para os dados. Voc no poder usar constantes matriciais em frmulas de restrio de dados.
Personalizada
Valor - Insira o nmero para o operador. Mnimo - Insira o menor nmero para o operador. Mximo - Insira o maior nmero para o operador. Ignorar em branco - Marque para permitir entradas em branco na clula. Desmarque para especificar que as entradas em branco no so vlidas. Lista Permite que voc especifique uma lista das entradas vlidas. Origem - Insira uma referncia para o intervalo na pasta de trabalho onde voc inseriu as entradas vlidas, insira uma referncia a um nome definido, ou digite as entradas vlidas, separadas por vrgulas (por exemplo, inferior, mdio, superior) Ignorar em branco - Marque para permitir entradas em branco na clula. Desmarque para especificar que as entradas em branco no so vlidas. Dropdown na clula - Marque para exibir uma seta drop-down que fornece a lista em que se deve selecionar, quando a pessoa inserindo os dados clicar na clula. Desmarque para omitir a lista drop-down. Comprimento texto do Especifica o nmero de caracteres para as entradas. Dados - Clique em um operador e preencha as opes. Comprimento - Insira o nmero para o operador. Mnimo - Insira o menor nmero para o operador. Mximo - Insira o maior nmero para o operador. Ignorar em branco - Marque para permitir entradas em branco na clula. Desmarque para especificar que as entradas em branco no so vlidas. Hora Especifica que as entradas devem ser horas. Dados - Clique em um operador e preencha as opes. Hora - Insira a hora para o operador. Hora inicial - Insira a hora mais antiga para o operador. Hora final - Insira a hora mais recente para o operador. Ignorar em branco - Marque para permitir entradas em branco na clula. Desmarque para especificar que as entradas em branco no so vlidas. Nmero inteiro Especifica que as entradas devem ser inteiros. Dados - Clique em um operador e preencha as opes. Valor - Insira o nmero para o operador. Mnimo - Insira o menor nmero para o operador. Mximo - Insira o maior nmero para o operador. Ignorar em branco - Marque para permitir entradas em branco na clula. Desmarque para especificar que as entradas em branco no so vlidas.
Operador entre
Opes As entradas vlidas so maiores ou iguais entrada atribuda opo Mnimo, Data inicial ou Hora inicial e menores ou iguais entrada atribuda opo Mximo, Data final ou Hora final. As entradas vlidas so menores do que a entrada atribuda opo Mnimo, Data inicial ou Hora inicial ou maiores do que a entrada atribuda opo Mximo, Data final ou Hora final. As entradas vlidas coincidem com a entrada atribuda opo Valor, Comprimento, Data ou Hora. As entradas vlidas no coincidem com a entrada atribuda opo Valor, Comprimento, Data ou Hora. As entradas vlidas ultrapassam a entrada atribuda opo Mnimo, Data inicial ou Hora inicial. As entradas vlidas esto abaixo da entrada atribuda opo Mximo, Data final ou Hora final. As entradas vlidas coincidem ou ultrapassam a entrada atribuda opo Mnimo, Data inicial ou Hora inicial. As entradas vlidas coincidem ou ficam abaixo da entrada atribuda opo Mximo, Data final ou Hora final.
no est entre
igual a diferente de maior do que menor do que maior ou igual a menor ou igual a
quantidades de venda e o nmero de unidades vendidas, classifique a lista pela coluna do vendedor. Pode-se reordenar as linhas ou colunas de uma lista com base nos valores de uma lista atravs da classificao. Quando voc classifica, o Microsoft Excel reordena as linhas, colunas ou clulas individuais usando a ordem de classificao especificada. Pode-se classificar listas em ordem crescente(1 a 9, A a Z) ou decrescente (9 a 1, Z a A), e classificar com base no contedo de uma ou mais colunas. O Microsoft Excel classifica listas alfabeticamente como padro. Se voc deseja classificar meses e dias da semana de acordo com a ordem do calendrio em vez da ordem alfabtica, use uma ordem de classificao personalizada. Voc tambm pode reordenar listas em uma ordem especfica criando ordens de classificao personalizadas. Por exemplo, se voc possui uma lista que contm a entrada Baixo, Mdio ou Alto em uma coluna, pode-se criar uma ordem de classificao que ordene linhas que contm Baixo primeiro, linhas que contm Mdio em seguida e linhas que contm Alto por ltimo. 2. Clique em uma clula da lista. 3. No menu Dados, clique em Subtotais.
4. Na caixa A cada alterao em, clique na coluna que contm os grupos para os quais voc deseja subtotais. Esta deve ser a mesma coluna pela qual voc classificou sua lista na etapa 1. 5. Na caixa Usar funo, clique na funo que voc deseja usar para calcular os subtotais (ver Funes de resumo para listas subtotalizadas, mais adiante). 6. Na caixa Adicionar subtotal a, marque a caixa de seleo das colunas que contm os valores para os quais voc deseja subtotais.
O nmero de itens em uma lista. Esta a funo padro para dados no numricos. A mdia dos valores em uma lista. O maior valor em uma lista. O menor valor em uma lista. O resultado da multiplicao de todos os valores em uma lista. O nmero de registros ou linhas em uma lista que contm dados numricos. Uma estimativa do desvio padro de uma populao, onde a lista a amostra. O desvio padro de uma populao onde a lista a populao inteira. Uma estimativa da varincia de uma populao onde a lista a amostra. A varincia de uma populao onde a lista a populao inteira.
10
Filtros
O filtro uma maneira rpida de localizar subconjuntos de dados em uma lista. Para filtrar uma lista, clique em qualquer clula da lista, aponte para Filtrar no menu Dados e clique em AutoFiltro. O Microsoft Excel exibe setas direita dos rtulos das colunas na lista. Para selecionar o valor
que deseja exibir na lista, clique na seta e, em seguida, clique no valor. Ser exibida uma caixa contendo todos os valores contidos na lista, a partir do qual pode-se selecionar qual o valor a ser filtrado. A opo Personalizar... permite acrescentar alguma flexibilidade a filtragem, atravs de
um formulrio onde podem ser especificados todas as clusulas do filtro, como mostrado abaixo.
Filtro avanado
Para filtragens mais elaboradas pode-se fazer uso do Filtro Avanado. Este comando trabalho utilizando critrios que devem ser expressos na prpria planilha, normalmente em uma regio acima da lista que se deseja filtrar. Assim, o processo para se utilizar o filtro avanado o seguinte: 1. Insira algumas linhas acima da lista com a qual se est trabalhando. 2. Copie, na primeira linha desta rea, a primeira linha da lista (que contm os rtulos de cada coluna).
11
3. Insira, logo abaixo de cada rtulo, os critrios de pesquisa que devem ser utilizados. Critrios de vrios campos na mesma linha funcionam como se estivessem conectados utilizando o operador E, enquanto critrios de vrios campos em linhas diferentes funcionam como se estivessem conectados atravs do operador OR. Nos exemplos mostrados abaixo, a primeira situao pode ser expressa como: encontre todas as macieiras com idade > 12 e altura > 10 .
J no segundo caso, a expresso seria: encontre todas as rvores que ou so macieiras, ou possuem idade maior que 12 ou possuem altura > 10. 4. Ative o comando Filtro avanado, presente no submenu Filtrar do menu Dados. Ser exibida uma caixa de dilogo solicitando as reas onde esto localizadas a lista e os critrios. Uma
vez identificadas estas reas, pode-se clicar em Ok e o filtro ser ativado. Deve-se notar que possvel filtrar a lista no mesmo local onde ela se encontra ou copiar os dados filtrados para outro local, o que pode ser bastante til para a criao de planilhas contendo subconjuntos dos dados originais. 5. Quando o filtro avanado estiver em uso, ser habilitado tambm o comando Mostrar todos, presente no submenu Filtrar do menu Dados. Este comando permitir retornar a situao da planilha para o seu estado original, sem filtragem.
diferentes vendedores, o Assistente de soma condicional poder ajud-lo a criar uma frmula que calcule o valor total das vendas de um vendedor. O Assistente de soma condicional um programa suplementar; se o comando Soma condicional no estiver no submenu Assistente do menu Ferramentas, ser necessrio instalar e carregar o programa suplementar.
1. 2. 3.
Clique em uma clula na lista. No menu Ferramentas, aponte para Assistente, e clique em Soma condicional. Siga as instrues apresentadas no assistente.
13
As tabelas a seguir exemplificam um banco de dados para um pequeno pomar. Cada registro contm informaes sobre uma rvore. No Microsoft Excel podemos chamar o primeiro intervalo de Banco_dados e o segundo intervalo de Critrios. rvore Ma Pra Cereja Ma Pra Ma rvore Ma Pra Vejamos os resultados obtidos pelas diferentes funes de banco de dados atuando nos dados acima: BDCONTAR(Banco_dados;"Idade";A1:F2) igual a 1. Esta funo analisa os registros de macieiras com altura entre 10 e 16 e conta quantos campos Idade nestes registros contm nmeros. BDCONTARA(Banco_dados;"Lucro";A1:F2) igual a 1. Esta funo analisa os registros de macieiras com altura entre 10 e 16 e conta quantos campos Lucro nesses registros no esto em branco. BDMX(Banco_dados;"Lucro";A1:A3) igual a R$ 105,00, o lucro mximo de macieiras e pereiras. BDMN(Banco_dados;"Lucro";A1:B2) igual a R$ 75,00, o lucro mnimo de macieiras acima de 10. BDSOMA(Banco_dados;"Lucro";A1:A2) igual a R$ 225,00, o lucro total de macieiras. 14 Altura >10 Altura 18 12 13 14 9 8 Idade Idade 20 12 14 15 8 9 Produo Produo Lucro 14 R$105,00 10 R$ 96,00 9 R$105,00 10 R$ 75,00 8 R$ 76,80 6 R$ 45,00 Lucro Altura <16
BDSOMA(Banco_dados;"Lucro";A1:F2) igual a R$ 75,00, o lucro total de macieiras com uma altura entre 10 e 16. BDMULTIPL(Banco_dados;"Produo";A1:F2) igual a 140, o produto das produes das macieiras com altura entre 10 e 16. BDMDIA(Banco_dados;" Produo";A1:B2) igual a 12, a produo mdia das macieiras acima de 10 ps de altura. BDMDIA(Banco_dados;3;Banco_dados) igual a 13, a idade mdia de todas as rvores no banco de dados. BDEST(Banco_dados;"Produo";A1:A3) igual a 2,97, o desvio padro estimado na produo das macieiras e pereiras se os dados do banco de dados forem apenas uma amostra da populao total do pomar. BDDESVPA(Banco_dados;"Produo";A1:A3) igual a 2,65, o desvio padro verdadeiro na produo das macieiras e pereiras se os dados do banco de dados representarem toda a populao do pomar. BDVAREST(Banco_dados;"Produo";A1:A3) igual a 8,8, a varincia estimada na produo das macieiras e pereiras se os dados no banco de dados forem apenas uma amostra da populao total do pomar. BDVARP(Banco_dados;"Produo";A1:A3) igual a 7,04, a varincia verdadeira na produo das macieiras e pereiras se os dados no banco de dados representarem toda a populao do pomar. BDEXTRAIR(Banco_dados;"Produo";Critrios) retornar o valor de erro #NM! porque mais de um registro coincide com os critrios.
15
Consolidar dados
Pode-se consolidar dados de quatro maneiras: Usando referncias 3-D, o mtodo preferido. Ao usar referncias 3-D, no existem restries quanto ao layout dos dados nas reas de origem. Por posio, quando os dados em todas as reas de origem so dispostos em ordem e localizao idnticas; por exemplo, para combinar dados de uma seqncia de planilhas criadas a partir do mesmo modelo. Se voc estiver inserindo dados, usando uma seqncia de formulrios de planilha baseados no mesmo modelo, e desejar listar os dados inseridos em cada formulrio em uma nica planilha, experimente usar o Assistente de modelo com rastreamento de dados. Por categoria, quando voc deseja resumir um conjunto de planilhas que tm os mesmos rtulos mas organizam os dados de modo diferente. Este mtodo combina os dados que tm rtulos correspondentes em cada planilha. Criando uma tabela dinmica. Este mtodo semelhante consolidao por categoria, mas oferece maior flexibilidade para a reorganizao das categorias.
16
Observao: Pode-se omitir os nomes de planilhas nas referncias, se os intervalos tiverem nomes atribudos por voc, em vez de nomes criados pelo Microsoft Excel. Por exemplo, '[1996.xls]'!Vendas ou '[C:\Planilhas de Oramento\Departamento de Vendas.xls]'!Receita. Dica: Para inserir uma referncia de origem sem digitar, clique na caixa Referncia e, em seguida, selecione a rea de origem. Para selecionar uma rea de origem em outra pasta de trabalho, clique em Procurar. Para remover temporariamente a caixa de dilogo Consolidar enquanto voc seleciona a rea de origem, clique em Recolher caixa de dilogo.
Dica: Para inserir uma referncia em uma frmula sem digitar, insira a frmula at o ponto em que voc precisa da referncia e, em seguida, clique na clula na planilha. Se a clula estiver em outra planilha, primeiro clique na guia da planilha e, em seguida, na clula.
6. 7.
Repita as etapas 4 e 5 para cada rea de origem que voc deseja consolidar. Em Usar rtulos na, marque as caixas de seleo que indicam onde os rtulos esto posicionados na rea de origem: quer na linha superior, quer na coluna esquerda ou em ambas. Para atualizar automaticamente a tabela de consolidao quando os dados fonte forem alterados, marque a caixa de seleo Criar vnculos com os dados de origem.
8.
Para criar vnculos, as reas de origem e de destino devem estar em planilhas diferentes. Assim que voc criar vnculos, no poder adicionar novas reas de origem nem alterar as reas de origem includas na consolidao. Observao: Os rtulos existentes em uma rea de origem, que no coincidirem com os rtulos em outras reas de origem, resultaro em linhas ou colunas separadas quando voc consolidar dados.
O banco de dados pode ser uma lista do Microsoft Excel ou um banco de dados do Microsoft Access, Microsoft FoxPro, dBase ou Paradox para o qual voc instalou o driver ODBC necessrio e outros componentes de acesso a dados. Armazene o banco de dados em um local da rede que todos os usurios do formulrio possam acessar. Pode-se criar relatrios a partir dos dados gravados ou us-los como voc usaria qualquer banco de dados. Para alterar os dados contidos em um registro, pode-se reabrir e editar a cpia gravada do formulrio associada a esse registro. Se voc excluir a cpia do formulrio, o registro correspondente ser mantido no banco de dados. Pode-se excluir o registro como o faria com qualquer registro nesse tipo de banco de dados. Para tornar o modelo disponvel para todos os usurios, armazene o modelo em uma posio acessvel da rede. Em seguida, crie um atalho para o modelo e instrua os usurios a copiar o atalho para a pasta Modelos existente na rea de trabalho de cada um. A pasta Modelos est na pasta em que o Office ou o Microsoft Excel foi instalado. Para obter maiores informaes sobre como usar o Assistente de modelo, clique em .
Criar um modelo de formulrio que copia dados da planilha para um banco de dados
Se o comando Assistente de modelo no estiver no menu Dados, voc precisar instalar o suplemento Assistente de modelo com rastreamento de dados antes de executar este procedimento. 1. Abra a pasta de trabalho em que voc inserir os dados que deseja copiar para um banco de dados. Se voc j salvou um formulrio como um modelo de pasta de trabalho, clique em Novo no menu Arquivo e crie uma nova pasta de trabalho a partir do modelo. Clique em Salvar, e salve a nova pasta de trabalho com outro nome. Em seguida, inicie o Assistente de modelo, o que salvar a pasta de trabalho como um modelo. 2. Insira rtulos para os dados que voc deseja que sejam inseridos na planilha. Insira cada rtulo em uma clula acima ou esquerda da clula que contm os dados. Os rtulos sero usados como nomes de campo no banco de dados. 3. No menu Dados, clique em Assistente de modelo. 4. Siga as etapas do assistente. Observao O banco de dados que voc vincula ao modelo de formulrio pode ser uma lista do Microsoft Excel ou um banco de dados do Microsoft Access, Microsoft FoxPro, dBase ou Paradox para o qual voc instalou o driver ODBC necessrio e outros componentes de acesso a dados.
19
Menus de aplicao
Um fator essencial na criao de aplicativos personalizados oferecer uma forma simples e consistente para o usurio interagir com seu aplicativo menus personalizados e barra de ferramentas customizadas.
O sistema de menu
O sistema de menus do Microsoft Excel composto de um conjunto inteiro de menus disponveis de dos itens de cada menu. Por padro, o Excel exibia a barra de menus sensvel ao contexto do usurio, ou seja, opes que no podem ser ativadas ficam em tom cinza. Podemos abrir um novo comando na barra de menus existente no Excel ou podemos criar um novo boto de menu em uma barra de ferramentas. Antes de mais nada necessrio um planejamento sobre como ser o menu.
20
4. Arraste o comando Novo Menu da caixa Comandos para o menu na barra de menus soltando-a l. Observe que uma barra escura mostra a posio onde o novo comando ser
inserido. Assim que o mouse for liberado aparecer no local o novo menu. 5. Modifique a propriedade Nome e, em seguida, escolha uma macro a ser atribuda ao menu. Nem todas as propriedades se aplicam a este menu. 6. Outros comandos podem ser inseridos dentro deste menu, bastando que eles sejam arrastados para a caixa existente abaixo do menu. Na figura, o comando de menu Recortar est sendo movido para o primeiro nvel dentro do novo comando de menu.
21
22
Ferramentas estatsticas
O Microsoft Excel fornece um conjunto de ferramentas para anlise de dados, denominado Ferramentas de anlise, que pode ser usado para pular etapas no desenvolvimento de anlises estatsticas ou de engenharia complexas. Voc fornece os dados e os parmetros para cada anlise; a ferramenta utiliza as funes de macro de estatstica ou engenharia adequadas e exibe os resultados em uma tabela de sada. Algumas ferramentas geram grficos alm das tabelas de sada. Para exibir uma lista das ferramentas de anlise disponveis, clique em Anlise de dados no menu Ferramentas. Se o comando Anlise de dados no estiver no menu Ferramentas, execute o Programa de Instalao para instalar as Ferramentas de anlise. Depois de instalar as Ferramentas de anlise, voc deve selecion-la no Gerenciador de suplementos. Para utilizar estas ferramentas, voc precisa estar familiarizado com a rea de estatstica ou engenharia especfica para a qual deseja desenvolver anlises. Observao: O Microsoft Excel fornece muitas outras funes estatsticas, financeiras e de engenharia para as planilhas. Para visualizar uma lista das funes de planilha disponveis, clique em Editar frmula na barra de frmulas e, em seguida, clique na seta abaixo em insero de funo .
23
24
Intervalo de entrada Insira a referncia de clula para os dados que voc deseja analisar. A referncia deve consistir em dois ou mais intervalos de dados adjacentes, ordenados em colunas ou linhas. Agrupado por Para indicar se os dados no intervalo de entrada esto ordenados em linhas ou em colunas, clique em Linhas ou Colunas. Rtulos na primeira linha/Rtulos na primeira coluna Se a primeira linha do seu intervalo de entrada contiver rtulos, marque a caixa de seleo Rtulos na primeira linha. Se os rtulos estiverem na primeira coluna do intervalo de entrada, marque a caixa de seleo Rtulos na primeira coluna. Desmarque a caixa se o intervalo de entrada no contiver rtulos; o Microsoft Excel gera os rtulos de dados adequados para a tabela de sada. Nvel de confiabilidade p/mdia Selecione esta opo se quiser incluir uma linha na tabela de sada para o nvel de confiana da mdia. Na caixa, insira o nvel de confiana a ser usado. Por exemplo, um valor de 95% calcula o nvel de confiana da mdia a uma significncia de 5%. Ensimo maior Selecione esta opo se quiser incluir uma linha na tabela de sada para o ensimo maior valor para cada intervalo de dados. Na caixa, insira o nmero a ser usado para N. Se voc inserir 1, esta linha conter o mximo do conjunto de dados.
25
Ensimo menor Selecione esta opo se quiser incluir uma linha na tabela de sada para o ensimo menor valor para cada intervalo de dados. Na caixa, insira o nmero a ser usado para N. Se voc inserir 1, esta linha conter o mnimo do conjunto de dados. Intervalo de sada Insira a referncia para a clula superior esquerda da tabela de sada. Esta ferramenta gera duas colunas de informaes para cada conjunto de dados. A coluna esquerda contm rtulos de estatsticas e a coluna direita contm as estatsticas. O Microsoft Excel cria uma tabela de duas colunas de estatsticas para cada coluna ou linha no intervalo de entrada, dependendo da opo Agrupado por selecionada. Nova planilha Clique nesta opo para inserir uma nova planilha na pasta de trabalho atual e colar os resultados na clula A1 da nova planilha. Para nomear a nova planilha, digite um nome na caixa. Nova pasta de trabalho Clique nesta opo para criar uma nova pasta de trabalho e colar os resultados em uma nova planilha na nova pasta de trabalho. Resumo estatstico Selecione esta opo se quiser que o Microsoft Excel gere um campo para cada uma das seguintes estatsticas na tabela de sada: Mdia, Erro padro (da mdia), Mediana, Modo, Desvio padro, Varincia, Curtose, Distoro, Intervalo, Mnimo, Mximo, Soma, Contagem, Maior (n), Menor (n) e Nvel de confiana.
Rtulos Selecione esta opo se a primeira linha ou coluna do seu intervalo de entrada contiver rtulos. Desmarque esta opo se o intervalo de entrada no contiver rtulos; o Microsoft Excel gera os rtulos de dados adequados para a tabela de sada.
Intervalo de sada Insira a referncia da clula superior esquerda da tabela de sada. O Microsoft Excel determinar automaticamente o tamanho da rea de sada e exibir uma mensagem se a tabela de sada estiver prestes a substituir os dados existentes. Nova planilha Clique nesta opo para inserir uma nova planilha na pasta de trabalho atual e colar os resultados na clula A1 da nova planilha. Para nomear a nova planilha, digite um nome na caixa. Nova pasta de trabalho Clique nesta opo parar criar uma nova pasta de trabalho e colar os resultados em uma nova planilha na nova pasta de trabalho. Pareto (histograma classificado) Selecione esta opo para apresentar dados na tabela de sada em ordem de freqncia decrescente. Se esta opo no estiver selecionada, o Microsoft Excel apresentar os dados em ordem crescente e omitir as trs colunas da extrema direita que contm os dados classificados. Porcentagem cumulativa Selecione esta opo para gerar uma coluna na tabela de sada para porcentagens cumulativas e incluir uma linha de porcentagens cumulativas no grfico de histograma. Desmarque esta opo para omitir as porcentagens cumulativas. Resultado do grfico Selecione esta opo para gerar automaticamente um grfico de histograma interno na tabela de sada.
27
Nmero de variveis Insira o nmero de colunas de valores que voc deseja na tabela de sada. Se no inserir um nmero, o Microsoft Excel preencher as colunas da tabela de sada especificada. Nmero de nmeros aleatrios Insira o nmero de pontos de dados que voc deseja visualizar. Cada ponto de dados aparece em uma linha da tabela de sada. Se voc no inserir um nmero, o Microsoft Excel preencher todas as linhas da tabela de sada especificada. Distribuio Selecione o mtodo de distribuio que voc deseja usar para criar valores randmicos.
28
Uniforme Caracterizada por limites inferiores e superiores. As variveis so tiradas com probabilidade igual de todos os valores no intervalo. Um aplicativo comum usa uma distribuio uniforme no intervalo de 0 a 1. Normal Caracterizada por uma mdia e um desvio padro. Um aplicativo comum usa uma mdia de 0 e um desvio padro de 1 para a distribuio normal padro. Bernoulli Caracterizada por uma probabilidade de xito (valor p) em uma determinada tentativa. As variveis randmicas Bernoulli tm o valor 0 ou 1. Por exemplo, pode-se formular uma varivel randmica uniforme no intervalo de 0 a 1. Se a varivel for menor ou igual probabilidade de xito, atribui-se o valor 1 varivel randmica Bernoulli; caso contrrio, ser atribudo o valor 0. Binomial Caracterizada por uma probabilidade de xito (valor p) para vrias tentativas. Por exemplo, podese gerar variveis randmicas Bernoulli do nmero de tentativas, cuja soma uma varivel randmica binomial. Poisson Caracterizada por um valor lambda equivalente a 1/mdia. A distribuio Poisson usada com freqncia para caracterizar o nmero de eventos que ocorre por unidade de tempo - por exemplo, uma taxa mdia na qual os carros chegam a um posto de pedgio. Padronizada Caracterizada por um limite inferior e superior, uma etapa, uma taxa de repetio para os valores e uma taxa de repetio para a seqncia. Discreta Caracterizada por um valor e pelo intervalo de probabilidade associado. O intervalo deve conter duas colunas: a coluna da esquerda contm valores e a da direita deve conter probabilidades associadas ao valor nesta linha. A soma das probabilidades deve ser 1. Parmetros Insira um valor ou valores para caracterizar a distribuio selecionada. Semente aleatria Insira um valor opcional a partir do qual nmeros randmicos possam ser gerados. Pode-se voltar a usar este valor para produzir os mesmos nmeros randmicos posteriormente. Intervalo de sada Insira a referncia da clula superior esquerda da tabela de sada. O Microsoft Excel determinar automaticamente o tamanho da rea de sada e exibir uma mensagem se a tabela de sada estiver prestes a substituir os dados existentes.
29
Nova planilha Clique nesta opo para inserir uma nova planilha na pasta de trabalho atual e colar os resultados na clula A1 da nova planilha. Para nomear a nova planilha, digite um nome na caixa. Nova pasta de trabalho Clique nesta opo parar criar uma nova pasta de trabalho e colar os resultados em uma nova planilha na nova pasta de trabalho.
Intervalo Y de entrada Insira a referncia para o intervalo de dados dependentes. O intervalo deve consistir em uma nica coluna de dados. Intervalo X de entrada Insira a referncia para o intervalo de dados independentes. O Microsoft Excel ordena variveis independentes deste intervalo em ordem crescente da esquerda para a direita. O nmero mximo de variveis independentes 16.
30
Rtulos Selecione esta opo se a primeira linha ou coluna do intervalo ou intervalos de entrada contiver rtulos. Desmarque esta opo se o intervalo de entrada no contiver rtulos; o Microsoft Excel gera os rtulos de dados adequados para a tabela de sada. Nvel de confiana Selecione esta opo para incluir um nvel adicional na tabela de resumo de sada. Nesta caixa, insira um nvel de confiana adicional que deseja aplicar ao nvel padro de 95%. Constante zero Selecione esta opo para forar a linha de regresso a passar pela origem. Intervalo de sada Insira a referncia para a clula superior esquerda da tabela de sada. Deixe pelo menos sete colunas para a tabela de resumo de sada, que inclui uma tabela anova, coeficientes, erro padro de estimativa dos y, valores r2, nmero de observaes e erro padro dos coeficientes. Nova planilha Clique nesta opo para inserir uma nova planilha na pasta de trabalho atual e colar os resultados na clula A1 da nova planilha. Para nomear a nova planilha, digite um nome na caixa. Nova pasta de trabalho Clique nesta opo parar criar uma nova pasta de trabalho e colar os resultados em uma nova planilha na nova pasta de trabalho. Resduos Selecione esta opo para incluir resduos na tabela de sada de resduos. Resduos padronizados Selecione esta opo para incluir resduos padronizados na tabela de sada de resduos. Plotar resduos Selecione esta opo para gerar um grfico para cada varivel independente por resduo. Plotar ajuste de linha Selecione esta opo para gerar um grfico para valores previstos por valores observados. Plotagem de probabilidade normal Selecione esta opo para gerar um grfico usando plotagens de probabilidade normal.
31
Macros
O gnio da lmpada
Um homem estava caminhando ao longo da praia quando encontrou uma lmpada. Aps esfrega-la apareceu um gnio que declarou: Eu sou o gnio mais poderoso do mundo. Como sou to poderoso, eu posso realizar qualquer desejo que voc queira, mas apenas um. O homem mostrou um mapa do Oriente Mdio e disse Eu gostaria que existisse paz entre os povos desta rea.. O gnio respondeu: Difcil... Estes povos tem estado em guerra desde o incio dos tempos. Eles sempre estaro lutando e no h nada que eu possa fazer a respeito disso. Esta alm de meus limites. Escolha outra coisa... O homem pensou um pouco e disse: Bom, meu pessoal est mudando para Excel. Acho que voc poderia ensinar-lhes um poucos deste tal de VBA... Gnio: Uhhh, vamos dar uma olhada naquele mapa novamente...
Caso voc execute uma tarefa vrias vezes no Microsoft Excel, possvel automatiz-la com uma macro. Uma macro uma seqncia de comandos e funes armazenadas em um mdulo do Visual Basic e pode ser executada sempre que voc precisar executar a tarefa. A macro gravada da mesma forma que uma msica em um toca-fitas. Em seguida, voc executa a macro para repetir, ou reproduzir, os comandos. Antes de gravar uma macro, planeje as etapas e os comandos que voc deseja que a macro execute. Se cometer um erro durante a gravao da macro, as correes feitas tambm sero gravadas. Toda vez que voc grava uma macro, ela armazenada em um novo mdulo anexado a uma pasta de trabalho. Com o Editor do Visual Basic pode-se editar macros, copiar macros de um mdulo para outro, copiar macros entre pastas de trabalho diferentes, renomear os mdulos que armazenam as macros ou renomear as macros.
32
3. Para executar a macro pressionando uma tecla de atalho do teclado, insira uma letra na caixa Tecla de atalho. Use CTRL + letra (para as letras minsculas) ou CTRL + SHIFT + letra (para as letras maisculas). A letra da tecla de atalho no pode ser um nmero ou caracter especial. A tecla de atalho substituir quaisquer teclas de atalho padro do Microsoft Excel enquanto a pasta de trabalho que contm a macro estiver aberta. 4. Na caixa Armazenar macro em, clique no local onde voc deseja gravar a macro. Se voc deseja que uma macro fique disponvel sempre que usar o Microsoft Excel, grave a macro na pasta de trabalho pessoal de macros da pasta XLIncio. Para incluir uma descrio da macro, digite a descrio na caixa Descrio. 5. Clique em OK. Se voc pressionar clulas durante a execuo de uma macro, a macro selecionar as mesmas clulas independentemente das clulas que foram selecionadas pela primeira vez, pois ela grava as referncias absolutas de clula. Se voc desejar que uma macro selecione clulas independentemente da posio da clula ativa quando a macro estiver sendo executada, defina o gravador de macro para gravar as referncias relativas de clula. Na barra de ferramentas Parar gravao, clique em Referncia relativa. O Microsoft Excel continuar a gravar macros com referncias relativas at que voc saia do Microsoft Excel ou at que voc clique em Referncia relativa novamente. 6. Execute as aes que voc deseja gravar. 7. Na barra de ferramentas Parar gravao, clique em Parar gravao.
Dica: Se desejar que uma macro selecione uma clula especfica, execute uma ao e, em seguida, selecione outra clula relativa clula ativa, pode-se combinar o uso de referncias absolutas e relativas quando for gravar a macro. Basta iniciar a gravao com Referncia relativa no pressionada e ativ-la to logo terminem os comandos que se deseja realizar em modo absoluto.
Se voc no estiver vendo a janela como abaixo, clique em Exibir e Explorer do projeto ou CTRL-R e, em seguida, clique em Exibir e Cdigo; ou F7.
Explorer do projeto
Exibe uma lista hierrquica dos projetos e todos os seus itens contidos e mencionados por cada um deles. Elementos da janela: os 3 botes na parte superior da janela do projeto so: Visualizar cdigo: exibe a janela Cdigo para que voc edite e grave o cdigo associado ao tem selecionado. Visualizar objeto: exibe a janela Objeto do item selecionado, um documento existente ou o UserForm. Alternar pastas: Oculta e mostra as pastas de objeto enquanto continua a mostrar os itens individuais contidos neles.
34
A janela de cdigo
Utilize a janela Cdigo para gravar, exibir e editar cdigo do Visual Basic. Pode-se abrir o mesmo nmero de janelas Cdigo como de mdulos, de modo a poder visualizar facilmente o cdigo em diferentes formulrios ou mdulos e copiar e colar entre eles. Pode-se abrir uma janela Cdigo a partir da: Janela Projeto, selecionando um formulrio ou um mdulo, e escolhendo o boto Visualizar Cdigo. Janela UserForm, clicando duas vezes em um controle ou formulrio, escolhendo Cdigo no menu Exibir ou pressionando F7. Um local diferente na janela Cdigo atual. Outra janela cdigo As janelas Imediata e Inspeo A lixeira
Elementos da janela
Caixa Objeto: exibe o nome do objeto selecionado. Clique na seta direita da caixa de listagem para exibir uma lista de todos os objetos associados ao formulrio. Caixa Procedimentos/Eventos: Lista todos os eventos reconhecidos pelo Visual Basic de um formulrio ou controle exibido na caixa Objeto. Quando voc seleciona um evento, o procedimento de evento associado a esse nome de evento exibido na janela Cdigo. Caso (Geral) seja exibido na caixa Objeto, a caixa Procedimento listar as declaraes e todos os procedimentos gerais que tenham sido criados para o formulrio. Caso voc esteja editando o cdigo do mdulo, a caixa Procedimento listar todos os procedimentos gerais no mdulo. Em ambos os casos, o procedimento selecionado na caixa Procedimento exibido na janela Cdigo.
Todos os procedimentos em um mdulo aparecem em uma lista de rolagem, classificada em ordem alfabtica pelo nome. A seleo de um procedimento nas caixas de listagem suspensas na parte superior da janela Cdigo move o cursos para a primeira linha de cdigo no procedimento selecionado. Barra de diviso Quando esta barra arrastada para baixo, divide a janela Cdigo em dois painis horizontais, que podem ser rolados de modo independente. Em seguida, voc poder visualizar diferentes partes do cdigo ao mesmo tempo. As informaes que aparecem na caixa Objeto e na caixa Procedimentos/Eventos se aplicam ao cdigo no painel que tem o foco. Para fechar um painel, arraste a barra para a parte superior ou inferior da janela ou clique duas vezes sobre ela. Barra do Indicador de margem Uma rea cinzenta no lado esquerdo da janela Cdigo, onde so exibidos os indicadores de margem. cone Visualizar procedimento: exibo e procedimento selecionado. A janela Cdigo s exibe um procedimento de cada vez. cone Visualizar mdulo completo: exibe todo o cdigo do mdulo.
35
Digitando cdigo
Para digitar cdigo na janela do editor de cdigos, pode-se usar as dicas automticas. Normalmente elas esto ativadas, mas verifique dentro do editor do VBA, menu Ferramentas Opes se o item Informao rpida est marcado.
Voltando janela do Editor, quando preencher uma instruo vlida, por exemplo:
Logo aps digitar o ponto do comando ActiveCell surge a lista das opes vlidas. Usando as setas pode-se selecionar o comando desejado e ao teclar Espao a opo selecionada ser apresentada. Por exemplo, selecione Address. Logo em seguida as opes do subcomando 36
sero exibidas. Aps a escolha certa, pressione novamente a barra de espaos e assim at terminar a linha de comando.
Observao: Para interromper uma macro antes que ela conclua suas aes, pressione ESC.
marcada em uma planilha por vez. Caixa de texto Boto comando Boto de opo Caixa de listagem Caixa combinao Boto Alternar Boto de rotao Uma caixa em que pode-se digitar texto de Um boto que inicia uma ao quando pressionado Um boto usado para selecionar apenas uma opo dentro de um grupo de alternativas. Uma caixa que contm uma lista de itens. de Uma caixa de texto com uma caixa de listagem drop-down. Pode-se digitar ou selecionar uma opo na caixa. Um boto que permanece pressionado quando clicado e depois liberado quando clicado novamente. Um boto que pode ser anexado a uma clula ou a uma caixa de texto. Par aumentar um valor, clique na seta para cima; para diminuir um valor, clique na seta para baixo Um controle que percorre uma lista de valores quando se clica nas setas de rolagem ou quando se arrasta a caixa de rolagem. Pode-se percorreu uma pgina de valores, clicando entre a caixa de rolagem e uma das setas de rolagem Um texto adicionado a uma planilha ou a um formulrio, que fornece informaes sobre um controle ou sobre a planilha ou o formulrio Um controle que incorpora uma figura em um formulrio Uma borda e um rtulo que agrupam controles relacionados, como botes de opo ou caixas de seleo.
Barra de rolagem
Rtulo
Imagem Moldura
Para nosso exemplo, deve-se inserir um boto de comando. Selecione-o na barra de ferramentas e em seguida, desenhe um retngulo dentro da planilha, no canto superior direito.
38
Nesta janela podemos selecionar da lista de macros existentes aquela que ser aplicada ao boto. Ou podemos criar ma nova macro a partir da tecla Novo ou ainda deixar esta atribuio para mais tarde clicando no boto Cancelar. Selecione uma das macros que voc tiver criado. Poderemos mais tarde alterar a opo.
A todas as clulas na linha 5 A todas as clulas nas linhas 5 a 10 A todas as clulas na coluna H A todas as clulas nas colunas H a J
Voc tambm pode usar um estilo de referncia onde tanto as linhas quanto as colunas da planilha so numeradas. O estilo L1C1 til para computar posies de linha e coluna em macros e pode ser til para mostrar as referncias relativas da clula. No estilo L1C1, o Microsoft Excel indica a posio de uma clula com um L seguido de um nmero de linha e um C seguido de um nmero de coluna. Observaes: Dependendo da tarefa que voc deseja executar no Microsoft Excel, use as referncias relativas da clula, que so referncias a clulas relativas posio da frmula, ou referncias absolutas, que so referncias de clula que sempre referem-se a clulas em uma localizao especfica. Use os rtulos de colunas e linhas em uma planilha para fazer referncias a clulas dentro destas colunas e linhas, ou crie nomes descritivos para representar clulas, intervalos de clulas, frmulas ou valores constantes. Se voc desejar analisar dados na mesma clula ou intervalo de clulas em diversas planilhas da pasta de trabalho, use uma referncia 3-D. Uma referncia 3-D inclui a referncia de clula ou intervalo, precedida de um intervalo de nomes de planilha. O Microsoft Excel usa quaisquer planilhas armazenadas entre o nome inicial e o nome final da referncia.
Na sintaxe do mtodo Activate, a palavra destacada em itlico (objeto) um marcador das informaes que voc fornece; neste caso, um cdigo que retorna um objeto. As palavras destacadas em negrito devem ser digitadas tal e qual aparecem. Por exemplo, o procedimento a seguir ativa a segunda janela no documento ativo. Sub TornarAtiva() Sheets(2).Activate End Sub
instruo apresentada a seguir especifica que, dentro do mdulo, as seqncias de caracteres so comparadas em uma ordem de classificao que no faz distino entre letras maisculas ou minsculas. Option Compare Texto
A linguagem do VBA
O gravador de macros uma excelente ferramenta para criar macros. Mas existem algumas limitaes de comandos que no podemos gravar automaticamente, tais como: Ramificaes condicionais usando IF..THEN Estruturas de loop tais como FOR..NEXT Referncias e clculos complexos Funes e caixas de dilogo, etc.
Para realizar tais operaes precisamos inserir cdigo manualmente. E para tal, devemos aprender alguns conceitos fundamentais sobre objetos, propriedades e mtodos. 42
43
Sub AlterarNome (newTitulo) Meuformulario.Caption = newTitulo End Sub Algumas das propriedades no podem ser definidas. O tpico da Ajuda de cada propriedade indica se ela pode ser definida (leitura e gravao), se pode somente ser lida (somente leitura) ou se pode somente ser gravada (somente gravao). Para recuperar informaes sobre um objeto, bastar retornar o valor de uma de suas propriedades. O procedimento apresentado a seguir utiliza uma caixa de mensagem para exibir o ttulo na parte superior do formulrio ativo no momento. Sub ObterNomedoFormulario () NomedoFormulario = Screen.ActiveForm.Caption MsgBox NomedoFormulario End Sub Um evento uma ao reconhecida por um objeto, como clicar o mouse ou pressionar uma tecla, para o qual pode-se gravar cdigo para responder. Podem ocorrer eventos em resposta a uma ao do usurio ou a um cdigo do programa. Eles tambm podem ser disparados pelo sistema.
Objetos do VBA
Entre os principais objetos do Excel VBA temos:
Objeto Application
Representa o aplicativo que est sendo executado no momento (no nosso caso ele representa o prprio EXCEL). O objeto Application contm: 1. Definioes e opes para o aplicativo como um todo (muitas das opes da caixa de dilogo Opes, do menu Ferramentas, por exemplo) 2. Mtodos que retornem objetos do nvel mais alto, como ActiveCell, ActiveShhet e assim por diante.
44
Objeto Worksheets
o segundo maior objeto dentro do objeto Application. Uma coleo de todos os objetos Worksheet na pasta de trabalho ativa ou especificada. Cada objeto Worksheet representa uma planilha. Use a propriedade Worksheets para retornar a coleo Worksheets. O exemplo seguinte move todas as planilhas para o final da pasta de trabalho. Worksheets.Move after:=Sheets(Sheet.Count) Use o mtodo Add para criar uma nova planilha e adicion-la a coleo. O exemplo seguinte adiciona duas novas planilhas antes da planilha um da pasta de trabalho ativa. Worksheets.Add count:=2, before:=Sheets(1) Use Worksheets(ndice) para retornar um nico objeto Worksheet. O exemplo seguinte oculta a planilha um na pasta de trabalho ativa: Worksheets(1).Visible = False O objeto Worksheet tambm um membro da coleo Sheets. A coleo Sheets contm todas as planilhas da pasta de trabalho (tanto folhas de grfico quanto planilhas de trabalho). As seguintes propriedades para retornar um objeto Worksheet so descritas nesta seo: Propriedade Worksheets Propriedade ActiveSheet
Propriedade Worksheets
Use Worksheets(ndice) para retornar um nico objeto Worksheet. O exemplo seguinte oculta a planilha um na pasta de trabalho ativa: Worksheets(1).Visible = False O nmero de ndice da planilha denota a posio de uma planilha na barra de guias da pasta de trabalho. Worksheets(1) a primeira planilha (mais a esquerda) e Worksheets(Worksheets.Count) a ltima. Todas as planilhas so includas na contagem do ndice, mesmo quando esto ocultas. O nome da planilha mostrado na guia da planilha. Use a propriedade Name para definir ou retornar o nome da planilha. O objeto Worksheet tambm um membro da coleo Sheets. A coleo Sheets contm todas as planilhas da pasta de trabalho (tanto folhas de grfico quanto planilhas de trabalho).
Propriedade ActiveSheet
Quando uma planilha a planilha ativa, pode-se usar a propriedade ActiveSheet para referir-se a ela. O exemplo seguinte usa o mtodo Activate para ativar Plan1, define a orientao da pgina como modo paisagem e, em seguida, imprime a planilha.
45
Objeto Range
Representa uma clula, uma linha, uma coluna, uma seleo de clulas contendo um ou mais blocos contguos de clulas ou um intervalo 3-D. As seguintes propriedades e mtodos para retornar um objeto Range so descritas nesta seo: Propriedade Range Propriedade Cells Range e Cells Propriedade Offset Mtodo Union
Propriedade Range
Use Range(argumento), onde argumento nomeia o intervalo, para retornar um objeto Range representando uma nica clula ou um intervalo de clulas. O exemplo seguinte coloca o valor da clula A1 na clula A5. Worksheets(Plan1).Range(A5).Value = Worksheets(Plan1).Range(A1).Value O exemplo seguinte preenche o intervalo A1:H8 com nmeros randmicos definindo a frmula para cada clula do intervalo. Quando usada sem um qualificador de objeto (um objeto a esquerda do ponto), a propriedade Range retorna um intervalo da planilha ativa. Se a planilha ativa no for uma planilha de trabalho, o mtodo falhar. Use o mtodo Activate para ativar uma planilha antes de usar a propriedade Range sem um qualificador de objeto explcito. Worksheets(Plan1).Activate Range(A1:H8).Formula = =rand() O intervalo esta na planilha ativa O seguinte exemplo limpa o contedo do intervalo chamado Criterios Worksheets(1).Range(Criterios).ClearContents Se voc usar um argumento de texto para o endereo do intervalo, voc ter que especificar o endereo em notao de estilo A1 (voc no poder usar a notao de estilo L1C1.
Propriedade Cells
Use Cells(linha,coluna) para retornar uma nica clula. O exemplo a seguir define o valor da clula A1 como 32: Worksheets(1).Cells(1,1).Value = 32 46
O exemplo seguinte define uma frmula para a clula A2: Worksheets(1).Cells(2,1).Formula = sum(b1:b5) Embora voc tambm possa usar Range (A1) para retornar a clula A1, pode haver ocasies em que a propriedade Cells seja mais conveniente porque pode-se usar uma varivel para a linha ou coluna. O exemplo seguinte cria cabealhos de coluna e linha na Plan1. Observe que aps a planilha ser ativada, a propriedade Cells pode ser usada sem uma declarao explcita de planilha (ela retorna uma clula na planilha ativa) Sub ConfigTabela() Worksheets(Plan1).Activate For oAno = 1 to 5 Cells(1, oAno + 1).Value = 1990 + oAno Next oAno For oTrimestre = 1 to 4 Cells(oTrimestre+1, 1).Value = T & oTrimestre Next oTrimestre End Sub Apesar de voc poder usar funes de cadeia de caracteres do Visual Basic para alterar as referncias de estilo A1, muito mais fcil (e uma prtica de programao muito melhor) usar a notao Cells (1,1) Use expresso.Cells(linha,coluna) onde expresso uma expresso que retorne um objeto Range, para retornar parte de um intervalo. O exemplo seguinte define a frmula para a clula C5: Worksheets(1).Range(c5:c10).Cells(1,1).Formula = =rand()
Range e Cells
Use Range(clula1, clula2) onde clula1 e clula2 so objetos Range que especificam as clulas inicial e final para retornar um objeto Range. O exemplo seguinte define o estilo da linha da borda das clulas A1:J10: With Worksheets(1) .Range(.Cells(1,1), .Cells(10,10)).Borders.LineStyle = xlThick End With Observe o ponto na frente de cada ocorrncia da propriedade Cells. O ponto ser obrigatrio se o resultado da instruo With anterior for aplicado propriedade Cells nesse caso, para indicar que as clulas esto na planilha um (sem o ponto, a propriedade Cells retornaria as clulas da planilha ativa).
Propriedade Offset
Use Offset(linha, coluna) onde linha e coluna so os deslocamentos de linha e coluna, para retornar um intervalo em um deslocamento especificado em um outro intervalo. O exemplo seguinte seleciona a clula trs linhas abaixo e uma coluna a esquerda da clula do canto superior esquerdo da seleo atual. Voc no pode selecionar uma clula que no esteja na planilha ativa, portanto voc precisa ativar primeiro a planilha. 47
Worksheets(Plan1).Activate Selecion.Offset(3,1).Range(A1),Select
Mtodo Union
Use Union(intervalo1, intervalo2, ...) para retornar intervalos de vrias reas, isto , intervalos compostos de dois ou mais blocos contguos de clulas. O exemplo seguinte cria um objeto definido como a unio de intervalos A1:B2 e C3:D4 e, em seguida, seleciona o intervalo definido Dim i1 as Range, i2 as Range, meuIntervalo as Range Worksheets(Plan1).Activate Set i1 = Range(A1:B2) Set i1 = Range(C3:D4) Set meuIntervalo = Union(i1, i2) MeuIntervalo.Select Se voc trabalha com selees que contm mais do que uma rea, a propriedade Areas muito til. Ela divide uma seleo de vrias reas em objetos Range individuais e, em seguida, retorna os objetos como uma coleo. Pode-se usar a propriedade Count na coleo retornada para verificar uma seleo que contenha mais do que uma rea, como mostrado no exemplo seguinte: Sub NenhumaSelDeVariasAreas() numeroDeAreasSelecionadas = Selection.Areas.Count If numeroDeAreasSelecionadas > 1 Then MsgBox Voc no pode executar este comando & _ em selees de vrias reas End If End Sub
48
A linguagem VBA
A linguagem do VBA corresponde a linguagem do Visual Basic e do Access Basic. Desta forma, um programa escrito em qualquer um destes sistemas no ter nenhuma barreira ao ser executado ou mesmo importado para dentro o Excel e a executado. Toda linguagem possui um tratamento de dados armazenados em memria. Estes dados so as variveis do sistema. Estas variveis devem ser declaradas previamente, para que possam ser usadas dentro do programa VBA. Ao declarar variveis, voc geralmente ir utilizar uma instruo Dim. Estas restries de declarao podem ser colocadas em um procedimento para criar uma varivel em nvel de procedimento, ou na parte superior de um mdulo, na seo Declaraes, para criar uma varivel a nvel de mdulo. O exemplo apresentado a seguir cria a varivel strNome e especifica o tipo de dados String Dim strNome as String Caso esta instruo esteja dentro de um procedimento, a varivel strNome poder ser utilizada somente nesse procedimento. Se a instruo for colocada na seo Declaraes do mdulo, a varivel strNome estar disponvel para todos os procedimentos dentro do mdulo, mas no para outros mdulos no projeto. Para tornar essa varivel disponvel para todos os procedimentos no projeto, preceda-o com a instruo Public, como no exemplo apresentado a seguir: Public strNome as String Para obter maiores informaes sobre a nomeao das suas variveis, consulte regras de nomeao do Visual Basic, na ajuda do Visual Basic. As variveis podem ser declaradas como um dos seguintes tipos de dados: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (para seqncias de caracteres de comprimento varivel, String * comprimento (para seqncias de caracteres de comprimento fixo, Object ou Variant. Caso voc no especifique um tipo de dados, o tipo Variant ser atribudo como padro. Voc tambm poder criar um tipo definido pelo usurio atravs da instruo Type. Para obter maiores informaes sobre tipos de dados, consulte Resumo de tipos de dados na Ajuda do Visual Basic. possvel declarar diversas variveis em uma instruo. Para especificar um tipo de dados, voc precisa incluir o tipo de dados para cada varivel. Na instruo apresentada a seguir, as variveis intX, intY e intZ so declaradas como Integer: Dim intX as Integer, intY as Integer, intZ as Integer Na instruo apresentada a seguir, intX e intY so declaradas como tipo Variant; apenas intZ declarada como tipo Integer. Dim intX, intY, intZ as Integer Voc no precisa fornecer o tipo de dados da varivel na instruo de declarao. Caso voc omita o tipo de dados, a varivel ser do tipo Variant.
49
Utilizando a instruo Public Voc no pode utilizar a instruo Public para declarar as variveis pblicas em um nvel de mdulo. Public strName as String As variveis pblicas podem ser utilizadas em todos os procedimentos do projeto. Caso uma varivel pblica seja declarada em um mdulo padro ou um mdulo de classe, ela tambm poder ser utilizada nos projetos que faam referncia ao projeto onde a varivel pblica declarada. Utilizando a instruo Private Pode-se utilizar a instruo Private para declarar as variveis privadas em nvel de mdulo. Private MeuNome as String As variveis privadas podem ser utilizadas somente por procedimentos do mesmo mdulo. Observao: Ao ser utilizada em nvel de mdulo, a instruo Dim equivalente instruo Private. Pode ser que voc precise utilizar a instruo Private para facilitar a leitura e a interpretao do seu cdigo. Utilizando a instruo Static Quando voc utiliza a instruo Static no lugar de uma instruo Dim, a varivel declarada reter os seus valores entre as chamadas. Utilizando a instruo Option Explicit Para declarar implicitamente uma varivel no Visual Basic, basta utiliz-la em uma instruo de atribuio. Todas as variveis declaradas implicitamente so do tipo Variant. As variveis do tipo Variant exigem mais recursos de memria que a maioria das outras variveis. O seu aplicativo ser mais eficiente se voc declarar as variveis explicitamente e com um tipo de dados especifico. A declarao explcita de todas as variveis reduz a incidncia de erros de nomeao conflitante e de digitao. Para impedir que o Visual Basic faa declaraes implcitas, voc poder inserir a instruo Option Explicit em um mdulo antes de todos os procedimentos. Essa instruo obriga-o a declarar explicitamente todas as variveis dentro do mdulo. Caso um mdulo contenha a instruo Option Explicit, ocorrer um erro de tempo de compilao quando o Visual Basic se deparar com um nome de varivel que ainda no tenha sido declarada ou que apresente algum erro de digitao. Pode-se definir uma opo no ambiente de programao do Visual Basic para inserir automaticamente a instruo Option Explicit em todos os mdulos novos. Para obter ajuda sobre as mudanas nas opes do ambiente Visual Basic, consulte a documentao do aplicativo. Observe que esta opo no altera o cdigo existente que voc j tenha escrito.
Tipos de dados
A tabela a seguir mostra os tipos de dados suportados, incluindo tamanhos e intervalos de armazenamento. Byte 1 byte 0 a 255
50
True ou False -32768 a 32767 -2147483648 a 2147483647 -3,402823E38 a 1,401298E-45 para valores negativos 1,401298E-45 a 3,402823E38 para valores positivos -1,797E308 a 4,9406E-324 para valores negativos 4,9406E-324 a 1,797E308 para valores positivos -922337203685477,5808 a 922337203685477,5807 +/- 79.228.162.514.264.337.593.543.950.335 decimal +/- 7,9228162514264337593543950335 decimais a direita com sem 28 ponto casas
8 bytes 4 bytes
Definido usurio
Observao: Matrizes de qualquer tipo de dados requerem 20 bytes de memria, mais 4 bytes para cada dimenso da matriz, mais o nmero de bytes ocupados pelos prprios dados. A memria ocupada pelos dados pode ser calculada multiplicando-se o nmero de elementos de dados pelo tamanho de cada elemento. Por exemplo, os dados em uma matriz de dimenso nica consistindo de 4 elementos de dados Integer de 2 bytes cada ocupa 8 bytes. Os 8 bytes exigidos para os dados mais os 24 bytes fixos fazem com que o requisito de memria para a matriz seja de 32 bytes. A menos que seja especificado de forma diferente as variveis no declaradas so atribudas ao tipo de dados Variant. Este tipo de dados facilita a gravao de programas, mas nem sempre o tipo de dados de utilizao mais eficiente. Voc deve levar em considerao a utilizao de outros tipos de dados se: O seu programa for muito grande e utilizar muitas variveis. O seu programa tiver que ser executado com o mximo de velocidade possvel. Voc gravar dados diretamente em arquivos de acesso aleatrio. Alm de Variant, so estes os tipos de dados suportados: Byte, Boolean, Integer, Long, Single, Double, Currency, Decimal, Date, Object e String. Utilize a instruo Dim para declarar uma varivel de um tipo especfico, como no exemplo apresentado a seguir: Dim X as Integer
51
Essa instruo declara que uma varivel X um inteiro um nmero inteiro entre 32768 e 32767. Caso voc tente definir X como um nmero fora desse intervalo, ocorrer um erro. Caso voc tente definir X como uma frao, o nmero ser arredondado. Por exemplo: X = 32768 X = 5,9 Provoca erro Define X como 6
Programao estruturada
A linguagem do VBA permite a construo de subprocedimentos contendo toda a estrutura de uma linguagem eficiente e malevel ao mesmo tempo. Para tal ela possui os comandos padro das demais linguagens como Pascal, Basic, Clipper, Delphi, etc. As estruturas so: IF ... THEN ... ELSE SELECT CASE ... CASE ... ENDCASE DO ... LOOP FOR ... TO ... NEXT FOR ... EACH ... NEXT WITH ... END WITH
caso contrrio, ser False Instrues Opcional em formato de bloco; requerida em formato de uma s linha que no possui clusula Else. Uma ou mais instrues separadas por dois-pontos; executada se condio for True. Opcional. Igual a condio Opcional. Uma ou mais instrues executadas se a condio-n associada for True. Opcional. Uma ou mais instrues executadas se nenhuma expresso condio ou condio-n anterior for True.
Comentrios: Pode-se utilizar o formato de uma s linha (primeira sintaxe) para testes simples e curtos. Entretanto, o formato de bloco (segunda sintaxe) proporciona mais estrutura e flexibilidade do que o formato de uma s linha e normalmente mais fcil de ler, manter e depurar. Com o formato de uma s linha possvel ter mltiplas instrues executadas como resultado de uma deciso If...Then. Todas as instrues devem estar na mesma linha e separadas por doispontos, como na seguinte instruo: If A > 10 Then A = A + 1 : B = B + A : C = C + B Uma instruo If em formato de bloco deve ser a primeira em uma linha. As partes Else, ElseIf e End If da instruo podem ter somente um nmero de linha ou rtulo de linha precedendo-as. O If em bloco deve terminar com uma instruo End If. Para determinar se uma instruo ou no If em bloco, examine o que vem em seguida palavra-chave Then. Se qualquer coisa exceto um comentrio aparecer depois de Then na mesma linha, a instruo ser tratada como instruo If de uma s linha. As clusulas Else e ElseIf so opcionais. Pode-se Ter tantas clusulas ElseIf em um bloco If quantas desejar, mas nenhuma pode aparecer depois de uma clusula Else. Instrues If em bloco podem ser embutidas, isto , contidas uma dentro da outra. Executando um If em bloco (segunda sintaxe), condio testada. Se condio for True, as instrues seguintes a Then so executadas. Se condio for False, cada condio ElseIf (se houver) ser por sua vez avaliada. Quando uma condio True for encontrada, as instrues imediatamente subseqentes Then associada so executadas. Se nenhuma das condies ElseIf for True (ou se no houver clusulas ElseIf) as instrues subseqentes a Else so executadas. Depois da execuo das instrues subsequentes a Then ou Else, a execuo continua com a instruo subsequente a End If.
Select Case
Executa um dos diversos grupos de instrues, dependendo do valor de uma expresso. Sintaxe Select Case ExpressodeTeste [Case ListadeExpresses-n [instrues-n]] ... [Case Else [instrueselse]] End Select
53
A sintaxe da instruo Select Case possui as partes a seguir: Parte ExpressodeTeste ListadeExpresses-n Descrio Obrigatria. Qualquer expresso numrica ou expresso de seqncia. Obrigatria se aparecer uma Case. Lista delimitada de uma ou mais das seguintes formas: expresso, expresso To expresso, Is operadordeComparao expresso. A palavrachave To especifica um intervalo de valores. Se voc utilizar essa palavra-chave, o valor menor dever aparecer antes de To. Utilize a palavrachave Is com operadores de comparao (exceto Is e Like) para especificar um intervalo de valores. Se no for fornecida, a palavrachave Is ser inserida automaticamente. Opcional. Uma ou mais instrues so executadas se expressodeTeste coincidir com qualquer parte de listadeExpresses-n. Opcional. Uma ou mais instrues so executadas se expressodeTeste no coincidir com qualquer das clusulas Case.
Instrues-n
InstruesElse
Comentrios Se expressodeTeste coincidir com qualquer expresso Case listadeExpresses, as instrues subseqentes quela clusula Case sero executadas at a prxima clusula Case ou, para a ltima clusula, at End Select. Ento o controle passa para a instruo seguinte a End Select. Se expressodeTeste coincidir com uma expresso listadeExpresses em mais de uma clusula Case, somente as instrues subseqentes primeira coincidncia sero executadas. A clusula Case Else utilizada para indicar a instruesElse a ser executada se no for encontrada coincidncia entre expressodeTeste e uma listadeExpresses em qualquer das outras selees de Case. Embora no seja necessrio, uma boa idia Ter uma instruo CaseElse no seu bloco Select Case para manipular valores no previstos de expressodeTeste. Se nenhuma Case listadeExpresses coincidir com expressodeTeste e no houver instruo Case Else, a execuo continua na instruo subseqente a End Select. Pode-se utilizar mltiplas expresses ou intervalos em cada clusula Case. Por exemplo, a linha a seguir vlida. Case 1 to 4, 7 to 9, 11, 13, Is > MaxNumber Observao: O operador de comparao Is no igual palavra-chave Is utilizada na instruo Select Case. Pode-se tambm especificar intervalos e vrias expresses para seqncias de caracteres. No exemplo a seguir, Case coincide com seqncias que so exatamente iguais a tudo, seqncias que ficam entre nozes e sopa em ordem alfabtica e o valor atual de TesteItem: Case tudo, nozes to sopa, TestItem
54
Instrues Select Case podem ser embutidas. Cada instruo Select Case embutida deve Ter uma declarao End Select correspondente. Utilize a instruo Select Case como uma alternativa a ElseIf nas instrues If...Then...Else ao comparar uma expresso a diversos valores diferentes. Embora as instrues If...Then...Else possam avaliar uma expresso diferente em cada instruo ElseIf, a instruo Select Case avalia somente uma expresso de cada vez, na parte superior da estrutura de controle. No exemplo apresentado a seguir, a instruo Select Case avalia o argumento desempenho, que passado para o procedimento. Observe que cada instruo Case pode conter mais de um valor, um intervalo de valores ou uma combinao de valores e operadores de comparao. A instruo Case Else opcional ser executada caso a instruo Select Case no combine com um valor em umas das instrues Case. Function Gratificao (desempenho, salrio) Select Case Desempenho Case 1 Gratificao = salrio * 0.1 Case 2, 3 Gratificao = salrio * 0,09 Case 4 to 6 Gratificao = salrio * 0,07 Case Is > 8 Gratificao = 100 Case Else Gratificao = 0 End Select End Function
Do ... Loop
Repete um bloco de instrues enquanto uma condio True ou at que ela se torne True. Sintaxe Do [{While | Until } condio ] Instrues Exit Do Instrues Loop Ou pode-se utilizar esta sintaxe: Do [instrues] [Exit Do] [Instrues] Loop [{ While | Until } condio } A sintaxe da instruo Do Loop possui as partes a seguir: Parte Condio Descrio Opcional. Expresso numrica ou expresso de seqncia que seja True ou False. Se condio 55
for Null, condio tratada como False. Instrues Uma ou mais instrues que so repetidas enquanto, ou at que, condio seja True.
Comentrios: Qualquer nmero de instrues Exit Do pode ser colocado em qualquer lugar em Do ... Loop como meio alternativo para sair de um Do ... Loop. Exit Do freqentemente usado depois que alguma condio avaliada, por exemplo, If...Then, caso em que a instruo Exit Do transfere o controle para a instruo imediatamente seguinte a Loop. Quando utilizada com instrues Do...Loop embutidas, Exit Do transfere o comando para o loop que est embutido em um nvel acima do loop em que ocorre Exit Do. Este exemplo mostra como as instrues Do...Loop podem ser utilizadas. A instruo Do...Loop interna faz o loop 10 vezes, define o valor do sinalizador como False e sai prematuramente utilizando a instruo Exit Do. O loop externo sai imediatamente aps a verificao do valor do sinalizador. Dim Controle, Contador Controle = True Inicializa variveis Contador = 0 Do Loop externo Do While contador < 20 Incrementa o contador Contador = Contador + 1 Se a condio for True If Contador = 10 Then Define o valor do sinalizador como False. Controle = False Sai do loop interno Exit Do End If Loop Loop Until Controle = False Sai do loop externo imediatamente
56
MsgBox O total & Total End Sub Para diminuir a varivel de contador, utilize um valor Step negativo e um valor final que seja inferior ao valore inicial. No exemplo apresentado a seguir, a varivel de contador meuNum reduzida em duas unidades a cada vez que o loop se repete. Quando o loop terminar, total ser a soma de 16, 14, 12, 10, 8, 6, 4 e 2. Sub NovoTotal () Total = 0 For meuNum = 16 to 2 step 2 Total = Total + meuNum Next meuNum MsgBox O total & total End Sub Observao: no preciso incluir o nome da varivel de contador depois da instruo Next. Nos exemplos apresentados acima o nome da varivel foi includo para deix-los mais legveis. Pode-se sair de uma instruo For...Next antes que o comando atinja seu valor final utilizando a instruo Exit For. Por exemplo, quando ocorrer um erro, utilize a instruo Exit For no bloco de instrues True de uma instruo If...Then...Else ou uma instruo Select case que verifica especificamente o erro. Caso no ocorra o erro, ento a instruo If...Then...Else ser False e o loop prosseguir normalmente.
Grupo
Obrigatria. Nome de uma coleo ou matriz de objetos (exceto matriz de tipos definidos pelo usurio) Opcional. Uma ou mais instrues que so executadas em cada item de um grupo.
Instrues
Comentrios O bloco For...Each inserido se houver pelo menos um elemento em grupo. Uma vez que o loop tenha sido inserido, todas as instrues do loop so executadas para o primeiro elemento do grupo. Se houver mais elementos em grupo, as instrues do loop continuam a ser executadas para cada elemento. Quando no houver mais elementos em grupo, o loop sai e execuo continua com a instruo seguinte instruo Next. Qualquer nmero de instrues Exit For pode ser colocado em qualquer lugar do loop como um meio alternativo para sair. Muitas vezes, Exit For utilizada depois de se avaliar alguma condio, por exemplo, If... Then, e transfere o controle para a instruo imediatamente seguinte a Next. Pode-se embutir loops For...Each....Next colocando um dentro do outro. Entretanto, cada elemento do loop deve ser exclusivo. Observao: se voc emitir elementos em uma instruo Next a execuo continua como se o elemento estivesse includo. Se uma instruo Next for encontrada antes de sua instruo For correspondente, ocorrer um erro. Voc no pode utilizar a instruo For...Each...Next com uma matriz de tipos definidos pelo usurio porque um Variant no pode conter um tipo de definido pelo usurio. As instrues For...Each...Next repetem um bloco de instrues em cada objeto de uma coleo ou em cada elemento de uma matriz. O Visual Basic define automaticamente uma varivel todas as vezes que o loop for executado. Por exemplo, o procedimento apresentado a seguir fecha todos os formulrios, exceto o formulrio que contm o procedimento que est sendo executado. Sub FecharFormularios() For Each frm in Applications.Forms If frm.Caption <> Screen.ActiveForm.Caption Then frm.Close Next End Sub O cdigo apresentado a seguir executa um loop atravs de todos os elementos de uma matriz e define o valor de cada um deles como o valor da varivel de ndice I. Dim TestarMatriz(10) As Integer, I as Variant For Each I in TestarMatriz TestarMatriz(I) = I Next I Executando um loop em um intervalo de clulas Utilize um loop For Each Next para efetuar um loop nas clulas de um intervalo. O procedimento apresentado a seguir executa um loop no intervalo A1:D10 da Plan1 e define qualquer nmero cujo valor absoluto seja inferior a 0,01 como 0 (zero).
58
Sub ArredondarParaZero () For Each meuObjeto in minhaColeo If Abs(meuObjeto.Value) < 0.01 Then meuObjeto.Value = 0 Next End Sub Saindo de um loop For...Each...Next antes que ele tenha terminado Pode-se sair de um loop For...Each...Next utilizando a instruo Exit For. Por exemplo, quando ocorre um erro, utilize a instruo Exit For no bloco de instrues True de uma instruo If...Then...Else ou uma instruo Select Case que verifica de forma especfica o erro. Caso no ocorra o erro, a instruo If...Then...Else ser False e o erro prosseguir normalmente. O exemplo apresentado a seguir testa a primeira clula no intervalo A1:B5 que no contenha um nmero. Se existir uma clula desse tipo, ser exibida uma mensagem e Exit For sair do loop. Sub TestarNmero() For Each meuObjeto in MinhaColeo If IsNumeric (meuObjeto.Value) = False then MsgBox Objeto contm um valor no-numrico Exit For End If Next End Sub
With...End With
Executa uma srie de instrues em um nico objeto ou um tipo definido pelo usurio. Sintaxe With Objeto [Instrues] End With A instruo With possui as partes a seguir: Parte Objeto Instrues Descrio Obrigatria. Nome de um objeto ou de um tipo definido pelo usurio Opcional. Uma ou mais instrues a serem executadas com Objeto
Comentrios A instruo With permite executar uma srie de instrues com um objeto especfico sem requalificar o nome do objeto. Por exemplo, para alterar diversas propriedades diferentes de um nico objeto, coloque as instrues de atribuio de propriedades dentro da estrutura de controle With, referindo-se ao objeto uma s vez em lugar de faz-lo em todas as atribuies de propriedade. O exemplo a seguir ilustra a utilizao da instruo With para atribuir valores a diversas propriedades do mesmo objeto.
59
With MyLabel .Height = 2000 .With = 2000 .Caption = Este MyLabel End With Observao: uma vez que um bloco With seja inserido, objeto no pode ser modificado. Como resultado, voc no pode utilizar uma s instruo With para afetar objetos diferentes. Pode-se embutir instrues With colocando blocos With um dentro do outro. Entretanto, em razo de os membros dos blocos externos de With ficarem mascarados dentro dos blocos internos, voc deve proporcionar uma referncia a objeto totalmente qualificada em um bloco With interno para qualquer membro de um objeto existente em um bloco externo. Importante: No salte para dentro e para fora de blocos With. Se as instruo em um bloco With forem executadas mas a instruo With ou End With no for, voc poder provocar erros ou comportamento imprevisvel. Este exemplo utiliza a instruo With para executar uma srie de instrues em um nico objeto. O objeto meuObjeto e as suas propriedades so nomes genricos utilizados somente com finalidades ilustrativas. With meuObjeto .Height = 100 .Caption = Al mundo !! With .Font .Color = Red .Bold = True End With End With Funo MsgBox Exibe uma mensagem em uma caixa de dilogo, aguarda que o usurio clique em um boto e retorna um integer que indica qual boto o usurio clicou. Sintaxe MsgBox (prompt[, buttons] [, title] [, helpfile, context]) A sintaxe da funo MsgBox possui os argumentos nomeados a seguir: Parte Prompt Descrio Obrigatrio. Expresso de sequncia de caracteres exibida como mensagem na caixa de dilogo. O comprimento mximo de aproximadamente 1024 caracteres, dependendo da largura dos caracteres utilizados. Se prompt consistir em mais de uma linha, voc poder separar as linhas utilizando um caracter de retorno de carro (Chr(13)), um caractere de alimentao de linha (Chr(10)) ou uma combinao de caracteres de retorno de carro e alimentao de linha (Chr(13)&Chr(10)) entre cada linha. Opcional. Expresso numrica que a soma de valores que especifica o nmero e o tipo de botes a exibir, o estilo de cone a utilizar, a identidade do boto padro e a modalidade da caixa de mensagem. Se omitido, o valor padro 0. 60
Buttons
Title
Opcional. Expresso de seqncia de caracteres exibida na barra de ttulo da caixa de dilogo. Se voc omitir title, o nome do aplicativo ser inserido na barra de ttulo. Opcional. Expresso de seqncia de caracteres que identifica o arquivo de Ajuda a ser utilizado para fornecer a ajuda sensvel ao contexto relativa a caixa de dilogo. Se helpfile for fornecido, context tambm dever ser fornecido. Opcional. Expresso nmrica que o nmero de contexto da Ajuda atribudo ao tpico de Ajuda apropriado pelo autor da Ajuda.
Helpfile
Context
Definies: As definies do argumento button so: Constante VbOkOnly VbOkCancel VbAbortRetryIgnore VbYesNoCancel VbYesNo VbRetryCancel VbCritical VbQuestion VbExclamation VbInformation VbDefaultButton1 VbDefaultButton2 VbDefaultButton3 VbDefaultButton4 VbApplicationModal Valor 0 1 2 3 4 5 16 32 48 64 0 256 512 768 0 Descrio Exibe somente o boto Ok. Exibe os botes Ok e Cancelar. Exibe os botes Abortar, Repetir e Ignorar Exibe os botes Sim, No e Cancelar Exibe os botes Sim e No Exibe os botes Repetir e Cancelar Exibe o cone Mensagem Crtica Exibe o cone Consulta de Aviso Exibe o cone Mensagem de Aviso Exibe o cone Mensagem de Informao O primeiro boto o padro. O segundo boto o padro. O terceiro boto o padro O quarto boto o padro. Janela restrita do aplicativo; o usurio deve responder a caixa de mensagem antes de continuar o trabalho no aplicativo atual. Janela restrita do sistema; todos os aplicativos so suspensos at que o usurio responda a caixa de mensagem.
VbSystemModal
4096
O primeiro grupo de valores (0-5) descreve o nmero e o tipo de botes exibidos na caixa de dilogo; o segundo grupo (16, 32, 48, 64) descreve o estilo do cone; o terceiro grupo (0, 256, 512) determina qual boto o padro e o quarto grupo (0, 4096) determina a modalidade da caixa de mensagem. Quando estiver somando nmeros para criar um valor final para o argumento buttons, utilize somente um nmero de cada grupo. Observao: Estas constantes so especificadas pelo Visual Basic para Aplicativos. Como resultado, os nomes podem ser utilizados em qualquer lugar do seu cdigo em vez dos valores reais. 61
Valores de retorno Constante VbOk VbCancel VbAbort VbRetry VbIgnore VbYes VbNo Valor 1 2 3 4 5 6 7 Descrio Ok Cancelar Abortar Repetir Ignorar Sim No
Comentrios: Quando helpfile e context so fornecidos, o usurio pode pressionar F1 para exibir o tpico da Ajuda correspondente ao context. Alguns aplicativos host, por exemplo, o Microsoft Excel, tambm adicionam automaticamente um boto Ajuda caixa de dilogo. Se a caixa de dilogo exibir um boto Cancelar, pressionar a tecla ESC ter o mesmo efeito que clicar em Cancelar. Se a caixa de dilogo contiver um boto Ajuda, ser fornecida a ajuda sensvel ao contexto relativa a caixa de dilogo. Entretanto nenhum valor ser retornado at que um dos outros botes seja clicado. Observao: Para especificar mais do que o primeiro argumento nomeado, pode-se utilizar MsgBox em uma expresso. Para omitir algum argumento posicional, voc deve incluir o delimitador de vrgula correspondente. Este exemplo utiliza a funo MsgBox para exibir uma mensagem de erro crtico em uma caixa de dilogo com os botes Sim e No. O boto No especificado como a resposta padro. O valor retornado pela funo MsgBox depende do boto escolhido pelo usurio. Este exemplo supe que DEMO.HLP um arquivo de ajuda que contm um tpico com um nmero de contexto da Ajuda igual a 1000. Dim Msg, Estilo, Titulo, Ajuda, Ctxt, Resposta, MinhaSequencia Msg = Deseja continuar ? Estilo = vbYesNo + VbCritical + VbDefaultButton2 Titulo = Demonstrao do MsgBox Ajuda = Demo.Hlp Ctxt = 1000 Resposta = MsgBox, (Msg, Estilo, Titulo, Ajuda, Ctxt) If Resposta = VbYes then MinhaSequencia = Sim Else MinhaSequencia = No End If Funo InputBox Funo InputBox Exibe um aviso em uma caixa de dilogo, aguarda at que o usurio insira texto ou clique em um boto e retorna um String com o contedo da caixa de texto. Sintaxe
62
InputBox (prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) A sintaxe da funo InputBox possui os argumentos nomeados a seguir: Parte Prompt Descrio Obrigatrio. Expresso de sequncia de caracteres exibida como mensagem na caixa de dilogo. O comprimento mximo de prompt de aproximadamente 1024 caracteres, dependendo da largura dos caracteres utilizados. Se prompt consistir em mais de uma linha, voc poder separar as linhas utilizando um caracter de retorno de carro (Chr(13)), um caractere de alimentao de linha (Chr(10)) ou uma combinao de caracteres de retorno de carro e alimentao de linha (Chr(13)&Chr(10)) entre cada linha. Opcional. Expresso de seqncia de caracteres exibida na barra de ttulo da caixa de dilogo. Se voc omitir title, o nome do aplicativo ser inserido na barra de ttulo Opcional. Expresso de seqncia de caracteres exibida na caixa de texto como resposta padro se nenhuma entrada for fornecida. Se voc omitir default, a caixa de texto ser exibida vazia. Opcional. Expresso nmerica que especifica, em twips, a distncia horizontal da extremidade esquerda da caixa de dilogo em relao a extremidade esquerda da tela. Se xpos for omitido, a caixa de dilogo ser centralizada horizontalmente. Opcional. Expresso numrica que especifica, em twips, a distncia vertical da extremidade superior da caixa de dilogo em relao ao topo da tela. Se ypos for omitido, a caixa de dilogo ser posicionada na vertical a aproximadamente um tero da extremidade inferior da tela. Opcional. Expresso de seqncia de caracteres que identifica o arquivo de Ajuda a ser utilizado para fornecer a ajuda sensvel ao contexto relativa a caixa de dilogo. Se helpfile for fornecido, context tambm dever ser fornecido. Opcional. Expresso nmrica que o nmero de contexto da Ajuda atribudo ao tpico de Ajuda apropriado pelo autor da Ajuda.
Title
Default
Xpos
Ypos
Helpfile
Context
Comentrios: Quando helpfile e context so fornecidos, o usurio pode pressionar F1 para exibir o tpico de ajuda que corresponde ao context. Alguns aplicativos host, por exemplo, o Microsoft Excel, tambm adicionam automaticamente um boto Ajuda caixa de dilogo. Se o usurio clicar em Ok ou pressionar Enter, a funo InputBox retornar o que houver na caixa de texto. Se o usurio clicar em Cancelar, a funo retornar uma seqncia de caracteres de comprimento zero () Observao: Para especificar mais que o primeiro argumento nomeado, voc deve utilizar InputBox em uma expresso. Para omitir alguns argumentos posicionais, voc deve incluir o delimitador de vrgula correspondente. Este exemplo mostra vrias maneiras de utilizar a funo InputBox para solicitar ao usurio que insira um valor. Se as posies x e y forem omitidas, a caixa de dilogo ser automaticamente centralizada em relao aos respectivos eixos. A varivel meuValor contm o valor inserido pelo usurio se o usurio clicar em Ok ou pressionar a tecla Enter. Se o usurio clicar em Cancelar, ser retornada uma seqncia de comprimento zero.
63
Dim Mensagem, Titulo, Padro, MeuValor Mensagem = Insira um valor entre 1 e 3 Ttulo = Demonstrao da caixa de entrada Padro = 1 Exibe a mensagem, o ttulo e o valor padro MeuValor = InputBox (Mensagem, Ttulo, Padro) Utiliza o arquivo de Ajuda e o contexto. O boto Ajuda adicionado automaticamente MeuValor = InputBox (Mensagem, Ttulo, , , , DEMO.HLP, 10) Exibe a caixa de dilogo na posio 100, 100 MeuValor = InputBox (Mensagem, Titulo, Padro, 100, 100)
Palavras-chave 64
Obter a data ou a hora atual Date, Now, Time Executar datas clculos com DateAdd, DateDiff, DatePart DateSerial, DateValue TimeSerial, TimeValue Date, Time um Timer de
Retornar uma data Retornar uma hora Definir a data ou a hora Medir o processo tempo
Resumo das palavras-chave de fluxo de controle Ao Ramificar Sair ou fazer pausa no DoEvents, End, Exit, Stop programa Executar loop Tomar decises Usar procedimentos
Palavras-chave
Do...Loop, For...Next, For Each... Next, While...Wend, With Choose, If...Then...Else, Select Case, Switch Call, Function, Property Get, Property Let, Property Set, Sub
Resumo das palavras-chave de manipulao de seqncias de caracteres Ao Palavras-chave Comparar duas seqncias de caracteres Converter seqncias de caracteres Converter em minsculas ou maisculas Criar seqncia de caracter repetido StrComp StrConv Format, LCase, UCase Space, String
Encontrar o tamanho de uma seqncia de Len caracteres Formatar uma seqncia de caracteres Justificar uma seqncia de caracteres Manipular seqncias de caracteres Format LSet, RSet InStr, Left, LTrim, Mid, Right, RTrim, Trim
Definir regra de comparao de seqncias de Option Compare caracteres Trabalhar com valores ASCII e ANSI Asc, Chr
Palavras-chave CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, CStr, CVar, CVErr, Fix, Int 65
Boolean, Byte, Currency, Date, Double, Integer, Long, Object, Single, String, Variant (default) IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject
Resumo das palavras-chave financeiras Ao Calcular depreciao Calcular valor futuro Calcular taxa de juros Calcular taxa de retorno interna Calcular nmero de perodos Calcular pagamentos Calcular valor presente FV Rate IRR, MIRR Nper
Resumo das palavras chave de variveis e constantes Ao Atribuir valor Declarar variveis ou constantes Declarar mdulo como privado Obter informaes sobre uma variante Referir-se ao objeto atual Requerer declaraes de varivel explicita Definir tipo de dados padro Let
Palavras-chave
Const, Dim, Private, Public, New, Static Option Private Module IsArray, IsDate, IsEmpty, IsError, IsMissing, IsNull, IsNumeric, IsObject, TypeName, VarType Me Option Explicit Deftipo
Sub FormatarIntervalo() Workbooks(Pasta1).Sheets(Plan1).Range(A1:D5) _ .Font.Bold = True End Sub A tabela seguinte ilustra algumas referncias em estilo A1 usando o mtodo Range: Referncia Range(A1) Range(A1:B5) Range(C5:D9,G9:H16) Range(A:A) Range(1:1) Range(A:C) Range(1:5) Range(1:1,3:3,8:8) Range(A:A,C:C,F:F) Significado Clula A1 Clulas de A1 at B5 Seleo de vrias reas Coluna A Linha 1 Colunas de A at C Linhas de 1 at 5 Linhas 1, 3 e 8 Colunas A, C e F
Referindo-se a clulas usando nmeros de ndice Pode-se usar a propriedade Cells para referir-se a uma nica clula usando nmeros de ndices de linhas e coluna, Essa propriedade retorna um objeto Range representando uma nica clula. No exemplo seguinte, Cells(6,1) retorna a clula A6 de Plan1. Em seguida a propriedade Value definida como 10. Sub InserirValor() Worksheets(Plan1).Cells(6,1).Value = 10 End Sub A propriedade Cells funciona bem para loop atravs de um intervalo de clulas porque pode-se substituir os nmeros de ndice por variveis, conforme mostrado no exemplo seguinte: Sub Circular() Dim Contador as Integer For Contador = 1 to 20 Worksheets(Plan1).Cells(Contador,3).Value = Contador Next Contador End Sub Observao: Se voc desejar alterar as propriedades ou aplicar um mtodo a todo um intervalo de clulas de uma s vez, use a propriedade Range. Para obter maiores informaes, consulte Referir-se a clulas usando notao A1. Referindo-se a linhas e colunas Use a propriedade Rows ou a propriedade Columns para trabalhar com linhas ou colunas inteiras. Essas propriedades retornam um objeto Range representado um intervalo de clulas. No exemplo seguinte, Rows(1) retorna a linha 1 em Plan1. Em seguida, a propriedade Bold do objeto Font do intervalo definida como True. 67
Sub LinhaComNegrito() Worksheets(Plan1).Rows(1).Font.Bold = True End Sub A tabela seguinte ilustra algumas referncias de linha e coluna usando as propriedades Rows e Colums. Referncia Rows(1) Rows Columns(1) Columns(A) Columns Significado Linha 1 Todas as linhas da planilha Coluna 1 Coluna 1 Todas as colunas da planilha
Para trabalhar com vrias linhas ou colunas ao mesmo tempo, crie uma varivel de objeto e use o mtodo Union, combinando vrias chamadas propriedade Rows ou Columns. O exemplo seguinte altera para negrito o formato das linhas 1, 3 e 5 na planilha 1 da pasta de trabalho ativa. Sub VariasLinhas() Dim MinhaUniao as Range Worksheets(Plan1).Activate Set MinhaUniao = Union(Rows(1), Rows(3), Rows(5)) MinhaUniao.Font.Bold = True End Sub Referindo-se a clulas usando notao de atalho Pode-se usar o estilo de referncia A1 ou um intervalo nomeado entre colchetes com um atalho para a propriedade Range. Voc no precisa digitar a palavra Range nem usar aspas, conforme mostrado nos exemplos seguintes. Sub LimparIntervalo() Worksheets(Plan1).[A1:B5].ClearContents End Sub Sub DefinirValor() [MeuIntervalo].Value = 30 End Sub Referindo-se a intervalos nomeados Os intervalos so mais fceis de identificar por nome do que por notao A1. Para nomear um intervalo selecionado, clique na caixa de nome na extremidade esquerda da barra de frmulas, digite um nome e, em seguida, pressione ENTER. O exemplo seguinte refere-se ao intervalo chamado MeuIntervalo na pasta de trabalho chamada MinhaPasta.xls.
68
Sub FormatarIntervalo() Range(MinhaPasta.xls!MeuIntervalo).Font.Italic = True End Sub O exemplo seguinte refere-se ao intervalo especfico de planilha chamado Plan1!Vendas na pasta de trabalho chamada Relatrio.xls. Sub Formatar Vendas() Range([Relatrio.xls]Plan1!Vendas).BorderAround weight:=xlthin End Sub Para selecionar um intervalo nomeado, use o mtodo GoTo, o qual ativa a pasta de trabalho e a planilha e, em seguida, seleciona o intervalo. Sub LimparIntervalo() Application.GoTo Reference:=Range(MinhaPasta.xls!MeuIntervalo) Selection.ClearContents End Sub O exemplo seguinte mostra como o mesmo procedimento seria escrito para a pasta de trabalho ativa: Sub LimparIntervalo() Application.GoTo Reference:=Range(MeuIntervalo) Selection.ClearContents End Sub Loop atravs de clulas em um intervalo nomeado O exemplo seguinte faz um loop atravs de cada clula de um intervalo nomeado usando um loop For Each...Next. Se o valor de qualquer clula do intervalo exceder o valor de limite, a cor da clula ser alterada para amarelo. Sub AplicarCor() Const Limite as Integer = 25 For Each C in Range (Meu Intervalo) IF C.Value > Limite then C. Interior.ColorIndex = 27 End If Next C End Sub Referindo-se a clulas em relao a outras clulas Uma maneira comum de trabalhar com uma clula em relao a uma outra clula usar a propriedade Offset. No exemplo seguinte, o contedo da clula que se encontra uma linha abaixo e a trs coluna da clula ativa na planilha ativa formatado com sublinhado duplo. Sub Sublinhar() ActiveCell.Offset(1,3).Font.Underline = xlDouble End Sub
69
Observao: Pode-se gravar macros que usem a propriedade Offset em vez de referncias absolutas. No menu Ferramentas, aponte para Gravar macro e, em seguida, clique em Usar referncias relativas. Para fazer um loop atravs de um intervalo de clulas, use uma varivel com a propriedade Cells em um loop. O exemplo seguinte preenche as 20 primeiras clulas da terceira coluna com valores entre 5 e 100, incrementados por 5. A varivel contador usada como ndice de linha para a propriedade Cells. Sub Circular() Dim Contador as Integer For Contador = 1 to 20 Worksheets(Plan1).Cells(Contador, 3).Value = Contador*5 Next Contador End Sub Referindo-se a clulas usando um objeto Range Quando voc define uma varivel de objeto para um objeto Range, pode-se facilmente manipular o intervalo usando o nome da varivel. O procedimento seguinte cria a varivel de objeto MeuIntervalo e, em seguida, atribui a varivel ao intervalo A1:D5 de Plan1 na pasta de trabalho ativa. Instrues subsequentes modificam propriedades do intervalo substituindo o objeto de intervalo pelo nome da varivel. Sub Aleatorizar() Dim MeuIntervalo as Range Set MeuIntervalo = Worksheets(Plan1).Range(A1:D5) MeuIntervalo.Formula = =RAND() MeuIntervalo.Font.Bold = True End Sub Referindo-se a todas as clulas da planilha Quando voc aplica a propriedade Cells a uma planilha sem especificar um nmero de ndice, o mtodo retorna um objeto Range representando todas as clulas da planilha. O procedimento Sub seguinte limpa o contedo de todas as clulas de Plan1 na pasta de trabalho ativa. Sub LimparPlanilha() Worksheets(Plan1).Cells.ClearContents. End Sub
Sub ArredondarParaZero() For Contador = 1 to 20 Set CelulaAtual = Worksheets(Plan1).Cells(contador,3) If Abs(CelulaAtual.Value) < 0,01 Then CelulaAtual.Value = 0 Next Contador End Sub Uma outra maneira mais fcil de se fazer um loop atravs de um intervalo usar um loop For Each...Next com a coleo de clulas retornada pelo mtodo Range. O Visual Basic define automaticamente uma varivel de objeto para a prxima clula cada vez que o loop executado. O procedimento seguinte faz um loop atravs do intervalo A1:D10, definindo como 0 (zero) qualquer nmero cujo valor absoluto seja menor que 0,01. Sub ArredondarParaZero() For Each C in Worksheets(Plan1).Range(A1:D10).Cells If Abs(C.Value) < 0,01 Then C.Value = 0 Next End Sub Se voc no souber os limites do intervalo pelo qual deseja fazer o loop pode-se usar a propriedade CurrentRegion para retornar o intervalo que envolve a clula ativa. Por exemplo, o procedimento seguinte, quando executado de uma planilha, faz um loop atravs do intervalo que envolve a clula ativa, definindo como 0 (zero) qualquer nmero cujo valor seja menor que 0,01. Sub ArredondarParaZero() For Each C in ActiveCell.CurrentRegion.Cells If Abs(C.Value) < 0,01 Then C.Value = 0 Next End Sub
71
selecionar uma planilha e, em seguida, selecionar um intervalo (ou outro objeto) usando o mtodo Select. O gravador de macro costuma criar macros que usam o mtodo Select e a propriedade Selection. O procedimento Sub seguinte foi criado pelo uso do gravador de macro e ilustra como Select e Selection funcionam juntas. Sub Macro1() Sheets(Plan1).Select Range(A1).Select ActiveCell.FormulaR1C1 = Nome Range(B1).Select ActiveCell.FormulaR1C1 = Endereo Range(A1:B1).Select Selection.Font.Bold = True End Sub O exemplo seguinte realiza a mesma tarefa sem ativar nem selecionar a planilha ou as clulas. Sub Legendas() With Worksheets(Plan1) .Range(A1) = Nome .Range(B1) = Endereo .Range(A1:B1).Font.Bold = True End With End Sub Selecionar clulas na planilha ativa Se voc usa o mtodo Select para selecionar clulas, esteja ciente de que Select s funciona na planilha ativa. Se voc executar o seu procedimento Sub a partir do mdulo, o mtodo Select falhar a menos que o seu procedimento ative a planilha antes de usar o mtodo Select em um intervalo de clulas. Por exemplo, o procedimento seguinte copia uma linha de Plan1 para Plan2 na pasta de trabalho ativa. Sub CopiarLinha() Worksheets(Plan1).Rows(1).Copy Worksheets(Plan2).Select Worksheets(Plan2).Rows(1).Select Worksheets(Plan2).Paste End Sub Ativar uma clula dentro de uma seleo Pode-se usar o mtodo Activate para ativar uma clula dentro de uma seleo. S pode haver uma clula ativa, mesmo quando um intervalo de clulas selecionado. O procedimento seguinte seleciona um intervalo e, em seguida, ativa uma clula dentro do intervalo sem alterar a seleo. Sub TornarAtiva() Worksheets(Plan1).Activate Range(A1:D4).Select Range(B2).Activate End Sub 72
73
FormDoUsuario.txtNomeDoUsuario.Text = Nome Padro End Sub 5. Escrever procedimentos de evento Os UserForms e os controles tm um conjunto predefinido de eventos. Por exemplo, um boto de comando tem um evento Click que ocorre quando o usurio clica no boto de comando, e os UserForms tm um evento Initialize que executado quando o formulrio carregado. Pode-se escrever procedimentos de evento que sejam executados quando os eventos ocorrem. Aps adicionar controles a sua caixa de dilogo ou documento, voc adiciona procedimentos de evento para determinar como os controles respondero a aes do usurio. Para escrever um controle ou procedimento de evento de formulrio, abra um mdulo clicando duas vezes no formulrio ou controle e selecione o evento a partir da caixa de listagem dropdown Procedimento. Os procedimentos de evento incluem o nome do controle. Por exemplo, o nome do procedimento de evento Click de um boto de comando chamado Comando1 Comando1_Click. Se voc adicionar cdigo a um procedimento de evento e, em seguida, alterar o nome do controle, o seu cdigo permanecer nos procedimentos com o nome anterior. Por exemplo, suponha que voc adicione cdigo ao evento Click de Comando1 e, em seguida, renomeie o controle para Comando2. Quando voc clicar duas vezes em Comando2, voc no ver cdigo algum no procedimento de evento Click. Voc ter que mover o cdigo de Comando1_Click para Comando2_Click. Para simplificar o desenvolvimento, uma boa prtica nomear corretamente seus controles antes de escrever cdigo. 6. Usar valores de controle quando o cdigo est sendo executado Algumas propriedades podem ser definidas em tempo de execuo. O exemplo seguinte define a propriedade Text de uma caixa de texto como Ol CaixaDeTexto1.Text = Ol Os dados inseridos em um formulrio por um usurio so perdidos quando o formulrio fechado. Quando voc retorna os valores dos controles de um formulrio aps o formulrio ter sido descarregado, voc obtm os valores iniciais dos controles em vez dos valores inseridos pelo usurio. Se voc deseja salvar os dados inseridos em um formulrio, pode-se salvar as informaes em variveis a nvel de mdulo enquanto o formulrio ainda est sendo executado. O exemplo seguinte exibe um formulrio e salva os dados do formulrio. Cdigo no mdulo para declarar variveis pblicas Public strRegiao As String Public intCodigoDoVendedor as Integer Public blnCancelado as Boolean Cdigo no formulrio 75
Private Sub cmdCancelar_Click() Modulo1.blnCancelado = True Unload Me End Sub Private Sub cmdOk_Click() Salvar dados intCodigoDoVendedor = txtCodigoDoVendedor.Text strRegiao = lstRegioes.List (lstRegioes.ListIndex) Modulo1.blnCancelado = False Unload Me End Sub Private Sub UserForm_Initialize () Modulo1.blnCancelado = True End Sub Cdigo em mdulo para exibir formulrio Sub IniciarFormulrioVendedores() frmVendedores.Show if blnCancelado = True Then MsgBox Operao Cancelada !, vbExclamation Else MsgBox O cdigo do Vendedor : & _ IntCodigoDoVendedor & Chr$(13) & _ A regio : & strRegiao End If End Sub
76
A instruo On Error
Esta instruo ativa ou desativa uma rotina de tratamento de erros. Se uma rotina de tratamento de erros estiver ativada, a execuo passar para esta rotina quando ocorrer um erro. Existem trs formas da instruo On Error: On Error GoTo rtulo, On error GoTo 0 e On Error Resume Next. A instruo OnError GoTo rtulo ativa uma rotina de tratamento de erros a comear da linha na qual se encontra a instruo. Voc deve ativar a rotina de tratamento de erros antes da primeira linha em que um erro possa ocorrer. Quando o rotina de tratamento de erros est ativa e ocorre um erro, a execuo passa para a linha especificada pelo argumento rtulo. A linha especificada pelo argumento rtulo deve ser o incio da rotina de tratamento de erros. Por exemplo. O procedimento a seguir especifica que, se ocorrer um erro, a execuo passar a linha intitulada Error_PodeCausarUmErro.
77
Function PodeCausarUmErro() Ativa rotina de tratamento de erros On Error GoTo Error_PodeCausarUmErro Inclua aqui cdigo que possa gerar um erro ... Erro_PodeCausarUmErro: Inclua aqui cdigo para tratamento de erros. ... End Function A instruo On Error GoTo 0 desativa o tratamento de erros dentro de um procedimento. Ela no especifica a linha 0 como o incio do cdigo de tratamento de erros, mesmo que o procedimento contenha uma linha numerada como 0. Se no houver nenhuma instruo On Error GoTo 0 no seu cdigo, a rotina de tratamento de erros desativada automaticamente quando o procedimento for executado at o fim. A instruo On Error GoTo 0 redefine as propriedades do objeto Err, tendo o mesmo efeito do mtodo Clear o objeto Err. A instruo On Error Resume Next ignora a linha que causa um erro e direciona a execuo para a linha seguinte quela que causou o erro. A execuo no interrompida. Pode-se utilizar a instruo On Error Resume Next se quiser verificar as propriedades do objeto Err imediatamente aps uma linha na qual voc prev que ocorrer um erro, e tratar o erro dentro do procedimento, ao invs de faz-lo dentro de uma rotina de tratamento de erros.
A instruo Resume
A instruo Resume devolve a execuo ao corpo do procedimento, a partir de uma rotina de tratamento de erros. Pode-se incluir uma instruo Resume dentro de uma rotina de tratamento de erros se desejar que a execuo continue em um determinado ponto de um procedimento. Entretanto, a instruo Resume no necessria; pode-se tambm finalizar o procedimento depois da rotina de tratamento de erros. Existem trs formas da instruo Resume. A instruo Resume ou Resume 0 retorna a execuo para a linha na qual ocorreu o erro. A instruo Resume Next retorna a execuo para a linha imediatamente seguinte aquela na qual ocorreu o erro. A instruo Resume rtulo retorna a execuo para a linha especificada pelo argumento rtulo. O argumento rtulo deve indicar um rtulo ou nmero de linha. Em geral, voc utilizar a instruo Resume ou Resume 0 quando o usurio precisa fazer uma correo. Por exemplo, se voc solicita ao usurio o nome de uma tabela a ser aberta e o usurio insere o nome de uma tabela que no existe, pode-se fazer nova solicitao e continuar a execuo na instruo que causou o erro. Voc utiliza a instruo Resume Next quando o seu cdigo corrige o erro dentro de uma rotina de tratamento de erros e voc deseja continuar a execuo sem executar novamente a linha que causou o erro. Voc utiliza a instruo Resume rtulo quando deseja continuar a execuo em outro ponto do procedimento, especificado pelo argumento rtulo. Por exemplo, pode ser conveniente continuar a execuo em uma rotina de sada, conforme descrito na prxima seo.
Saindo de um procedimento
Quando voc inclui uma rotina de tratamento de erros em um procedimento, voc deve tambm incluir uma rotina de sada, para que a rotina de tratamento de erros s seja executada se ocorrer um erro. Pode-se especificar uma rotina de sada com um rtulo de linha, da mesma maneira que especifica uma rotina de tratamento de erros.
78
Por exemplo, pode-se adicionar uma rotina de sada ao exemplo da seo anterior. Se no ocorrer um erro, a rotina de sada ser executada depois do corpo do procedimento. Se ocorrer um erro, a execuo passar para a rotina de sada aps execuo da rotina de tratamento de erros. A rotina de sada contm uma instruo Exit. Function PodeCausarUmErro() Ativa rotina de tratamento de erros On Error GoTo Error_PodeCausarUmErro Inclua aqui cdigo que possa gerar um erro ... Exit_PodeCausarUmErro: Exit Function Erro_PodeCausarUmErro: Inclua aqui cdigo para tratamento de erros. ... Continua execuo na rotina de sada para sair da funo Resume Exit_PodeCausarUmErro End Function
sem corrigir o erro de diviso por zero. Isso, por sua vez, poder causar outros erros dentro do conjunto de procedimentos aninhados. Em resumo, o Visual Basic procura na lista de chamadas por uma rotina de tratamento de erros ativada se: Ocorrer um erro em um procedimento que no inclui uma rotina de tratamento de erros ativada. Ocorrer um erro dentro de uma rotina de tratamento de erros ativa. Se voc utilizar o mtodo Raise do objeto Err para gerar um erro, voc poder forar o Visual Basic a procurar retroativamente na lista de chamadas por uma rotina de tratamento de erros ativada.
O objeto Err
Este objeto oferecido pelo Visual Basic. Quando ocorre um erro do Visual Basic, as informaes sobre esse erro so armazenadas no objeto Err. Este objeto mantm informaes sobre um nico erro de cada vez. Quando ocorre um novo erro, o objeto Err atualizado de forma a conter informaes sobre ele. Para obter informaes sobre um determinado erro, voc ode utilizar as propriedades e mtodos do objeto Err. A propriedade Number a propriedade padro; ela retorna o nmero de identificao do erro que ocorreu. A propriedade Description do objeto Err retorna a seqncia descritiva associada a um erro. O mtodo Clear limpa as atuais informaes de erro de objeto Err, enquanto o mtodo Raise gera um erro especfico e preenche as propriedades do objeto r com as informaes sobre esse erro. O exemplo a seguir mostra como utilizar o objeto Err em um procedimento que pode causar um erro de incompatibilidade de tipo: Function PodeCausarUmErro() Declara constante que representa o erro provvel Const conTipoIncompativel as Integer = 13 Ativa rotina de tratamento de erros On Error GoTo Error_PodeCausarUmErro Inclua aqui cdigo que possa gerar um erro ... Exit_PodeCausarUmErro: 80
Exit Function Erro_PodeCausarUmErro: If Err = comTipoIncompativel Then Inclua aqui cdigo para tratamento de erros. ... Else Gera novamente o erro original Dim intErrNum as Integer IntErrNum = Err Err.Clear Err.Raise intErrNum End If Continua execuo na rotina de sada para sair da funo Resume Exit_PodeCausarUmErro End Function Observe que no exemplo precedente o mtodo Raise utilizado para repetir o erro original. Se ocorrer um erro que no o de incompatibilidade de tipo a execuo passar pela lista de chamadas para uma outra rotina de tratamento de erros ativa, caso exista. O objeto Err lhe fornece todas as informaes necessrias a respeito de erros do Visual Basic. Entretanto ele no d informaes completas sobre erros do Microsoft Excel ou do mecanismo de banco de dados Microsoft Jet. O Microsoft Excel e os objetos de acesso a dados (DAO) fornecem elementos de linguagem adicionais para ajud-lo com estes erros.
O mtodo AccessError
Pode-se utilizar o mtodo do objeto Err para gerar um erro do Visual Basic que de fato no ocorreu e determinar a seqncia descritiva associada aquele erro. Entretanto, voc no pode utilizar o mtodo Raise para gerar um erro do Microsoft Excel ou um erro DAO. Para determinar a seqncia descritiva associada a um erro do Microsoft Excel ou a um erro DAO que de fato no ocorreu, utilize o mtodo AccessError.
O evento Error
Pode-se utilizar o evento Error para interceptar erros que ocorrem em um formulrio ou relatrio do Microsoft Excel. Por exemplo, se um usurio tentar digitar texto em um campo cujo tipo de dados Data/Hora, ocorrer o evento Error. Se voc adicionar um procedimento de evento Error a um formulrio Funcionrios, por exemplo, e tentar inserir um valor de texto no campo DataDeContratao, o procedimento de evento Error ser executado. 81
O procedimento de evento Error ocupa um argumento inteiro, o DataErr. Quando um procedimento de evento Error executado, o argumento DataErr contm o nmero do erro do Microsoft Excel que ocorreu. Verificar o valor do argumento DataErr dentro do procedimento de evento a nica maneira de se determinar o nmero que ocorreu. O objeto Err no preenchido com informaes quando o evento Error ocorre. Pode-se utilizar o valor do argumento DataErr juntamente com o mtodo AccessError para determinar o nmero do erro e sua seqncia descritiva. Observao: a instruo Error e a funo Error so oferecidos somente para fins de compatibilidade retroativa. Ao escrever um novo cdigo, utilize os objetos Err e Error, a funo AccessError e o evento Error para obter informaes sobre um erro.
Procedimentos automticos
Um procedimento automtico entra em execuo automaticamente sempre que ocorrer um evento de um conjunto especfico de eventos. Podemos associar procedimentos automticos com eventos em nvel de pasta de trabalho ou em nvel de planilha. No primeiro caso, os eventos automticos para pasta de trabalho so: Auto_Open: ocorre assim que o usurio abre a pasta Auto_Close: ocorre assim que a pasta fechar (logo antes da ao se completar) Para usar estes eventos automticos voc dever criar um procedimento e nome-lo com estes nomes, como no exemplo abaixo: Sub Auto_Open() Worksheets(1).Activate Range(A1).Select End Sub No segundo caso, quando desejamos trabalhar com eventos automticos em nvel de planilha, usamos os eventos: Auto_Activate: quando desejamos executar algum cdigo no instante em que uma planilha for ativada. Auto_Deactivate: idem quando ela for desativada.
82
The Spreadsheet Page (www.j-walk.com/ss/index.html): Tudo sobre as mais diversas planilhas e com seo especial sobre o Microsoft Excel. Possui uma boa seo de links para diversos outros sites sobre o assunto.
Office Power (www.office-power.com/index.htm): Bom site sobre os aplicativos do Microsoft Office, contendo arquivos tcnicos sobre o Excel e VBA Microsoft Office Developer Web Forum (http://www.microsoft.com/exceldev/e-a&sa.htm): Site oficial da Microsoft para desenvolvedores na plataforma Office.
Microsoft Support Knowledge Base (http://search.support.microsoft.com/kb/c.asp): O tira-dvidas da Microsoft. Um grande banco de dados de informaes sobre todos os produtos da empresa. ASAP utilities (www.asap-utilities.com): Oferece um conjunto de utilitrios que agrega uma srie de novos comandos ao Excel
Livros
Microsoft Office 97 Visual Basic Programmers Guide: referncia sobre programao e customizao dos aplicativos do Microsoft Office. Existe uma verso disponvel online em http://www.microsoft.com/officedev/articles/Opg/toc/pgtoc.htm
83