You are on page 1of 18

E XCE L VBA 2007

VISUAL BASIC FOR APPLICATIONS (VBA) VBA IS A PROGRAMMING


INTERFACE INTEGRATED INTO MICROSOFT OFFICE APPLICATIONS.
THIS PAGE REUNIREI SOME EXAMPLES OF CODES, SOME CREATED
BY ME, ADAPTED FROM OTHER SITES. I'M SURE THAT THIS SITE
WILL HELP A LOT. IF YOU HAVE QUESTIONS LEAVE A COMMENT,
AND I SHALL REPLY AS FAR AS POSSIBLE.QUARTA-FEIRA, 11 DE
FEVEREIRO DE 2009

Mudamos de endereço

É com grande
satisfação que venho informá-los da nossa mudança de endereço. Já tem
algum tempo que vocês devem ter notado que o nosso site não sofre
alterações, e não apresenta novidades. Isso acontece devido a uma ênfase
maior no meu site comercial, o www.excelexperts.com.br, que requer mais de
minha atenção.

Por um tempo vocês ficaram desamparados de atualizações, mas isso passou, a partir de
agora vocês já podem acessar o novo blog em blog.excelexperts.com.br sintam-se à
vontade para usar e abusar desse nosso novo espaço, as informações contidas aqui, não
serão transportadas para lá, mas ficarão aqui disponíveis para consulta, porém as
novidades somente serão publicadas no novo blog, por favor, não deixe de nos fazer
uma visita.

Muito obrigado pela compreensão.


POSTADO POR JOSÉ ALVES ÀS 05: 44 0 C OMENTÁR IOS

TERÇA-FEIRA, 7 DE OUTUBRO DE 2008

Algorítimos

algorithm
algoritmo; regras usadas para definir ou executar uma tarefa específica ou
para resolver um problema específico. (dic Michaelis)

Um algorítimo é uma sequência de passos, que leva a execução de uma


tarefa. Quando você faz um bolo, não que programadores façam bolo, ao ler a
receita do bolo você está seguindo os passos de um Algorítimo. Um algorítimo
deve ser claro e muito preciso, imagine uma receita de bolo em que ao invés
de duas xícaras de farinha de trigo, viesse escrito, coloque um pouco de
farinha de trigo, quanto seria esse pouco? veja que a receita ficaria imprecisa,
o que faria com que o seu bolo ficasse...
Um bom exemplo de algorítimo seriam os manuais de equipamentos
eletrônicos, eles ensinam a você desde como ligar o equipamento até como
gravar programas num vídeo cassete, digo, gravador de DVD de mesa.
Para tudo o que se tenha uma certa repetitividade, pode ser criado um
algorítmo. Por Exemplo, vamos criar um algorítimo para comer um chocolate.

COMER UM CHOCOLATE

 Pegar o chocolate
 Retirar o Papel do Chocolate
 Comer o chocolate
 Jogar o papel no lixo

E se quisermos somar dois números???

SOMAR DOIS NÚMEROS

 Escreva o primeiro número na variável A


 Escreva o segundo número na variável B
 Some a variável A com a Variável B e guarde o resultado na variável C
Os programas de computador não passam de algorítimos escritos numa
linguagem de programação e que são interpretados e executados pelo
computador, no caso de um programa de computador, o algorítimo é muito
mais rígido do que o que desenvolvemos para essas tarefas acima.

Que tal agora que você já entendeu o que é um algorítimo, utilizar o espaço
para comentário e criar um algorítimo para as seguintes sugestões

1. Crie uma sequência lógica dos seus passos para tomar café da manhã.
2. Faça um algorítimo para somar dois números e dividi-los por 2.
3. Escreva uma sequência lógica para trocar o pneu de um carro.
4. faça um algorítimo para trocar uma lâmpada.

POSTADO POR JOSÉ ALVES ÀS 06: 14 0 C OMENTÁR IOS

QUINTA-FEIRA, 14 DE FEVEREIRO DE 2008

Lógica de Programação

Já vimos a interface do VBA, já vimos alguns exemplos, mas na minha opinião falta
nesse blog os alicerces da programação. Programar é uma coisa muito gostosa, mas
existe um conhecimento que é fundamental a todo o programador, é praticamente
impossível programar sem conhecer esse instrumento, ele se chama Lógica de
Programação.

Se você já é um conhecedor de programação, então já está familiarizado com as coisas


que vou discutir ao longo das próximas postagens. Agora se você é um principiante
dando os seus primeiros passos na programação em vba, estou certo de que as próximas
palavras lhe ajudarão a compreender melhor o mundo da programação.

