Este post tem o intuito de apresentar o VBA (Visual Basic for Applications) no Excel para os usurios avanados do Excel que ainda no so programadores de fato. Teremos:
Uma soluo para um problema no mundo real, alm de dicas sobre programao e depurao.
O Microsoft Excel uma ferramenta que pode ser usada para manipular, analisar e apresentar dados como se fossem informaes. Apesar do conjunto de recursos disponveis na interface padro (UI), podemos querer maneiras mais fceis de executar algumas das nossas repetitivas e aborrecidas tarefas, ou executar alguma tarefa que a UI no pode resolver sozinha. Felizmente, os aplicativos do Office, como o Excel tem no VBA alguma capacidade de estender as suas funcionalidades padro.
O VBA funciona como a maioria das linguagens de programao: Processando diversos conjuntos de algoritmos alocados em SUBs, FUNCTIONS ou MACROS.
Aprender a programar pode parecer intimidador, mas com um pouco de pacincia e alguns exemplos a maioria dos usurios acham que vale a pena aprender um pouco de codificao VBA para tornar o trabalho mais fcil, dando-lhes a capacidade de fazer coisas que pensavam ser impossveis. E o melhor: Depois de ter aprendido um pouco, torna-se muito mais fcil aprender tcnicas e coisas diferentes. Ento as possibilidades so ilimitadas!
De longe, o motivo mais comum para se usar o VBA no Excel o de automatizar tarefas repetitivas. Por exemplo, suponha que tenha umas 12 planilhas, cada uma delas contendo uma dzia de pastas dentro de si, e que cada uma dessas precise sofrer algumas alteraes, estas poderiam ser:
Aplicao de uma nova formatao para algum intervalo fixo entre as clulas.
Retornar alguns detalhes estatsticos dos dados de cada uma destas abas, escolhendo o melhor tipo de grfico para exib-los com as caractersticas selecionadas, e, em seguida, criar e formatar um grfico de conformidade, exportandoo para o Powerpoint.
Qualquer uma das 2 tarefas acima no precisam ser executadas manualmente, pelo menos no mais do que algumas vezes. Em vez disso, poder automatizar as tarefas usando o VBA para escrever instrues explcitas para Excel a seguir.
importante no limitarmos o VBA aplicando-o somente s tarefas repetitivas, pois tambm podemos us-lo em outros mbitos, tais como:
Para construir novas capacidades que no so naturais ao Excel, como desenvolvermos algoritmos que analisem os nossos dados, e em seguida usem os recursos grficos do Excel para exibir os resultados.
Tambm podemos escrever algum cdigo para realizar tarefas que integrem o Excel a outros aplicativos do Office tais como o Microsoft Access. Talvez, de todos os demais aplicativos do Office, o Excel seja o mais utilizado como algo que se assemelhe a uma plataforma de desenvolvimento. Alm de todas as tarefas que envolvem listas bvias e contbeis, os desenvolvedores usam o Excel em uma srie de tarefas de visualizaes de dados para a criao de prottipos de software.
importante lembrar-nos de que apesar de termos excelentes razes para utilizarmos o VBA para solucionar diversos dos nossos problemas e necessidades, no poderemos envolv-lo em tudo. O Excel tem uma grande variedade de recursos. Mesmo que sejamos Power Users muito provvel no estarmos familiarizados com todos estes. Antes de decidirmos implementar alguma soluo em VBA, procuremos cuidadosamente saber se j no existe um recurso similar ou uma maneira mais simples para obtermos o que desejamos.
Programao VBA
Usando o cdigo para fazer as aplicaes fazerem coisas. Podemos achar que escrever cdigo algo misterioso ou difcil, mas todos os dias usamos os princpios bsicos no nosso dia-a-dia.
Os aplicativos do Office forma construdos de tal forma que so compostos por coisas chamadas de Objetos. Estes podem receber instrues. Podemos interagir com os aplicativos atravs do envio de instrues para vrios objetos da aplicao. Esses objetos so muitos, variados, e flexveis, mas tm os seus limites. S podem fazer aquilo que foram projetados para fazer, e s faro o que instru-los a fazer.
Objetos
Objetos de programao relacionam-se entre si de forma sistemtica em uma hierarquia chamada de object model (OM = modelo de objeto) da aplicao. O OM espelha aproximadamente o que vemos na interface do usurio, por exemplo, o OM do Excel contm: Application, Workbook, Sheet, e Chart objects, entre muitos outros. O OM um mapa conceitual do aplicativo e dos seus recursos.
Propriedades e mtodos
Podemos manipular os objetos, definindo suas propriedades e chamando os seus mtodos. Definir uma propriedade altera alguma caracterstica do objeto. Chamar um mtodo faz com que o objeto realize alguma ao. Por exemplo, o objeto Workbook tem um mtodo Close, que fecha o Workbook e uma propriedade ActiveSheet que representa a planilha ativa no Workbook.
Colees
Muitos objetos encontram-se nas verses singular e plural: Workbook e Workbooks, Worksheet e Worksheets, e assim por diante. As verses plurais so chamadas de colees. Objetos de coleo so usados para executarem uma ao em vrios itens da coleo.
Guia Desenvolvedor
Todos os aplicativos do Office usar a fita. Um guia sobre a fita o guia do desenvolvedor, onde voc acessar o Editor do Visual Basic e ferramentas para desenvolvedores outros. Como o Office no exibir a guia Desenvolvedor por padro, voc deve habilit-lo usando o seguinte procedimento:
Aps o Excel exibe a guia Desenvolvedor, observe a localizao do Visual Basic, macros e botes de segurana de macrona guia.
Questes de segurana
Clique no boto Segurana de macro para especificar quais as macros podem executar e em que condies. Embora desonestos cdigo de macro pode danificar seriamente o computador, as condies de segurana que o impedem de executar macros teis pode prejudicar seriamente a sua produtividade. Macro de segurana um tema complexo e complicado que voc deve estudar e entender se voc trabalha com macros do Excel.
Para os fins deste artigo, estar ciente de que, se o Aviso de Segurana: Macros foram desativados barra aparece entre a fita ea planilha quando voc abrir um livro que contm uma macro, voc pode clicar no boto Contedo Enable para ativar as macros. Alm disso, como medida de segurana, voc no pode salvar uma macro no formato de arquivo padro do Excel (xlsx)., Em vez disso, voc deve salvar a macro em um arquivo com uma extenso especial, xlsm..
Sub Ol ()
End Sub
Sub significa Subrotina, que voc pode definir para agora como "macro". Executando o Hello macro executa qualquer cdigo que est entre Sub Hello() e End Sub . Agora edite a macro para que ele se parece com o seguinte cdigo. VB
Sub Ol ()
Selecione a macro Ol na lista que aparece e, em seguida, clique em Executar para exibir uma caixa de mensagem pequena que contm o texto "Ol, mundo!" Voc acabou de criar e implementado personalizado cdigo VBA no Excel. Clique em OK na caixa de mensagem para fech-lo e concluir a execuo da macro. Se a caixa de mensagem no aparecer, verifique as configuraes de segurana de macro e reiniciar o Excel.
Para criar um boto para uma macro na barra de ferramentas de Acesso Rpido
1. 2. 3. 4. 5. Clique na guia Arquivo. Clique em Opes para abrir a caixa de dilogo Opes do Excel e, em seguida, clique em Barra de Ferramentas de Acesso Rpido. Na lista em Escolher comandos de:, escolha Macros. Encontre o texto que semelhante ao Book1 Ol! Na lista que aparece e selecione esse texto. Clique no boto Adicionar >> para adicionar a macro para a lista no lado direito, e em seguida, clique no botoModificar ... para selecionar uma imagem de boto para associar com o macro. Clique em OK. Voc dever ver seu novo boto na barra de ferramentas Acesso rpido acima na guia Arquivo. Agora voc pode rapidamente executar a macro, a qualquer momento, sem usar o Developer guia-lhe dar uma tentativa.
O primeiro passo descobrir como manipular os objetos particulares que voc precisa para trabalhar com para realizar sua tarefa, por exemplo, planilhas, nomes de planilhas, clulas e contedo de clulas. No Excel, h pelo menos duas maneiras de abordar o problema:
Ir diretamente para o Modelo de Referncia de Objetos. Anote algumas das aes que deseja automatizar, ver como o cdigo gravado manipula os objetos, e depois ir para o Modelo de Referncia de Objetos para obter mais informaes.
As opinies variam sobre qual abordagem prefervel, mas por agora, tente usar o Macro Recorder primeiro.
Para usar o gravador de macro como um ponto de partida para a sua soluo
1. 2. Registrar as aes que deseja cdigo. Rever o cdigo e encontrar as linhas que realizam essas aes.
3. 4. 5.
Excluir o resto do cdigo. Modificar o cdigo gravado. Adicionar variveis, estruturas de controle, e outros cdigos que o Macro Recorder no pode gravar.
Comece a sua investigao por gravar uma macro que renomeia uma planilha para novo nome. Voc pode ento usar a macro gravada para desenvolver a sua prpria macro que renomeia vrias planilhas com base em seu contedo.
Sub RenameWorksheets () ' 'RenameWorksheets Macro ' ' Selecione Nome Sheets ("Sheet1"). = "Nome novo" End Sub
Sheets ("Sheet1").
As primeiras quatro linhas aps a linha de Sub so comentrios. Qualquer linha que comea com um apstrofo um comentrio e no tem efeito sobre o que a macro faz. Os principais usos para comentrios so os seguintes:
Para tornar o cdigo mais fcil de entender, no apenas para voc, mas para qualquer pessoa que pode precisar modificar o cdigo mais tarde. Para desativar temporariamente uma linha de cdigo (chamado de coment-la).
Os quatro comentrios neste macro gravada servir nem a propsito, para exclu-los. A prxima linha usa o mtodo Select para selecionar o membro Sheet1 do objeto da coleo Sheets. No cdigo VBA, no geralmente necessrio para selecionar objetos antes de manipul-los, apesar de que o que o Macro Recorder faz. Em outras palavras, esta linha de cdigo redundante, de modo que voc pode exclu-lo tambm. A ltima linha da macro gravada modifica a propriedade do nome do membro Sheet1 da coleo Sheets. Esta a linha de manter. Depois de fazer as alteraes, o cdigo gravado deve agora olhar como o seguinte. VB
Sub RenameWorksheets ()
Alterar manualmente a folha de chamada Novo nome de volta para Sheet1, em seguida, executar a macro. O nome deve mudar para novo nome.
Sub RenameWorksheets ()
Looping
Uma limitao do cdigo at este ponto que ele s faz uma alterao em uma planilha. Voc pode adicionar mais uma linha para cada planilha que deseja renomear, mas que se voc no sabe quantas planilhas existem, ou que seus nomes atuais so? Voc precisa encontrar uma maneira de aplicar uma regra para cada folha do livro. VBA tem uma construo chamada Para cada loop que o ideal. O loop For Each examina cada item em um objeto de coleo, como planilhas e pode ser usado para realizar uma ao (como alterar o nome) para alguns ou todos esses itens. Para mais informaes sobre o loop For Each, consulte a Referncia de linguagem VBA . Clique em "Visual Basic Tpicos conceituais", ento "usando para cada ... prximas declaraes". Tambm, estar ciente de que a referncia da linguagem VBA, como o Modelo de Referncia de objeto, devolver de forma ampla o tempo que voc gasta navegando, e um excelente lugar para procurar idias se voc ficar preso trabalhando em cdigo. Usando o exemplo em terceiro lugar no "usando para cada ... prximas declaraes" tpico, edite a macro para que ele se parece com o seguinte cdigo. VB
Sub RenameWorksheets () Para cada myWorksheet em planilhas myWorksheet.Name = "nome novo" Prximo End Sub myWorksheet uma varivel, isto , o que ele representa varia. Neste caso, o myWorksheet varivel
sucessivamente representa cada planilha na coleo Worksheets. Voc no tem que usar myWorksheet , voc poderia usar "x", "ws", "WorksheetToRenameAfterTheContentsOfCellB1", ou (com algumas restries) quase qualquer nome que voc quiser.Uma boa regra de ouro usar nomes de variveis que so longas o suficiente para lembr-lo de que a varivel representa, mas no to longa como a desorganizao do cdigo. Se voc executar a macro em seu estado atual, ela produz um erro porque o Excel exige cada planilha em uma pasta de trabalho para ter um nome nico, mas a linha a seguir instrui o Excel para dar a cada planilha o mesmo nome. VB
Para corrigir a linha de modo que voc pode verificar que o para cada fbrica, lao, mudar a linha para o seguinte. VB
Renomeando til
A macro est ficando perto de algo que possa realmente resolver o problema na mo. O que voc precisa agora uma forma de levar informaes das planilhas-se especificamente de clula B1 em cada planilha e colocar essa informao para os nomes das planilhas. Desta vez, em vez de usar o gravador de macros para descobrir como fazer referncia a uma clula, dar um palpite e ver se usando o objeto de celular vai funcionar. um bom palpite, mas se voc abrir o Modelo de Referncia de Objetos e de pesquisa para o objeto Cell, voc achar que no h objeto Cell! H um objeto CellFormat embora. O tema objeto CellFormat inclui o seguinte cdigo no primeiro exemplo de cdigo. VB
Acontece que voc usa Gama para especificar um intervalo de clulas ou apenas uma clula individual. Mais uma vez, voc no precisa da parte. Select, mas voc precisa descobrir como fazer referncia ao contedo do objeto Range, ao contrrio do objeto Range si. Se voc vai para o tema objeto Range, voc pode ler que Gama tem dois mtodos e propriedades. O contedo de um Range uma coisa, no uma ao, ento provavelmente seria uma propriedade. Se voc digitalizar para baixo na lista, voc pode ver a propriedade Value. Ento, tente o seguinte. VB
Sub RenameWorksheets () Para cada myWorksheet em planilhas myWorksheet.Range ("B1"). Valor Prximo End Sub
myWorksheet.Name =
Voc receber um erro se voc executar isso em um livro que contm planilhas onde B1 est vazia, porque um intervalovazio tem um valor de "" (uma seqncia de texto vazio), que no um nome de planilha legal. hora de criar alguns dados de exemplo de qualquer maneira. Faa as trs folhas no livro semelhante figura abaixo, e em seguida, executar a macro.
Se myWorksheet.Range ("B1"). Valor <> "" Then E depois do myWorksheet.Name linha adicione o seguinte texto.
VB
End If
Isso chamado de um If ... Then. O If ... Then instrui o Excel para fazer o que for nas linhas entre a linha ea Se End If linha, mas somente se a condio na linha Se for cumprida. No exemplo, a linha seguinte especifica a condio de cumprir. VB
Declaraes de variveis
Outra melhoria que voc deve fazer para o macro colocar uma declarao do myWorksheet varivel no incio da macro. VB
Apesar de declaraes de variveis no so necessrias em VBA, usando-se fortemente recomendado! Declaraes de variveis tornam muito mais fcil manter o controle de suas variveis e para rastrear erros no cdigo. Alm disso, esteja ciente de que se voc declarar uma varivel com um tipo de objeto (como Planilha), o IntelliSense exibe uma lista adequada de propriedades e mtodos associados a esse objeto, se voc usar a varivel de objeto no final do macro.
Comentrios
A macro complexo o suficiente agora para incluir alguns comentrios que lembr-lo que o cdigo est fazendo. O nmero de comentrios para usar em parte uma questo de estilo pessoal, mas, em geral, tambm muitos comentrios so melhores do que muito poucos. Cdigo geralmente precisa ser modificado e atualizado ao longo do tempo. Sem comentrios, pode ser difcil de entender o que est acontecendo no cdigo, especialmente se a pessoa que modifica o cdigo no a mesma pessoa que o escreveu, em primeiro lugar. Adicionando comentrios para a condio Se e para a linha que renomeia resultados das planilhas, no cdigo a seguir. VB
Sub RenameWorksheets () MyWorksheet Dim Planilha Para cada myWorksheet em planilhas "Certifique-se que a clula B1 no est vazio Se myWorksheet.Range ("B1"). Valor <> "" Then 'Renomear a planilha para o contedo da clula B1 myWorksheet.Name = myWorksheet.Range ("B1"). Valor End If Prximo End Sub
Para testar a macro, renomear as planilhas de volta para Plan1, Plan2 e Plan3 e excluir o contedo da clula B1 em uma ou mais das planilhas. Executar a macro para verificar se ele renomeia as planilhas que tm texto na clula B1 e deixa as outras planilhas sozinho. A macro funciona para qualquer nmero de planilhas, com qualquer combinao de clulas B1 povoadas e vazio.
O que eu poderia tentar em seguida? O que eu quero aprender primeiro, dada a forma como eu quero usar VBA? O que poderia ser apenas divertido ou interessante saber? O que eu sou curioso sobre?
O leitor fortemente encorajados a investigar o que avenidas abrir o caminho para o conhecimento.
Grficos
Uma tarefa comum no Excel criar um grfico com base em um intervalo de clulas. Criar uma nova macro chamadaAssortedTasks e digite o seguinte texto no Editor do Visual Basic.
VB
Com myChart
Este um padro comum na programao VBA. Primeiro, voc cria um objeto e atribuir a uma varivel, ento voc usa o ... Com Final Com a construo de fazer as coisas com o objeto. O cdigo de exemplo instrui o grfico para usar a seleo atual para seus dados. ( Selection um valor para o parmetro Source do mtodo SetSourceData, no um valor de uma propriedade de objeto, de modo a sintaxe VBA exige que voc use dois pontos e um sinal de igual ( := ) em vez de apenas um sinal de igual ( = ) para atribuir o valor). Digite alguns nmeros nas clulas A1: A5, selecione as clulas e, em seguida, executar a macro. O grfico mostra-se como o tipo de padro, um grfico de barras.
Se voc no gosta do grfico de barras, voc pode alter-lo para algum outro tipo de grfico usando o cdigo que semelhante ao seguinte. VB
xlPie um exemplo de um alto-constante, tambm conhecida como uma constante enumerada. H muitos destes casos durante Excel, e eles so exaustivamente documentado. Para mais informaes sobre constantes internas, consulte a seo Enumeraes do Modelo de Referncia de Objetos. Por exemplo, as constantes para tipos de grficos so listadas sob "Enumeration XlChartType". Voc pode modificar os dados. Por exemplo, tente adicionar esta linha logo aps a declarao da varivel. VB
myInput = InputBox ("Por favor digite um nmero:") Application.ActiveSheet.Range ("a5") Valor. = MyInput
Por fim, adicione as seguintes linhas ao final do macro. VB
ActiveWorkbook.Save ActiveWorkbook.Close
A macro completa agora deve ser algo como o seguinte. VB
AssortedTasks sub () MyChart Dim ChartObject Application.ActiveSheet.Range ("A4") valor. = 8 myInput = InputBox ("Por favor digite um nmero:") Application.ActiveSheet.Range ("a5") Valor. = MyInput Definir myChart = ActiveSheet.ChartObjects.Add (100, 50, 200, 200) Com myChart . Chart.SetSourceData Fonte: Seleo = . Chart.ChartType = xlPie End With ActiveWorkbook.Save ActiveWorkbook.Close End Sub
Verifique se as clulas A1: A5 so ainda selecionado, executar a macro, digite um nmero na caixa de entrada e, em seguida, clique em OK. O cdigo salva e fecha o livro. Reabrir o livro e observe a mudana para o grfico de pizza.
UserForms
A seo anterior mostrou como usar uma caixa de entrada simples para obter a entrada do usurio. Alm da caixa de mensagem correspondente que exibe informaes, o VBA oferece amplos recursos que voc pode usar para criar caixas de dilogo personalizadas para controles de cdigo que so colocados diretamente em planilhas, ou para manipular as caixas de dilogo que so construdos para o Excel. Para mais informaes sobre esses recursos, consulte Controles, caixas de dilogo e Formas na Referncia do desenvolvedor Excel. Esta seo completa este olhar introdutrio em Excel VBA dando uma olhada rpida no UserForms. Na guia Desenvolvedor, clique no boto Visual Basic para abrir o Editor do Visual Basic, e depois v para o menu Inserir e escolha UserForm para abrir o Modo Design UserForm. Voc ver duas janelas. Um representa a UserForm que voc est criando e de outro, a caixa de ferramentas, mostra os vrios controles que voc pode adicionar ao seu formulrio de usurio, por
exemplo, botes de comando, botes de opo, caixas de seleo e assim por diante. Voc pode mover o mouse sobre um controle caixa de ferramentas para ver que tipo de controle que ele cria. Crie um formulrio de usurio muito simples com um nico boto que executa a macro Ol a partir no incio deste artigo.Na Caixa de Ferramentas, pressione o controle CommandButton, e arraste-o para o formulrio de usurio para criar um boto de comando. Direito do mouse no boto de comando e escolha View Code. O Sub que voc v um esqueleto para um procedimento de evento, que executado quando um determinado evento ocorrer. Neste caso, como o nome da Sub indica, o evento que executa o cdigo um clique em CommandButton1.Adicione a seguinte linha ao procedimento de evento. VB
Executar ("Ol")
O Editor do Visual Basic agora deve ser semelhante ao seguinte.
Guarde o livro, v ao menu Janela e escolha UserForm1 (UserForm) para voltar a ver o UserForm. Clique na seta verde na barra de ferramentas para executar o UserForm. Quando a caixa de dilogo aparecer, clique no boto de comando para executar a macro Ol, que exibe o "Ol, mundo!" caixa de mensagem. Feche a caixa de mensagem para retornar ao formulrio de usurio em execuo, em seguida, fechar o UserForm correndo para voltar para o modo Design.
Qual o prximo?
Voc pode achar que as informaes contidas neste artigo, quando combinado com algumas experincias e tempo de qualidade estudar o Modelo de Referncia de Objetos e Referncia de linguagem VBA, lhe d informaes suficientes para realizar qualquer tarefa que o motivou a comear a aprender VBA. Se assim for, timo! Se no, um bom passo seguinte o de ampliar o seu escopo para um entendimento mais geral do VBA. Uma maneira de aprender mais sobre VBA estudar cdigo de trabalho. Alm dos exemplos no Modelo de Referncia de Objetos e Referncia de linguagem VBA, h uma quantidade enorme de Excel VBA cdigo disponvel a partir de vrias fontes online, incluindo artigos no MSDN, sites que so mantidos por
profissionais Microsoft Most Valuable Professionals (MVPs), que especializar em Excel, e outros que voc pode encontrar com uma rpida pesquisa da web. O cdigo nesses recursos pode ajud-lo a resolver seus problemas imediatos de codificao e para lhe dar idias para projetos que voc pode no ter pensado ainda. Se voc prefere buscar um estudo mais sistemtico de VBA, existem vrios bons livros disponveis no VBA, e vrios bons comentrios de cada um desses livros sobre a Web que podem ajudar voc a escolher os melhores para o seu estilo de aprendizagem.