O Microsfot Office 2007 não exibe por padrão na instalação a guia desenvolvedor, essa guia é a que traz as ferramentas para execução e gravação de macros. Para ativar a guia desenvolvedor clique no botão do Office e clique em Opções do Excel; na janela opções do excel e marque a caixa de opções “Mostrar Guia Desenvolvedor na faixa de opções.

A guia desenvolvedor fornece uma interface para a execução e Gravação de Macros

Agora o Excel exibe uma nova guia na faixa de opções com muitas das ferramenta que nós preisamos para trabalhar com Macros, vamos ver uma breve descrição dos ítens mais importantes.

a guia desenvolvedor é divida em 3 grupos: Código, Controles e XML.

Como você pode perceber na figura acima a guia desenvolvedor é divida em 3 grupos: Código, Controles e XML.

O grupo Código possui as seguintes opções:

  • Visual Basic – Abre o editor do Visual Basic
  • Macros – Exibe uma lista das macros disponíveis
  • Gravar Macro – Inicia o processo de gravação de uma macro, quando clicado esse botão se transforma em “Parar Gravação”
  • Usar Referências Relativas – por padrão o gravador de macros do excel grava todas as ações utilziando referências absolutas. A referência Absoluta significa que o endereço real da célula será utilizado na gravação. A referência relativa implica que o endereço da célula depende de outra célula. Por exemplo, R[10], C[-2] refere-se a uma célula localizada 10 linhas abaixo e duas colunas à esquerda da célula ativa.
  • Segurança de Macro – segurança de macro permite configurar o nível de segurança desejado para a execução de macros, esse ítem merece um Post falando exclusivamente sobre ele.

O Grupo controle possui as seguintes opções:

  • Inserir – exibe controles que podem ser adicionados a uma planilha.
  • Modo de Design -  Ativa o modo de Design, permitindo que o usuário edite os controles na plailha. Se tentarmos editar um controle ante de entrarmos no modo Design, acionaremos a ação associada ao controle a ser executado.
  • Propriedades – Exibe a janela de propriedades, que permite modificar várias opções referentes aos controles.
  • Exibir Código – Abre o editor de macros para modificarmos o código relacionado ao controle selecionado.
  • Executar Caixa de Diálogo – executa uma caixa de diálogo que tenha sido criada na planilha através da opção “Inserir…”

O grupo XML contém ferramentas que auxiliam quando trabalhamos com arquivos XML, como no momento XML está fora do escopo desse blog, esse grupo não será discutido.

Vamos criar hoje uma macro que faz várias cópias de uma planilha modelo e renomeia cada cópia com base em uma lista de nomes digitada numa denominada planilha.

Primeiramente crie uma planilha de modelo, não precisa ser nada muito complexo, você pode deixar para elaborar essa planilha depois.

Por enquanto, apenas crie uma nova pasta de trabalho e adicione as planilhas denominadas Modelo e uma outra planilha chamada Nomes, apague as planilhas que sobrarem.

Na planilha nomes digite uma lista de nomes para as planilhas na coluna A. Tenha em mente que esses nomes serão utilizados para renomear as cópias da planilha modelo.

O código vai:

  • Percorrer a lista de nomes até o final
  • adicionar uma nova planilha para cada nome digitado na lista
  • copiar os dados da planilha modelo
  • colar os dados na nova planilha
  • renomear a planilha com o nome da linha correspondente

Vamos à codificação.

adicione um módulo para receber o nosso código, acrescente ao novo módulo o código abaixo.

Codigo_fonte

Acredito que o código acima esteja bem claro e comentado, vou apenas fazer mais alguns comentários sobre algumas expressões insteressantes no código.

A expressão “Cells(Rows.Count, 1).End(xlUp).Row” descobre qual é a última linha com dados na coluna A da planilha ativa, no nosso caso a planilha “Nomes”.

Essa linha é como se nós fossemos para a última linha da coluna A da planilha ativa e pressionássemos ctrl+ Up “.row” retorna o número dessa linha.

“Sheets.Add after:=Sheets(Sheets.Count)” adiciona uma nova planilha, “after:=Sheets(Sheets.Count)” diz que a planilha deve ser adicionada ao final de todas as planilhas.

Pronto, se você tem uma planilha que precisa gerar várias cópias dela e renomear cada cópia, já sabe como resolver o problema.

Para fazer o download do modelo clique aqui.

Até a próxima…

Vamos aprender hoje a fechar uma planilha através de macros. É um procedimento muito útil e simples de ser feito.