Lógica: Ciência que tem por objeto o estudo das leis do raciocínio; coerência; raciocínio
encadeado; ligação de idéias (dicionário Brasileiro Globo)

A lógica de programação é a arte de encadear pensamentos para atingir um determinado


objetivo.

Prático não é mesmo? Um programa funciona seguindo uma sequência lógica, criada
pelo programador, funciona assim, o programa executa vários passos ordenados numa
sequencia lógica, que resultam na solução de um problema.
O programador tem que pensar em como vai funcionar o programa, pensar como se
fosse a máquina e definir os passos que o programa vai executar, para depois poder
definir o algorítimo, o que? Você não sabe o que é algorítimo? Tudo bem na próxima
postagem nós vamos falar sobre o algorítimo.

Por enquanto você já deve ter uma idéia um pouco melhor do que é lógica de
programação, não desanime, ao longo dos próximos textos você vai compreender bem
melhor o funcionamento disso, se tiver alguma dúvida ou sugestão não deixe de me
comunicar.

José Alves
Técnico Informática
www.vendadecomputadores.com

POSTADO POR JOSÉ ALVES ÀS 17: 09 1 C OMENTÁR IOS

TERÇA-FEIRA, 11 DE DEZEMBRO DE 2007

Construa o Seu Próprio Localizar

Que tal construir a sua própria caixa de diálogo “Localizar”? você pode me
perguntar:

Mas por que motivo eu iria querer criar uma caixa de diálogo localizar se o Excel já
possui esse recurso?

Bom a resposta é simples, primeiro você pode fazer pelo aprendizado, ou você pode
estar construindo um sistema próprio e queira fazer o seu próprio formulário, ou ainda,
você pode utilizar parte do código e adaptar para alguma outra aplicação que você esteja
criando, ou então use a sua criatividade, as opções são muitas.

Para começar você precisa criar um formulário semelhante a esse aqui:


Esse formulário possui os seguintes controles:

Um rótulo, uma caixa de texto, uma caixa de seleção, e dois botões de


comando.

Depois que você ajeitar esses controles no formulário vamos alterar as seguintes
propriedades dos controles:

Rótulo
Caption: Localizar:

Caixa de Texto
(Name): txtLocalizar

Caixa de Seleção
(Name): chkCelulaInteira
caption: Coincidir Conteúdo da Célula Inteira

Botão de opção 1
(Name): cmdLocalizar
Caption: Localizar

Botão de opção 2
(Name): cmdCancel
Caption: Cancelar

Propriedades do formulário
(Name): frmLocalizar
Caption: Localizar

Certo, agora vamos ao código com direito a tratamento de erro e tudo.

De dois cliques no botão “localizar”, para começar a inserir o código.

A lógica é simples, quando o formulário é carregado o usuário insere um texto


na caixa de texto e clica no botão localizar, é necessário que as células nas
quais se quer fazer a busca estejam selecionadas, caso contrário não
encontrará nada.

Quando o botão localizar é clicado, é preciso pegar o valor que estiver escrito na caixa
de texto, e procurar na planilha, quando encontrar precisa ativar a célula. Caso não ache,
ele precisa mostrar uma mensagem, avisando o usuário de que o valor não foi
encontrado na seleção. É preciso também considerar o fato de que o usuário possa não
colocar nenhum conteúdo na caixa de texto, e clique no botão localizar, nesse caso,
precisamos tratar a situação e exibir uma mensagem de erro.

Vamos lá?

Primeiro vamos criar uma variável, para armazenar o conteúdo da caixa de texto.

Vamos chamá-la de varLocalizar,e ela vai ser uma variável do tipo variant,
para que possa possuir também valores do tipo data.
Dim varLocalizar As Variant
Vamos tratar o erro caso o texto procurado pelo usuário não seja localizado,
vamos fazer assim:
On Error GoTo Erro:
Erro:
MsgBox "A Expressão não Pôde Ser Localizada"
Pronto, vamos agora supor que o usuário não coloque nada na caixa de texto e
clique no botão localizar, vamos exibir uma mensagem de texto avisando que
a caixa de texto localizar não pode ficar vazia.

