VBA – Início – MLF

VBA – Início

Esta página é dedicada para quem quer aprender ou aprofundar-se em VBA (Visual Basic for Applications). Embora o material seja voltado principalmente para o Excel, atende outros aplicativos do Office também.

Os tópicos estão listados numa sequência lógica de aprendizado:

Para utilizar o VBA num aplicativo Office você não precisa fazer nada de especial, já que normalmente suas bibliotecas são incluídas e habilitadas na instalação padrão do Microsoft Office.

O Office para Windows Surface RT, Office Online, Office Starter 2010 e Office para qualquer smartphone não suportam VBA.

Por que Usar VBA?

Os recursos do Microsoft Office são subexplorados, e uma de suas funcionalidades mais poderosas e interessantes é a capacidade de automatização de tarefas atrávés da programação VBA. Com o VBA, é possível fazer coisas que não seriam possíveis usando somente os recursos nativos dos aplicativos, ou seriam necessários muitos passos para alcançar o mesmo resultado. Exemplos:

  • No Excel: renomear dezenas de planilhas sequencialmente de uma pasta de trabalho de acordo com o valor de uma célula;
  • No Word: colorir de azul a primeira palavra de todos os parágrafos de um texto.
  • No Outlook: Salvar com um clique os remetentes de um e-mail que tem vários destinatários em sua pasta de contatos.
  • No PowerPoint: Criar uma apresentação que exibe um formulário e que o próximo slide utilize as informações preenchidas do formulário para construir o próximo slide.

O VBA pode integrar um aplicativo Office com outro. Por exemplo: você pode criar um programa em Excel que exporta algumas tabelas numa apresentação de PowerPoint e envia essa Apresentação por e-mail via Outlook. Na verdade, você pode criar sistemas inteiros usando o VBA!

Além disso, a sintaxe da linguagem VBA para o Excel é a mesma para os outros aplicativos Office. Então, se você aprender bem VBA para Excel, já é meio caminho para aprender o VBA no Word, porque dessa forma seu estudo se concentrará em aprender como o VBA interage com os objetos do Word.

O VBA pode estar presente em todos os lugares, desde no Word instalado num escritório de advocacia, no PowerPoint do estudante colegial até no Excel das empresas da engenharia. Se você dominar o VBA, pode operar qualquer computador com o Microsoft Office e começar a desenvolver, sem precisar instalar nenhum recurso adicional.

Embora o Office evolua e sofra modificações a cada novo lançamento, o VBA possui uma boa compatibilidade entre as versões. Existem códigos VBA que foram criados no Excel 97 que rodam sem problemas no Excel 2019.

E o principal: o VBA é fácil e divertido de aprender!

Se você usa Office para Mac, BrOffice, LibreOffice ou qualquer outro tipo de pacote de produtividade, terá uma péssima experiência no VBA. Se quiser aproveitar ao máximo o que o VBA pode oferecer, utilize o Microsoft Office para Windows.

Quem Usa ou Deve Usar o VBA?

O perfil dos desenvolvedores de VBA é normalmente diferente do perfil de um típico programador. Um profissional do ramo de TI não desenvolve seus programas em VBA: ele utiliza um computador com configurações de hardware acima da média e softwares específicos para desenvolvimento e sua profissão é desenvolver programas. Por outro lado, existem milhões de programadores de VBA que são contadores, engenheiros, advogados, médicos, orçamentistas e muitos outros profissionais dos mais variados segmentos.

Por esse motivo, o VBA tem que ser uma ferramenta de desenvolvimento simples para resolver problemas práticos desses profissionais que não são desenvolvedores dedicados, e sua curva de aprendizado não pode ser complicada. É uma ferramenta de apoio para sua profissão que irá aumentar sua produtividade e te poupar de fazer tarefas manuais, tediosas e susceptíveis a erro humano.

Se você utiliza algum software do Microsoft Office diariamente e quer extrair o máximo em produtividade, deve aprender VBA. Isso tornará seu trabalho mais eficiente e, o melhor, mais interessante. Ao desenvolver em VBA sua forma de pensar em como organizar seus documentos irá evoluir.