Para o exemplo de hoje vou utilizar um formulário com dois botões de comando, um botão para fechar a planilha sem salvar e outro botão para fechar a planilha salvando as alterações.

Abra o editor do VBA e monte um formulário igual ao da imagem abaixo.

imagem1

Agora vamos alterar algumas propriedades dos botões para melhorar a aparência e facilitar a codificação.

Primeiro vamos alterar a própriedade (Name). Por padrão os botões recebem o nome CommandButton1, commandButton2 e assim por diante, é sempre uma boa idéia alterar o nome do botão para alguma coisa mais relevante, quando você estiver trabalhando com projetos com mais de dois botões fica fácil saber qual código é relacionado a qual botão.

Altere as propriedades (Name) do CommandButton1 para “cmd_Fechar_sem_salvar”.

Altere a Propriedade (Name) do CommandButton2 para “cmd_Fechar_Salvar”.

Além da propriedade (Name) uma outra propriedade que obrigatóriamente temos que alterar nos nossos projetos em relação aos botões de comando é a propriedade Caption do botão.

A propriedade Caption altera o texto que aparece dentro do botão no formulário, tome muito cuidado em relação ao texto que você adiciona a essa propriedade porque é ela quem vai dizer para o usuário o que o botão faz, o que parece óbvio pra você, que está codificando, pode não ser tão claro assim para o usuário.

Altere a propriedade Caption do botão Cmd_Fechar_sem_Salvar para Fechar Sem Salvar.

altere a propriedade Caption do botão cmd_fechar_salvar para Fechar e Salvar

imagem2

Agora vamos adicionar código aos botões, primeiro vamos codificar o botão Fechar sem Salvar, para fazer isso clique duas vezes no botão Fechar sem Salvar e adicione a linha ActiveWorkbook.Close savechanges:=False

imagem3

A expressão ActiveWorkbook.close fecha a planilha que estiver ativa, podemos definir se desejamos salvar ou não a planilha alterando a propriedade savechanges.

Savechanges:=false diz para o Excel que a planilha deve ser fechada e as alterações que ainda não tiverem sido salvas devem ser descartadas.

Para fechar a planilha e salvar as alterações é preciso apenas alterar savechanges:=false para savechanges:=true.

Abra o código do botão fechar e salvar e adicione a linha ActiveWorkbook.Close savechages:=true para que o Excel feche a planilha ativa e salve qualquer alteração que ela tenha sofrido.

imagem4

Para fazer o download da planilha utilizada nesse exemplo clique aqui.

O Excel tem uma opção para abrir todos os arquivos que estiverem dentro de uma pasta no seu computador. Eu acho essa opção interessanate para poder compartilhar minhas macros com várias pessoas na rede de computadores.

Primeiro crie uma pasta no seu computador para guardar os arquivos que você quer que sejam abertos pelo excel, mas atenção, não deixe muitos arquivos nessa pasta para evitar problemas de lentidão, o ideal é deixar um ou dois arquivos somente.

Eu utilizo uma pasta chamada Macros no disco local C: do meu computador, vou utilizar esse endereço como referência para o resto do tutorial.

Primeiro crie a pasta, depois vá até o excel e clique no botão do office, clique no botão “Opções do Excel”, selecione a opção “Avançado”; rode a tela até encontrar uma divisão “Geral”. Uma das últimas opções desse grupo é “Ao inicializar, abrir todos os arquivos em:”