Entre as linhas “On error goto erro: “ e “Erro” escreva o seguinte código:
If txtlocalizar.Text = "" Then
Me.Hide
MsgBox "Digite a expressão a ser Localizada", vbCritical
Me.Show
'muda o foco para a caixa te texto
txtlocalizar.SetFocus
Exit Sub
End If
fácil não é mesmo, mas para garantir eu vou explicar o que cada linha faz.
If txtlocalizar.Text = "" Then
Se a caixa de texto estiver vazia
Me.Hide
Esconde o nosso formulário (fica mais bonito do que uma mensagem sobre o
nosso formulário, mas é só perfumaria, você não precisa colocar essa linha se
você não quiser).
MsgBox "Digite a expressão a ser Localizada", vbCritical
Msgbox mostra a mensagem que nós colocamos entre aspas na tela, o
vbCritical, diz que o formato da mensagem é uma mensagem de erro.
Me.Show
Como nós escondemos o formulário, com o me.hide, agora nós voltamos a
mostrar o formulário.
txtlocalizar.SetFocus
txtlocalizar.setfocus é outra perfumaria, ela faz com que o foco fique na
caixa de texto quando o formulário volta a ser exibido, isso faz com que o
formulário voltando a aparecer já permita ao usuário escrever a nova
expressão a ser localizada, sem a necessidade de clicar na caixa de texto
antes.
Exit Sub
Exit sub sai da rotina e volta para o formulário, sem executar o restante do
código

End IF, fecha o IF que nós abrimos para ver se a caixa de texto não estava vazia.

Agora nós já sabemos se a caixa de texto tem alguma coisa para ser procurada ou não,
então vamos gravar o conteúdo da caixa de texto, na variável strLocalizar. Para fazer
isso basta colocar o seguinte código logo embaixo do end IF.
varLocalizar = txtlocalizar.Text
Agora precisamos verificar se o conteúdo da caixa de texto não é uma data
caso seja uma data precisamos converter o valor que na caixa de texto é
texto para data dentro da variável.
If IsDate(varLocalizar) = True Then
varLocalizar = CDate(varLocalizar)
End If

Pronto, agora podemos começar a procurar o texto na seleção. Mas antes, precisamos
ver se a caixa de checagem não está marcada, porque se estiver marcada, então
precisamos procurar a expressão exata dentro da célula e não apenas parte dela, além
disso precisamos verificar se o conteúdo da caixa de texto não é uma data, porque se for
uma data ela precisa ser convertida internamente em nosso programa para uma data,
caso contrário o nosso programa não vai conseguir localizar.

Para isso colocamos as seguintes linhas, depois eu explico parte a parte.


varLocalizar = txtlocalizar.Text
If IsDate(varLocalizar) = True Then
varLocalizar = CDate(varLocalizar)
End If

'se a caixa de coincidir célula inteira estiver marcada


If ChkCelulaInteira.Value = True Then
'procura a expressão exata
Selection.Find(what:=varLocalizar, after:=ActiveCell,
lookat:=xlWhole).Activate

Else
'caso contrário, procura por partes da célula
Selection.Find(what:=varLocalizar, after:=ActiveCell,
lookat:=xlPart).Activate
End If
'sai do código
Exit Sub

Vamos às explicações,
O código acima verifica se o conteúdo da caixa de texto corresponde à uma data, se
corresponder à data, então o texto é convertido em data "(cDate( varlocalizar)". Em
seguida checa se a caixa de checagem está marcada, se estiver, ele procura a expressão
exata se não estiver marcada, então ele procura por qualquer parte nas células. as linhas
que fazem isso são muito parecidas, o que muda é apenas uma "palavra".

Proura a expressão exata:


Selection.Find(what:=varLocalizar, after:=ActiveCell,
lookat:=xlWhole).Activate
Procura a por partes nas células:
Selection.Find(what:=varLocalizar, after:=ActiveCell,
lookat:=xlPart).Activate
Agora colocamos um exit sub, para evitar que a mensagem do tratamento de
erro não seja exibida desnecessariamente.

O código completo (inclusive com todos os comentários) fica assim:

Private Sub cmdLocalizar_Click()


Dim varLocalizar As Variant
'caso não encontre a expressão a ser localizada
'trata o erro
On Error GoTo Erro:
'checa se a caixa de texto não está vazia
If txtlocalizar.Text = "" Then
Me.Hide
MsgBox "Digite a expressão a ser Localizada", vbCritical
Me.Show
'muda o foco para a caixa te texto
txtlocalizar.SetFocus
Exit Sub
End If
'pega o valor da caixa de texto e armazena numa varável
varLocalizar = txtlocalizar.Text
If IsDate(varLocalizar) = True Then
varLocalizar = CDate(varLocalizar)
End If
'se a caixa de coincidir célula inteira estiver marcada
If ChkCelulaInteira.Value = True Then
'procura a expressão exata
Selection.Find(what:=varLocalizar, after:=ActiveCell,
lookat:=xlWhole).Activate