As políticas de segurança da informação das empresas estão controlando cada vez mais o que seus funcionários podem acessar. Se a empresa em que trabalha proíbe acesso à internet, pen drives e instalar outros programas, pode ser que sua única opção para automatizar suas tarefas seja através do VBA no pacote Office pré-instalado pela empresa.

É essencial que o seu inglês esteja bom para aprender VBA: todos comandos são em inglês, assim como muitos recursos de ajuda disponíveis em livros e na Internet.

Vantagens e Desvantagens do VBA

O VBA está ultrapassado. Linguagem do século XX… Que piada!

O VBA é um lixo, linguagem estruturada, gambiarrado e nem orientado a objetos ele é!

É verdade que você não vai conseguir criar um sistema de banco ou apps para celular usando o VBA. Assim como qualquer linguagem de programação, o VBA tem suas vantagens e desvantagens. Não estamos aqui para defender o VBA, mas se você acreditar em nós ao afirmarmos que vale a pena dedicar tempo e energia no VBA, garantimos que não irá se decepcionar.

O VBA foi criado para resolver problemas e expandir as funcionalidades dos aplicativos do Microsoft Office. Então, para querer aprender VBA, você já tem que ter um conhecimento pelo menos básico do aplicativo Office que você usa, como Word, Excel, PowerPoint ou Outlook. É muito difícil simpatizar com o VBA se você não usa o Microsoft Office.

Vantagens

O VBA precisa de poucas linhas de código para resolver um problema de um aplicativo Office que, se fizesse por outra linguagem, levaria dezenas de linhas. E mais: o ambiente de desenvolvimento de VBA já vem integrado ao aplicativo que você quer automatizar, enquanto que outra solução necessitaria instalar um software extra no computador. Você pode ligar qualquer computador que possua Office e começar a desenvolver em VBA, mas em outras linguagens de programação, não.

Mesmo que você não desenvolva em VBA futuramente, não terá perdido tempo. O VBA é uma ótima porta de entrada no mundo de desenvolvimento de software para pessoas que não tem formação em TI. Além disso, uma linguagem de programação bastante utilizada no mercado atualmente, o VB.NET é uma evolução do VBA, e hoje ela é utilizada em vários segmentos como desenvolvimento de aplicações web, jogos para celulares, sistemas ERP e muito mais. O VBA apresenta muita semelhança com o VB.NET.

Uma grande vantagem do VBA é a velocidade em que se constroem programas: é muito rápido o processo de escrever, testar e executar. Quando escrevemos um programa e vamos executá-lo, normalmente temos que esperar um tempo em que a máquina virtual do ambiente de desenvolvimento converta seu código para linguagem de máquina (chamado de tempo de compilação). À medida em que a linguagem de programação se torna mais complexa, esse tempo aumenta. No VBA, esse tempo é quase zero. Para fazer scripts e testes rápidos, ele é imbatível! Além disso, já está integrado na aplicação que você quer automatizar, e então não é preciso importar bibliotecas nem desenvolver códigos extras que apontem para o aplicativo desejado.

Desvantagens

Embora a Microsoft tenha garantido que não irá remover o VBA do Office em versões futuras, também não irá trazer inovações à ferramenta. Infelizmente, ele não recebe atualizações significativas desde 1999. Então, usando o VBA, você estará trabalhando com uma ferramenta que é praticamente a mesma há 15 anos. A causa desse abandono é que o orçamento para a extensibilidade de programação, no cenário atual, se encontra em aperfeiçoar a próxima geração de automatização para Microsoft Office, baseado em JavaScript e HTML, chamada de Office Addins.

Não é possível usar o VBA fora de um aplicativo Office. Você pode até fazer macros que interajam com outros programas que não sejam da Microsoft, mas você sempre irá precisar de um aplicativo hospedeiro para executá-lo. Uma das consequências disso é que o VBA não gera arquivos executáveis exe. Se seu objetivo fim é gerar pacotes executáveis independente de uma plataforma, o VBA não é para você.

Um documento Office incorpora em si as macros que utiliza. Então, se você criar uma planilha automatizada e distribuir sua pasta de trabalho para outras pessoas e no dia seguinte perceber que há uma falha no código, terá que reenviar o novo arquivo com o código correto para cada uma dessas pessoas. Se um dos destinatários já tiver trabalhado no primeiro documento enviado, terá que refazer o serviço no documento correto ou importar somente o código corrigido, que exige um bom nível de VBA para fazê-lo.