Coloque nessa caixa o caminho para a pasta onde você colocou as suas macros, no caso “C:\macros” (sem as aspas").

Agora toda vez que você abrir o Excel ele abrirá os arquivos que estiverem dentro dessa pasta.

Opções_Excel

No caso de uma planilha de macros pode ser interessante deixá-la oculta, para fazer isso vá na planilha que você tem as macros clique na guia “Exibi”r e em seguida no botão “Ocultar”, agora salve a planilha.

Imagine que você precisa renomear uma dúzia de planilhas baseado no conteúdo da célula A1 de cada Planilha. Esse é o problema que nós vamos resolver hoje.

Primeiro vamos criar um código para renomear as planilhas utilizando como nome o condeúdo da célula A1.

Primeiro, adicione um novo módulo na sua planilha utilizando o editor de VBA (pressione Alt + F11).

Para evitar problemas é bom checar se a célula contém algum valor, assim não teremos problemas caso a célula esteja vazia. Vamos utilizar um IF para dizer que se a célula não estiver vazia, então o nome da planilha vai ser o que estiver escrito na célula A1. veja:

01_renomeando_planilhas

O código acima checa se a célula 1 da planilha ativa tem alguma coisa escrita, se tiver, ele renomeia a planilha ativa para o nome digitado préviamente na célula A1. Agora precisamos que esse procedimento seja executado com frequencia, um bom momento para executar esse tipo de macro é na hora em que a planilha é aberta, assim, não corremos o risco de esquecer de executar o procedimento.

Para executar procedimentos ao abrir uma planilha é muito simples.  Você pode notar que no Editor do VBA existe um objeto chamado “EstaPasta_de_trabalho” ao clicar duas vezes nela podemos acessar eventos relacionados a pasta de trabalho em questão, já trabalhamos com esse eventos numa postagem de algum tempo atrás, onde executávamos procedimentos ao fechar a planilha.

No topo da área de codificação, selecione o objeto Workbook em procedimento selecione Open o próprio editor já vai gerar para você as linhas iniciais do procedimento descrito abaixo:

02_executando_Procedimentos

No código da imagem acima utilizamos uma variável de controle “i” para percorrer as diversas planilhas da pasta de trabalho utilizando seu índice.

Uma pasta de traalho pode ter várias planilhas, por exemplo, “Plan1”, “Plan2” e assim por diante, nós podemos nos referenciar as planilhas utilizando o nome, ou então a sua posição na pasta de trabalho. no nosso caso fica muito dificil utilizar o nome das planilhas para percorrer todas elas, o mais fácil é utilizar seu índice, dessa forma podemos utilizar a expressão “Sheets.count” para saber quantas planilhas existe na plasta de trabalho.

Criamos então um loop que percorra as planilhas de 1 até o número de planilhas que existirem na pasta de trabalho, ativamos a planila e chamamos o procedimento criado anteriormente para renomear a planilha ativa.

Pronto,vagora toda vez que você abre a planilha o procedimento é executado e a as planilhas são renomeadas.

para fazer o download desse arquivo utilizado nesse tutorial clique aqui.

Algumas vezes ao importar dados de outros programas no Excel nos deparamos com um problema na formatação das datas. Embora as datas que estamos importanto estejam no nosso formato de datas, eles aparecem no Excel no formato americano, onde o mês vem antes do dia, causando grandes transtornos.

Solucionar esse problema é muito simples, mas pode levar muitos, principalmente, mas não somente os novatos, a perder algumas horas pensando e tentando arrumar uma solção para esse problema.

E não é um problema incomum de acontecer veja o exemplo abaixo:

Codigo_gera_erro

Observe o resultado na foto abaixo, de como a data vai ser grafada na planilha:

02_resultado_errado

Para que isso não aconteça precisamos informar nossa macro que o que estamos gravando na planilha é uma data e não um texto, assim o Excel não vai precisar fazer a conversão do texto em data, o que ocasiona esse erro.

Podemos usar a expressão de conversão cDate, para converter um texto comum em uma data. Um problema comum nesse caso, é tentarmos converter um texto que não seja uma data, isso gerará um erro de execussão, uma vez que o VBA não vai conseguir converter, veja a imagem abaixo.

03_data_estranha

Podemos tratar esse erro facilmente, basta que, antes de convertermos a data, checarmos se o que vamos converter é uma data válida ou não.

para checarmos se é, ou não é, uma data podemos utilizar a expressão isDate.

04_CodigoCorreto

IsDate vai retornar True se for uma data e False se o que for testado não puder ser convertido em uma data, não vai gerar erro de execução e a data vai ser gravada na planilha do jeitinho que nós queríamos.

05_resultado_correto

Agora tudo o que você tem que fazer é adaptar os exemplos apresentados em suas planilhas.

Para baixar o arquivo de exemplo clique aqui.

Você seguiu nosso tutorial anterior e criou um procedimento para esconder o Excel. O problema é que o usuário para quem você enviou a planilha não possui as macros habilitadas ou então o nível de segurança está alto demais para permitir a execução automática das macros. O que fazer?

Uma das várias possíveis soluções é adicionar uma planilha de capa, e nessa capa inserir uma mensagem para que o usuário habilite as macros antes de continuar. para que funcione como esperamos, podemos ocultar todas as demais planilhas e voltar a exibi-las somente quando as macros forem habilitadas. Vamos ao passo a passo.

Primeiro, pegue uma planilha em branco e coloque a mensagem que você quer que o usuário veja ao abrir o arquivo, formate a vontade, mude o nome da planilha para “Mensagem”, você pode utilizar outro nome, mas não se esqueça que o nome que você for utilizar na planilha será utilizado nos códigos mais tarde.

Mensagem Pedindo ao Usuário para Habilitar as Macros
Crie uma planilha pedido ao usuário para habilitar as macros

Agora você pode ocultar as outras planilhas, se quiser mais segurança ainda, pode ocultar e proteger as planilhas com senha.

Vamos agora codificar a planilha para que, ao abrir o arquivo, se as macros estiverem habilitadas o nosso código volte a exibir as planilhas que foram ocultadas, se você protegeu com senha, deve desproteger nesse momento. Se as macros estiverem desabilitadas, nada vai acontecer a não ser abrir uma planilha que vai exibir a nossa planilha de capa, o usuário não vai poder fazer mais nada, já que as outras planilhas estarão ocultas e, talvez,  protegidas.

Abra o VBA Editor e clique duas vezes no objeto “EstaPasta_de_trabalho” para ativar o código relativo a pasta de trabalho. Selecione “Workbook” no topo da janela, e em seguida o evento “Open”, adicione o código abaixo.

Código Inserido no Workbook Open volta a exibir as planilhas ocultas

Código Inserido no Workbook Open volta a exibir as planilhas ocultas.

O código acima percorre todas as planilhas, da primera até a última e vai reexibindo as que estiverem ocultas.

Nossa planilha ja esta quase pronta, resta-nos apenas mais um problema. Uma vez que o usuário tenha aberto a nossa planilha num computador com as macros ativadas as planilhas vão voltar a ser exibidas, ao salvar e fechar o arquivo as planilas foram salvas de forma aparente; se nosso usuário abrir a planilha em algum outro computador, independentemente das macros estarem habilitadas ou não, todas as planilhas estarão visíveis. Para contornar esse problema precisamos adiconar a nossa planilha um código que, ao fechar a planilha, volte a ocultar as planilhas deixando visível apenas a planilha de Capa, se desejarmos proteger a planilha para evitar que o usuário venha a reexibir as planilhas manualmente devemos acrescentar o código para bloqueá-la também.

No mesmo lugar onde você escolheu o evento open da pasta de trabalho ativa, selecione agora o evento “BeforeClose”; esse evento é executado quando o usuário resolve fechar a nossa pasta. Adicione o código abaixo:

Código Inserido no Workbook BeforeClose oculta as palanilhas antes de fechar

Código Inserido no Workbook BeforeClose oculta as palanilhas antes de fechar

Pronto, qualquer dia desses vamos falar sobre como proteger e desproteger a planilha através do VBA.

Para baixar a planilha de exemplo clique aqui.

Utilizando Aplication.visible

Existem diversas maneiras de fazer o Excel sumir e a sua aplicação parecer um programa que nada tem a ver com o Excel. a minha preferida é utilizar application.visibel porque ela causa menos danos colaterais.

A Propriedade “Visible” determina se determinado obojeto será visível ou não, logo, application.visible = false fará o Excel “desaparecer”, o programa continuará visivel, mas  toda a interface padrão será ocultado, note que essa linha de código não fará com que seus formulários desaparaçam com o Excel.

Vamos utilizar um pequeno exemplo para que você possa compreender melhor. Primeiro, crie um formulário parecido com o formulário abaixo:

Vamos fazer com que, ao abrir o formulário, a inerface do excel deixe de ser vispivel, clique duas vezes em algum lugar vazio desse nosso novo formulário a fim de podermos codificá-lo. acrescente o código abaixo no evento initialize do formulário

Muito bem, agora precisamos criar um código para que o Excel volte a aparecer, caso contrário não seria possivel fechar a planilha. Vamos fazer com que o Excel volte a aparecer caso o formulário que criamos seja finalizado. Ainda no código do formulário selecione o evento terminate e adicione o código abaixo

Eu acrescente os botões “Ver/Ocultar o Excel”  e “Fechar no formulário”, vamos colocar os códigos dos respectivos botões. primeiro clique duas vezes no botão “Ver o Excel” e acrescente o código abaixo:

O Operador lógico not é uma negação, ou contrário da propriedade visible, se visible for igual a False então not fará com Visible seja igual a True e vice versa.

Vamos agora programar o botão fechar para que o Excel seja fechado. Clique duas vezes no botão fechar e acrexscente o código abaixo no evento click do botão:

Pronto, agora tudo o que você tem que fazer é chamar esse formulário à partir da planilha, ou então chamar esse formulário ao abrir a planilha.

Você pode também ver um vídeo sobre esse tutorial no youtube.

Watch this video on YouTube.

Todas as pessoas que desejam desenvolver programas de computador, independente da linguagem a ser utilizada, precisam conhecer a lógica de programação. Lógica nada mais é que alguma coisa que previsivelmente retorna um resultado, quando apertamos o interruptor que acende uma lâmpada, ao pressionarmos o botão, nós esperamos o resultado lógico, que a lâmpada acenda. A lógica aplicada à programação se resume a uma sequência de passos lógicos e limitados que levam a um resultado.

Os passos executados pelo nosso programa devem ser executados dentro de uma sequência, que é chamada de sequência lógica, a sequência lógica determina a ordem das ações para se atingir o resultado. Cada um desses passos, na programação, recebe o nome de instruções, o programa que você desenvolve apenas segue a instruções dadas por você.

Assim como uma andorinha só não faz verão, uma instrução só não faz um programa, um programa de computador é um conjunto de várias instruções ordenadas em uma sequência lógica que leva ao resultado esperado, e essa ordem ou sequência, é muito importante para o resultado final.

Pensando em algo prático e real, para fazer um bolo você não pode assar antes de misturar os ingredientes, ou pode? Existe uma sequência bem definida de passos que devem ser seguidos para se atingir o objetivo, primeiro os ingredientes são misturados (em muitos casos em uma sequência preestabelecida) para que depois a massa vá ao forno para assar.

Para nos auxiliar nessa tarefa de criar programas devemos utilizar uma ferramenta chamada algoritmo. Pense num algoritmo como uma receita de bolo, ou um manual de instruções. O algoritmo é uma sequência finita de passos que levam a resolução de um problema. Qualquer coisa que tenha certa rotina, pode ser transformada em algoritmo.

Um detalhe importantíssimo do algoritmo é que ele deve ser muito claro e preciso.

Praticamente qualquer tarefa pode ser convertida num algoritmo, das mais complexas as mais simples, por exemplo, sacar dinheiro de um caixa eletrônico.

  • Vá ao caixa eletrônico
  • Insira o cartão no leitor
  • Digite a senha
  • Aperte o botão para fazer saque
  • Digite o valor
  • Retire o dinheiro da máquina

Um programa de computador nada mais é do que um algoritmo escrito numa linguagem específica, no nosso caso VBA. Ao criar um programa primeiro criamos um algoritmo, organizamos racionalmente cada passo a ser dado para que o objetivo seja atingido, escrevemos esses passos com as nossas palavras, e depois “traduzimos” esse algoritmo na linguagem utilizada pelo computador.

Planejar é a parte mais importante do desenvolvimento de qualquer programa.

As vezes, ao desenvolver planilhas em VBA, precisamos checar ao fechar a planilha se certa condição foi atendida ou não, por exemplo, em uma determinada planilha você precisa verificar se uma certa célula foi preenchida, caso contrário você deseja alertar o usuário e impedir que a planilha seja fechada.

Para fazer isso você precisa entrar no editor de macros (alt+F11) clicar duas vezes em “EstaPasta_de_trabalho” para exibir a área de codificação correspondente a pasta de trabalho.
Nela nós encontramos o procedimento beforeClose do objeto workbook. O Código inserido nesse procedimento é executado antes da planilha ser finalizada, o que permite fazer aquilo que precisamos, checar se a condição foi atendida ou não, veja um pequeno exemplo.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'este evento é executado antes da planilha
    'ser fechada
    If Cells(1, 1).Value <> "Fechar" Then
        'se não estiver escrito a plavra
        '"Fechar" na primeira célula da planilha
        'exibe a mensagem
        MsgBox "não vou fechar"
        'cancela o fechamento da planilha
        Cancel = True
    End If
End Sub

um grande abraço,

 
 

Sobre Nós

Com sede na cidade de Bragança Paulista, interior de São Paulo, o Excel Experts desenvolve soluções para empresas desde de 2001. tendo como uma de suas principais razões a necessidade que as pequenas, médias e grandes empresas tem de desenvolver soluções em Excel, que refletem diretamente no desempenho de seus negócios. Ao longo desses anos nós temos trazido redução de custos e ganho de produtividade aos nossos clientes, através do desenvolvimento de soluções de automatização de tarefas e planilhas personalizadas.A nossa missão é facilitar a sua vida e lavá-lo á um aproveitamento ainda melhor das ferramentas que muitas vezes já estão em suas mãos. Estamos empenhados em melhorar o desempenho operacional de nossos clientes, concedendo aos seus negócios maior flexibilidade, agilidade e eficiência.