Else
'caso contrário, procura por partes da célula
Selection.Find(what:=varLocalizar, after:=ActiveCell,
lookat:=xlPart).Activate
End If
'sai do código
Exit Sub
Erro:
'se não achar, exibe a mensagem
MsgBox "A Expressão não Pôde Ser Localizada"
End Sub

Pronto, já podemos
localizar dados na nossa planilha, lembre-se no entanto que o nosso código só
procura nas células selecionadas.

A programação do botão cancelar é muito simples, veja:

Private Sub CmdCancel_Click()


'exconde o formulário
Me.Hide
'descarrega o formulário
Unload Me
End Sub

Para colocar esse código no botão, de dois


cliques no botão cancelar e escreva o código.

Vamos adicionar um módulo ao nosso projeto para chamar o nosso formulário, isso é
importante, principalmente se quisermos criar teclas de atalho para executar a nossa
macro(falaremos sobre isso uma outra hora).

Na Janela do projeto, no Editor do VBA, clique com o botão direito sobre a planilha que
estamos trabalhando, e clique em inserir módulo.

Um módulo padrão chamado Módulo1 será adicionado ao projeto.

Dentro desse módulo vamos criar o código que vai chamar o formulário frmlocalizar.

Sub CarregaForm()
'carrega o frmLocalizar
frmLocalizar.Show
End Sub

Se você executar esse código vai notar


que ele carrega o formulário...

Um grande abraço a todos, e se tiverem alguma dúvida, não deixem de me escrever...


críticas também são bem-vindas.

POSTADO POR JOSÉ ALVES ÀS 15: 20 8 C OMENTÁR IOS

QUINTA-FEIRA, 22 DE NOVEMBRO DE 2007


Interface de Desenvolvimento do VBA (VBE – Visual Basic Editor)

Antes de começar a escrever códigos em VBA é importante que você conheça a


interface de desenvolvimento do VBA, para acessar O VBE clique em “Desenvolvedor”
e depois clique no primeiro botão (Visual Basic) ou pressione simultaneamente as teclas
Alt e F11.

Note que o VBE possui 3 painéis distintos, Projeto, Propriedades e a área de


codificação.

Projeto

Nesse painel você pode navegar por todos os elementos do projeto, tais como,
formulários, módulos classes, etc. Observe que o VBA considera cada planilha aberta
um projeto, na imagem nós temos uma planilha aberta (Pasta1) e a planilha pessoal de
macros (Personal.xlsb).

Por padrão o VBE agrupa objetos semelhantes dentro de pastas, dependendo do projeto
você pode mais de quatro grupos de objetos associados ao projeto.

Microsoft Excel Objetos: Toda planilha numa pasta de trabalho é considerado um


objeto. Um objeto chamado EstaPasta_de_Trabalho representa a pasta em que estamos
trabalhando.

Formulários: A pasta formulários armazena os formulários adicionados ao projeto.

Módulos: Um módulo é um container que armazena os procedimentos que você


escreve. Antes de começar a escrever os códigos você começa inserindo um módulo.

Módulos de Classe: Módulos de classe são um tipo especial de módulo que permitem
que você crie os seus próprios objetos.

Você também deve ter notado que canto superior esquerdo do painel Projeto existem 3
botões: Exibir código, Exibir Objeto e alternar pastas.

O botão exibir código exibe o código relacionado ao objeto selecionado no painel de


projetos.

O botão Exibir objeto exibe o objeto selecionado, por exemplo se você selecionar uma
planilha e no painel do Projeto e clicar em ver objeto você vai ser levado
automaticamente para aquela planilha

O botão Alternar Pastas altera a maneira como os objetos são apresentados na janela do
projeto, se agrupados em pastas, ou não.

Uma coisa importante o painel de projeto e que nem todo mundo sabe, é que você pode
arrastar Formulários, módulos e classes entre projetos isso não move o objeto para outro
projeto ele apenas faz uma cópia do objeto no projeto para onde o objeto foi arrastado.

Isso faz com que você economize muito tempo principalmente se você estiver
desenvolvendo um projeto com uma grande quantidade código.
Propriedades

No painel de propriedades você pode alterar uma série de propriedades dos objetos ou
formulários. Esse painel muda de contexto de acordo com o objeto selecionado no
painel projeto ou enquanto você desenha um formulário o painel de propriedades exibe
as propriedades relacionados com o objeto que você está desenhando no Formulário.

Código

A área maior é onde você vai escrever seus códigos ou criar seus formulários, não tenho
muito a dizer sobre ela agora, mas você vai utilizá-la e muito, em breve.

Se você ainda não sabe como inserir formulários,