Na maior parte das vezes, você irá querer que o VBA trabalhe orientado a eventos ou que atue como um interpretador de scripts. No entanto, o VBA não é uma linguagem plenamente orientada a objetos. A consequência disso é que ele não suporta algumas propriedades desse sistema, como por exemplo, a ausência (ou deficiência) de herança, polimorfismo e pacotes (namespaces).

Outros Recursos de Aprendizagem

Você pode aprender mais sobre VBA seguindo o meu canal de YouTube e também assinando as novidades deste site.

Varie as formas de estudar: deverá, obrigatoriamente, ler um livro. Vídeos e blogs são usados para estudar uma funcionalidade específica ou relembrar alguns conceitos. A participação dos fóruns é essencial. Primeiro, tente responder as perguntas. Depois, compare sua resposta com a resposta de alguém mais experiente e seu aprendizado irá decolar.

Livros

Nunca li livros específicos de VBA em português. Todas as recomendações listadas estão em inglês:

Sites

Por |2018-08-08T13:17:09+00:00julho 7th, 2018|VBA|11 Comentários

Sobre o Autor:

Felipe Costa Gualberto é Microsoft Most Valuable Professional (MVP) desde 2013 e é Diretor Técnico da MLF Soluções Tecnológicas e Educação Corporativa. Áreas de interesse: Power BI, Excel, VBA, Office Addins, Sql Server, .NET