módulos nos seus projetos do VBA fique tranqüilo, aos poucos você vai aprender, é
bem intuitivo, por enquanto explore a janela do VBE. Mais pra frente falaremos sobre
lógica de programação, boas técnicas de programação e faremos alguns códigos.

POSTADO POR JOSÉ ALVES ÀS 11: 11 1 C OMENTÁR IOS

SÁBADO, 20 DE OUTUBRO DE 2007

VBA mas do que se trata?

Embora o Excel seja uma ferramenta extremamente poderosa, existem situações onde os
recursos do Excel são insuficientes ou muito complicados para resolver os problemas do
dia a dia, nesses casos precisamos utilizar recursos mais avançados como macros e
programação. A linguagem de programação utilizada na suíte de aplicativos Office é o
VBA (Visual Basic For Application).

Como o nome sugere, o VBA é uma linguagem de programação baseada no Visual


Basic, se você já é um programador, não vai encontrar dificuldade alguma em aplicar a
lógica de programação ao Excel, se você nunca programou antes, não vai encontrar
dificuldades em aprender VBA, é uma linguagem muito fácil, por ter uma sintaxe muito
próxima do inglês.
A principal utilidade de uma macro é tornar tarefas repetitivas menos enfadonhas, por
exemplo, se você precisa sempre aplicar uma série de formatações em uma célula ou
grupos de células, como fonte Arial, negrito, tamanho 16 na cor verde, pode ser
interessante gravar uma macro para fazer essa tarefa; desse modo toda vez que você
precisar aplicar essas formatações, você apenas executará um comando, e isso é muito
fácil de fazer, simplesmente gravando os passos.

Objetivo desse blog não é ensinar você a gravar macros, e sim utilizar o máximo que o
Excel pode oferecer através da programação, vamos falar sobre boas práticas de
programação, linguagem POG (programação orientada a Gambiarra) falaremos sobre a
interface e veremos muitos exemplos de código (com a graça de Deus eu vou conseguir
disponibilizar isso tudo), focados no Excel 2007.

Os procedimentos e o código utilizado nas macros desse blog funcionarão, com algumas
ressalvas em versões mais antigas do Office, com um pouco de pesquisa e adaptação
você vai conseguir utilizar essas preciosidades em qualquer versão do Excel, mas
lembre-se que as funções não serão testadas em versões anteriores à 2007.

Lembre-se sempre de utilizar os códigos e funções por sua própria conta e risco. Eu não
me responsabilizo por qualquer dano, material, intelectual, ou físico, causado pela
utilização dos textos desse blog.

Vou tentar a cada semana colocar algo novo, para vossa degustação, semana que vem
falaremos sobre a interface e suas características. Então até a semana que vem.

José Alves

Técnico Informática
Venda de Computdores
Revista Eletronica

POSTADO POR JOSÉ ALVES ÀS 15: 09 1 C OMENTÁR IOS

QUINTA-FEIRA, 26 DE JULHO DE 2007

programe eventos para serem executados de tempos em tempos

Introdução:
o método OnTime, possui parâmetros que recebem uma data e hora
especificada e qual procedimento deve ser executado. é bom lembrar que
você não está especificando uma data e hora para executar um procedimento,
então essa data e hora não pode ser menor que a data e hora atual.

execução:
abra o excel, e acesse a interface do VBA, insira um novo módulo ou abra o
módulo no qual você deseja inserir o código.

declare as seguinte variáveis publicas e em seguida o procedimento (sub ou


function) usarei uma
sub para efeito de apredizagem.
Public ExecQuando As Double Public Const cExecIntervaloSegundos = 20
'executa a cada 20 segundos Public Const cProcedimento = "Mensagem"
'porcedimento que deve ser executado

vamos criar um procedimento para iniciar o timer


Sub IniciaTimer() ExecQuando = Now + TimeSerial(0, 0,
cExecIntervaloSegundos) Application.OnTime earliesttime:=ExecQuando,
procedure:=cProcedimento, _ schedule:=True End Sub

agora vamos criar o procedimento que será chamado.

Sub mensagem()
MsgBox "Esta mensagem aparece a cada " & cExecIntervaloSegundos & "
Segundos"
'agenda o procedimento novamente
IniciaTimer
End Sub
caso voce precise parar o timer pode utilizar a sub a seguir

Sub ParaTimer()
On Error Resume Next
Application.OnTime earliesttime:=ExecQuando, procedure:=cProcedimento,
schedule:=False
End Sub

agora é só salvar e sair usando, não esqueça que no office 2007 as planilhas
com macros devem ser salvas em formato .XLSM (Pasta de trabalho habilitada
para macro)

caso esteja interessado na planilha, por favor, entre em contato...

You might also like