11 Comentários

  1. Adelmo 20 de agosto de 2018 em 10:22 - Responder

    Ola como vai tudo bem, estava vendo seu vídeo no youtube onde você mostra como inserir um calendário no VBA e não consegui baixar a planilha de teste poderia enviar para meu e-mail [email protected] obrigado

  2. Michel Cesar 8 de setembro de 2018 em 08:57 - Responder

    Excelente explanação sobre essa ferramenta que com certeza já salvou vidas no dia-a-dia das empresas, e pela qual eu e muitas outras pessoas são apaixonadas! Uma pena a Microsoft não investir mais em melhorias no VBA… obrigado por compartilhar mestre Felipe!

  3. oliv_lucas_ 20 de setembro de 2018 em 15:41 - Responder

    Boa tarde, Felipe!

    Já busquei em diversos lugares e não encontrei nada sobre, acredito que você possa me ajudar…
    Queria saber se existe alguma maneira de copiar um objeto de um Workbook para outro.

    Ex.: Tenho um objeto de estilo de tabela (TableStyle) criado em um Workbook, chamado [w1], gostaria de inserir esse mesmo objeto (TableStyle) em um outro Workbook, chamado [w2], basicamente criar uma cópia, sem precisar fazer manualmente.

    Algo do tipo: w1.TableStyle(ts1).Copy Destination:= w2

    Mas obviamente, isso não exite…

    Obrigado pela atenção.

    • Felipe 24 de setembro de 2018 em 20:40 - Responder

      Olá, tudo bem? Nunca tive essa necessidade.
      Encontrei um vídeo que ensina como copiar estilo personalizado de Tabela Dinâmica (e não de Tabela) neste link: https://www.youtube.com/watch?v=9cP_IahEc1U
      Será que a mesma técnica funciona para Tabelas?

      • Lucas 10 de outubro de 2018 em 15:22 - Responder

        Obrigado, através desse link consegui pensar em uma outra maneira de resolver o problema, obrigado!

  4. Kellvin 30 de outubro de 2018 em 21:39 - Responder

    Olá Felipe, acompanho seu trabalho ha algum tempo…. será consegue tirar essa minha duvida?

    fiz um código que cria uma nova pasta do excel salva em um diretoria e envia a um destinatário via email, porém quando eu passei utilizar o office365 ele começou a fechar a pasta errada (onde está o codigo) e parando todo o processo, acho que o problema está no method close… mas não consegui resolver…

    Public Sub D_email()

    Sheets(“Taxas Contratadas”).Select

    Dim Pasta As Workbook, PlanTaxasContratadas As Worksheet, NomePasta As String
    Dim Lin As Long, email As String, UltimaLin As Long, TradeDate As Date
    Dim objOutlook As New Outlook.Application
    Dim objEmail As Outlook.MailItem

    ‘Desliga a atualização de tela
    Application.ScreenUpdating = False

    ‘Define que PlanTaxasContratadas é a planilha Taxas Contratadas
    Set PlanTaxasContratadas = Sheets(“Taxas Contratadas”)

    ‘Descobre a ultima linha preenchida da planilha
    UltimaLin = PlanTaxasContratadas.Range(“A1000000”).End(xlUp).Row

    ‘Faz do 1º até o ultimo email
    For Lin = 1 To Range(“tblEmails[Email CC]”).Rows.Count
    ‘Lê o email da tabela de emails
    email = Range(“tblEmails[Email CC]”).Item(Lin).Value

    ‘Filtra de acordo com o e-mail especificado
    PlanTaxasContratadas.Range(“A1:J” & UltimaLin).AutoFilter Field:=10, _
    Criteria1:=email
    ‘Criar um arquivo em branco
    Set Pasta = Workbooks.Add ‘Define que Pasta é o arquivo em branco
    ‘Copia somente as células visíveis e cola no arquivo em branco
    PlanTaxasContratadas.Range(“A1:I” & UltimaLin).SpecialCells(xlCellTypeVisible).Copy _
    Pasta.Sheets(1).Range(“A1”)
    ‘inserir formatação das linhas e colunas

    ‘Troca o nome da planilha do arquivo em branco
    Pasta.Sheets(1).Name = “Taxas Contratadas”
    ‘Auto-Ajuste das colunas
    Pasta.Sheets(1).Cells.EntireColumn.AutoFit

    ‘Exclui as planilhas que estão sobrando no arquivo e que tem nome diferente de “Taxas Contratadas”
    For Each Plan In Pasta.Sheets
    If Plan.Name “Taxas Contratadas” Then ‘Se o nome é diferente Taxas Contratadas
    Application.DisplayAlerts = False
    Plan.Delete ‘Exclui
    Application.DisplayAlerts = True
    End If
    Next Plan

    ‘Endereço e nome do arquivo que vai ser enviado
    NomePasta = ThisWorkbook.Path & “\Taxas Contratadas.xlsx”
    ‘Salva e fecha o arquivo com a planilha separada
    ActiveWorkbook.Close SaveChanges:=True, _
    Filename:=NomePasta
    ‘Novo Email
    Set objEmail = objOutlook.CreateItem(olMailItem)

    With objEmail
    .To = email ‘Para
    .CC = “z0037anx;Z0032U1N”
    .Subject = “Taxas Contratadas – ” & Date ‘Assunto
    .Attachments.Add NomePasta ‘Anexo
    .Body = “Prezado,” & vbCrLf & _
    ” ” & vbCrLf & _
    “Segue anexo relatório de contratação de hedge e suas taxas.” & vbCrLf & _
    ” ” & vbCrLf & _
    “As taxas já estão disponíveis no Currima.” & vbCrLf & _
    ” ” & vbCrLf & _
    “Atenciosamente,” & vbCrLf & _
    “SFS TRE AM IHT BRA”
    .Send ‘Envia
    ‘.Display

    End With

    ‘Apaga o arquivo que foi exportado
    On Error Resume Next
    FileSystem.Kill NomePasta
    On Error GoTo 0

    Next Lin

    ‘Limpa o filtro
    PlanTaxasContratadas.Range(“A1:J” & UltimaLin).AutoFilter

    ‘Liga a atualização de tela
    Application.ScreenUpdating = True

    MsgBox “E-mails enviados com sucesso!”, vbInformation

    • Felipe 31 de outubro de 2018 em 09:02 - Responder

      Olá, tente trocar ActiveWorkbook.Close por Pasta.Close

  5. Junior 7 de novembro de 2018 em 16:19 - Responder

    Olá Felipe, tudo bem?
    Tenho passado um sufoco para aprender VBA, pois sou novato em TI, e hora e outra precisamos de alguma coisa em VB , e o seu conteúdo tem me ajudado muito já que não sei muita coisa. Essa mensagem é estritamente em caráter de agradecimento pelo simples fato de disponibiliza-lo gratuitamente, parabéns pelo conteúdo e valeu!

    • Felipe 9 de novembro de 2018 em 09:15 - Responder

      Muito obrigado, Junior, e bons estudos!

Deixe um comentário