Anda di halaman 1dari 77

Programao em Visual Basic for

Applications & Excel

Ricardo Campos (ricardo.campos@ipt.pt)

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Autoria
Bibliografia

Autoria
Esta apresentao foi desenvolvida por Ricardo Campos, docente da Unidade Departamental de
Tecnologias de Informao e Comunicao do Instituto Politcnico de Tomar. Encontra-se
disponvel na pgina web do autor [http://www.ccc.ipt.pt/~ricardo], no link Publications - Syllabus,
ao abrigo da seguinte licena:

Mais detalhes em: http://creativecommons.org/licenses/by-nc/3.0/deed.pt

O uso de parte ou da totalidade da apresentao pressupe a utilizao da seguinte referncia:


Campos, Ricardo. (2014). Apresentao de Programao em Visual Basic for Applications
& Excel. 77 slides.
A sua disponibilizao em formato PPT pode ser feita mediante solicitao (email:
ricardo.campos@ipt.pt)
Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel
Autoria
Bibliografia

Bibliografia
Recursos:

M.J.Sousa
Domine a 110% Excel 2010
FCA Editora de Informtica

A.Carvalho
Exerccios Resolvidos com Excel para Economia & Gesto
FCA Editora de Informtica

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Autoria
Bibliografia

Bibliografia

Recursos on-line (tutoriais):

A. Silva (2009). Programao em VBA. Texto Introdutrio


http://www.dei.isep.ipp.pt/~tmatos/APROG_CIVIL_20132014/Programming-in-VBA-v3.pdf

Jlio Battisti
http://www.juliobattisti.com.br/cursos/excelavancado/modulo5.asp
http://www.juliobattisti.com.br/cursos/excelavancado/modulo6.asp

Nota: No possvel garantir a existncia futura dos endereos (URLs), citados nos recursos on-line. Como se sabe, os endereos
so virtuais e a sua vida til depende nica e exclusivamente dos seus autores e proprietrios.

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Visual Basic for Applications

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Histria
Separador Programador
Editor VBA

Histria do VBA

Linguagem de programao utilizada por aplicaes Windows;

Objetivo: automatizao de tarefas rotineiras;

Microsoft lana Office 95 cujas aplicaes (Excel, Word, PowerPoint, etc)


incluem VBA, adaptao da linguagem de programao Visual Basic (lanada
em 1991) ao ambiente das aplicaes Office;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Histria
Separador Programador
Editor VBA

Ativar o Separador Programador

No necessria nenhuma instalao extra para ter acesso ao VBA. Basta:

Activar o separador Programador


Ficheiro Opes Personalizar Friso Seleccionar o separador Programador.

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Histria
Separador Programador
Editor VBA

Painel das Propriedades

Apresenta as propriedades do
projecto seleccionado.

Propriedades do objecto
(View-Properties)
Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel
Histria
Menu Programador
Editor VBA

Painel de Cdigo

Cdigo (View-Code)

rea destinada escrita de


cdigo.

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Histria
Menu Programador
Editor VBA

Painel do Projecto

Apresenta uma listagem dos


projectos e de todos os itens nele
contidos.
Explorador do Projecto Cada livro do excel tem um
(View-Project Explorer) projecto associado (ex:
VBAProject(Livro1)

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Objectos

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interaco
Pesquisador de Objectos

Objectos Mais Utilizados no Excel

Application: objecto que representa o prprio Excel. Exemplo:


Application.ActiveWindow.ActiveCell.Font.Name = Helvetica

Workbooks: objecto que representa o ficheiro (livro) do Excel.


Exemplo(s): Workbooks.Open("Dados.xls"); ThisWorkbook.Close

Worksheets: objecto que representa as folhas do Excel. Na hierarquia situa-


se abaixo de Workbook. Exemplo: Worksheets(Livro1").Select

Range: utilizado para representar uma ou mais clulas de uma worksheet.


Exemplo: Range(a2).Value = 3

Cells: uma outra forma de se referir a uma clula do Excel. Exemplo:


Cells(2,2).Value = 6

Mais: http://www.juliobattisti.com.br/cursos/excelavancado/modulo6.asp

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interaco
Pesquisador de Objectos

Hierarquia de Objectos
Application

Workbooks

Worksheets

Range

O objecto Application contm o objecto Workbook;


O objecto Workbooks contm o objecto Worksheets;
O objecto Worksheets contm o objecto Range.

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interaco
Pesquisador de Objectos

Propriedades, Mtodos e Eventos

Os objectos so caracterizados por:

Propriedades;

Mtodos;

Eventos;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interaco
Pesquisador de Objectos

Propriedades

Propriedades: caractersticas dos objectos (exemplo: cor, a designao,


etc). No exemplo abaixo possvel ver as propriedades da Folha1:

A sintaxe genrica para nos referirmos a uma propriedade de um objecto


a seguinte: Objecto.Propriedade

Exemplo: Worksheets(Folha1).Range(A9).Value = 5

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interaco
Pesquisador de Objectos

Mtodos

Mtodos: representam procedimentos que executam uma determinada


tarefa;

A sintaxe genrica para nos referirmos a um mtodo de um objecto a


seguinte: Objecto.Mtodo (argumento 1, argumento 2,.)

Exemplo: Range(A9).Select

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interaco
Pesquisador de Objectos

Eventos

Eventos: ocorrncias habitualmente despoletadas pelo utilizador (exemplo:


a insero de uma nova folha de clculo no livro) que implicam a ocorrncia
de uma resposta automtica;

Para que um objecto possa reagir a um dado evento dever existe o event
handler (tratador de eventos), que especifica o que fazer caso esse evento
ocorra.
Sem isso, o objecto detectar esse acontecimento mas no saber o que
fazer. Nenhuma resposta ser produzida;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interaco
Pesquisador de Objectos

MsgBox
MsgBox: mostra uma mensagem no Excel.
Sintaxe: MsgBox (mensagem, caractersticas, ttulo)

Mensagem: texto a apresentar;


Caracteristicas: especifica os diferentes tipos de botes;
Ttulo: ttulo a apresentar na MsgBox;

MsgBox (Tem a certeza?, vbYesNo + vbQuestion, Confirmao)

A MsgBox serve para apresentar uma mensagem ao utilizador, mas tambm


para recolher informao.
Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel
Objectos do Excel
Objectos de Interaco
Pesquisador de Objectos

MsgBox
Sintaxe: varivel = MsgBox (mensagem, caractersticas, ttulo)

O valor numrico a devolver depende do boto premido pelo utilizador:

VbOk 1
VbCancel 2
VbAbort 3
VbRetry 4
VbIgnore 5
VbYes 6
VbNo 7

If MsgBox("Tem a certeza?", vbYesNo + vbQuestion, "Confirmao") = vbYes Then


Selection.ClearContents
End If
Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel
Objectos do Excel
Objectos de Interaco
Pesquisador de Objectos

InputBox

InputBox: permite que o utilizador introduza dados.


Sintaxe: varivel = InputBox (mensagem, ttulo)

nome = InputBox ("Indique o seu nome", "Introduo de nomes")

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interaco
Pesquisador de Objectos

Pesquisador de Objectos

O pesquisador dos objectos permite ver uma lista


dos procedimentos em cada objecto do nosso
projecto, seja ele um mdulo, um formulrio, uma
folha, etc.

Um duplo clique em cima do procedimento permite


ter acesso automtico a ele;

O acesso ao pesquisador de objectos faz-se atravs do menu View Object


Browser ou em:

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Variveis

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Operadores
Variveis
Arrays

Diferentes tipos de Operadores


Aritmticos
+; -; *; /
^ (exponenciao); / (diviso inteira); mod (retorna o resto inteiro de uma
operao de diviso)

Relacionais
= (igual); <> (diferente); > (maior); >= (maior ou igual); < (menor); <=
(menor ou igual)

Lgicos
And; Or; Not

Texto
& (concatenao)

Outros Caracteres
(linha de comentrios)
Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel
Operadores
Variveis
Arrays

Noo de Varivel. Tipos de Dados. Declarao de Variveis


Contm dados temporrios;

Embora no seja obrigatrio, uma boa prtica declarar variveis;

O tipo de informao a guardar numa varivel depende do tipo de dados:

Byte (0 a 255); Boolean (True ou False); Integer; Long; Single; Double;


Currency; Date; String; Object (serve para suportar qualquer tipo de
objecto do excel, i.e., livro, folha, intervalo de clulas); Variant (tipo de
dado default para variveis no declaradas)

As declaraes de variveis so feitas com recurso a Dim:


Dim result as long
Dim description as string
Dim startdate, enddate as date
Dim Range_1 as object

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Operadores
Variveis
Arrays

Atribuir Valores a Variveis


<NomeDaVarivel> = <Valor>
Total = Valor_1 + Valor_2
Resultado = sqrt (Total)

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Operadores
Variveis
Arrays

mbito das Variveis

Zona do programa em que a varivel conhecida;

Public numero as Integer


As variveis pblicas ficam disponveis para todos os procedimentos,
de todos os mdulos, em todas as aplicaes;

Private numero as Integer


As variveis privadas ficam disponveis para o mdulo em que so
declaradas;

Dim numero as Integer

Visvel apenas no prprio procedimento;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Operadores
Variveis
Arrays

Constantes

Nome que dado a um valor numrico ou a uma cadeia de


caracteres. til no caso de um valor constante ser utilizado mltiplas
vezes ao longo do programa

Const nome as tipo = expresso


Const PI = 3,14159265

O VB tem vrias constantes incorporadas precedidas pelas letras xl


ou vb

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Operadores
Variveis
Arrays

Tipos de Dados definidos pelo Utilizador

Criao de um tipo de dados que representa uma estrutura com


dados de diferentes tipos. Esta definio dever ocorrer no incio do
mdulo;

Type DadosPessoais
Nome As String
Idade As Integer
Nasc As Date
CC As Long
End Type

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Operadores
Variveis
Arrays

Tipos de Dados definidos pelo Utilizador

Como utilizar as estruturas de dados?

Dim Pessoa As DadosPessoais

Pessoa.Nome = InputBox ("Indique o seu nome", Nome")


Pessoa.Idade = InputBox ("Indique a sua idade", Idade")
Pessoa.Nasc = InputBox ("Indique a sua data de nascimento", Data")
Pessoa.CC = InputBox ("Indique o seu nmero de carto do cidado", CC")

MsgBox Pessoa.Nome & Chr(13) & "Data de Nascimento: " & Pessoa.Nasc
& Chr(13) & CC: " & Pessoa.CC

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Operadores
Variveis
Arrays

Noo de Array

Um Array um tipo especial de varivel, que pode armazenar


diversos valores numa nica varivel;

Cada valor armazenado no Array um elemento do conjunto.

Exemplo: Podemos criar um Array para armazenar os nomes dos meses


do ano. Com isso teramos um Array de 12 elementos

Cada elemento de um Array, acedido atravs do nome da varivel Array e


de um ndice.

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Operadores
Variveis
Arrays

Declarao de Arrays

Para declarar um Array chamado dias, com 7 elementos, utilizaramos


o seguinte comando:

Dim dias(7) As String ou Dim dias(1 to 7) As String

De seguida atribumos os valores para os dias da semana:


Dias(1)= "Segunda-feira
Dias(2)= "Tera-feira"
.
.
Dias(7)= "Domingo"

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Operadores
Variveis
Arrays

Arrays Multi-Dimensionais

Um array pode tambm armazenar dados multidimensionais.


Suponha-se a seguinte tabela de vendas:

2012 2013
CDs 200 40
DVDs 300 100

Dim Arr(2,2) As Integer ou Dim Arr(1 to 2, 1 to 2) As Integer

arr(1,1) = 200
arr(1,2) = 40
arr(2,1) = 300
arr(2,2) = 100

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Operadores
Variveis
Arrays

Arrays de Arrays

possvel criar um array do tipo Variant e preenche-lo com arrays de


diferentes tipos:

Dim Arr(2) As Variant //declara array com 2 elementos


Arr(1) = ArrA()
Arr(2) = ArrB()

Sendo que ArrA um array de inteiros: Dim ArrA(5) As Integer


Sendo que ArrB um array de strings: Dim ArrB(5) As String

MsgBox Arr(1)(2) //Imprime o valor que se encontra na posio 2 de ArrA


MsgBox Arr(2)(2) //Imprime o valor que se encontra na posio 2 de ArrB

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Estruturas de Controlo
Condicional

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


If-Then

Select Case

If Then
As estruturas de controlo repetitivo permitem efectuar testes a condies para,
em funo do resultado, executar determinadas instrues;

No existe qualquer aco a executar quando a condio falsa:

If condicao Then
Instrues
End If

If faltas > 3 Then


MsgBox Perde o bnus
End If

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


If-Then

Select Case

If Then Else

Estrutura baseada no teste de uma condio. Se essa condio for


verdadeira desencadear a execuo das Instrues1, se for falsa
desencadear a execuo das Instrues2. Anloga funo SE do Excel

If condicao Then If faltas > 3 Then


Instrues1 MsgBox Perde o bnus
Else Else
Instrues2 MsgBox Ganha o bnus
End If End If

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


If-Then

Select Case

If Then Else (aninhados)

Permite a seleco de uma entre vrias alternativas. possvel embutir um


qualquer nmeros de blocos ElseIf dentro de uma dada estrutura
condicional;

If condicao1 Then
Instrues1
Else
If condicao2 Then
Instrues2
Else
Instrues3
End If
End If

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


If-Then

Select Case

Select Case

Executa um de vrios grupos de expresses consoante o valor de


uma expresso. Projectada para evitar os If-Then-Else (aninhados).

Select Case expresso


Case Condio1
Instrues 1
..
Case Condion
Instrues n
Case else
Instrues a executar no caso das anteriores serem falsas
End Select

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


If-Then

Select Case

Select Case

Dim Mult as double


Mult = Range(a1).Value * Range(b1).Value
Select Case Mult
Case Is < 10
MsgBox Menor que 10
Case Is < 20
MsgBox Menor que 20
Case else
MsgBox Maior do que 20
End Select

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Estruturas de Controlo Repetitivo

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


While

For

While
As estruturas de repetio permitem executar conjuntos de instrues de forma
cclica;

Repete um conjunto de instrues enquanto a condio for verdadeira. Se


a condio for falsa no primeiro teste, o ciclo no executado.
Do while condicao
Instrues
Loop

Repete um conjunto de instrues enquanto a condio for verdadeira.


Como o teste feito no fim do ciclo, este executado pelo menos uma
vez, mesmo se a condio for falsa.
Do
Instrues
Loop while condicao

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


While

For

While

Dim Contador as Integer


Dim Total as double
Contador = 2
Total = 0

Do while Range(a & Contador).Value <> Sul


Total = Total + Range(b & Contador).Value
Contador = Contador + 1
Loop
Range(d2).Value = Total

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


While

For

For-To-Next
Repete um nmero de instrues um determinado nmero de vezes.

Usada quando sabemos o nmero de vezes que uma determinada seco


de cdigo deve ser repetida.

Baseia-se na existncia de um contador que incrementa automaticamente


o contedo da varivel contador (varivel de controlo do ciclo) cada vez
que o ciclo funciona.
For contador = inicio to fim
Instrues
Next contador

Por defeito a varivel contador produz um incremento de 1. No entanto,


possvel utilizar a palavra Step para especificar um incremento diferente.

For contador = inicio to fim Step x


Instrues
Next contador
Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel
While

For

For-To-Next

Dim Contador as Integer


Dim Total as double
Total = 0
For Contador = 2 to 15
Total = Total * Contador
Next Contador
Range(d2).Value = Total

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


While

For

For-Each-In-Next
Repete um nmero de instrues um determinado nmero de vezes.

Usada quando no sabemos partida o nmero de vezes que uma


determinada seco de cdigo deve ser repetida.

Baseia-se na existncia de uma coleco (Range, Worksheet, Workbook)


ou array. No possvel executar um loop for each em objectos
individuais

For each ItemNoGrupo in GrupoDeItems


Instrues
Next ItemNoGrupo

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


While

For

For-Each-In-Next
Exemplo. Suponha que se pretende ocultar todas as linhas (entre o range C1 e
C10) que contenham o valor 0

Sub hide_zero()

Dim rng As Range Variveis que so objectos


Dim cell As Range (range, etc) so assignados
valores atravs da palavra
Set rng = Range("C1:C10") set

For Each cell In rng


If cell.Value = 0 Then Dim declara o nome da
cell.EntireRow.Hidden = True varivel e o tipo;
End If
Next Set atribui o valor varivel.

End Sub

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Funes VBA

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Funes de Texto

Funes de Data/Hora

Funes de Texto

Len(string)
Determina o tamanho da String que foi passada como parmetro para a
funo. Exemplo: MsgBox Len("Este um exemplo de uso da funo Len !!")
retorna 41 caracteres;

Lcase(string)
Converte para minsculas, a String que foi passada como parmetro para a
funo;

UCase(string)
Converte para MAISCULAS, a String que foi passada como parmetro para
a funo

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Funes de Texto

Funes de Data/Hora

Funes de Texto

Left(string,n)
Retorna um nmero especificado de caracteres, a partir do incio de uma
String. Note que espaos tambm so considerados;

Right(string,n)
Retorna um nmero especificado de caracteres, a partir do fim de uma String.
Note que espaos tambm so considerados;

Mid(String, posicao_inicio, n)
Retorna um nmero especificado de caracteres, a partir de uma posio
especificada, dentro da String. Note que espaos tambm so considerados;

String(n, caracter)
Retorna um determinado caractere, um nmero especificado de vezes.
Exemplo: MsgBox String(35,"*")

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Funes de Texto

Funes de Data/Hora

Funes de Data/Hora

Date()
Retorna a data atual do sistema. Exemplo: MsgBox "Data do Sistema: " &
Date()

Time()
Retorna a hora atual do sistema. Exemplo: MsgBox "Data do Sistema: " &
Time()

Day(data)
Recebe como parmetro uma data, e retorna um nmero entre 1 e 31,
indicando o dia do ms.;

Month(data)
Recebe como parmetro uma data, e retorna um nmero entre 1 e 12,
indicando o ms do ano.

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Funes de Texto

Funes de Data/Hora

Funes de Data/Hora
Now()
Retorna a hora e a data atual do sistema. Exemplo: MsgBox "Data e Hora do
Sistema: " & Now()

MonthName()
Recebe como parmetro um nmero, indicativo do ms do ano (1 - Janeiro, 2
- Fevereiro, e assim por diante). Exemplo: MsgBox "Ms do ano: " &
MonthName(Month(Date))

DateDiff(intervalo, data1, data2)


Determina o nmero de intervalos (em dias, trimestres, semestres, anos, etc),
entre duas datas. O parmetro intervalo uma String que diz que tipo de
intervalo vamos calcular
yyyy (anos); q (trimestres); m (meses); d (dias); w (semanas); h
(horas); n (minutos); s (segundos).
Exemplo: DateDiff("m","22/04/1500","31/12/1999")
Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel
Funes de Texto

Funes de Data/Hora

Funes de Data/Hora

DateAdd(intervalo, nmero de intervalos, data)


Esta funo pode ser utilizada para determinar uma data futura, tendo por
base uma data fornecida, o tipo de perodo a ser acrescentado (dias, meses,
anos, etc), e o nmero de perodos a serem acrescentados.
Exemplo: DateAdd("m",1000,"22/04/1500") //mil mses aps 22/04/1500

Year(data)
Recebe como parmetro uma data, e retorna o ano.
Exemplo: MsgBox "Ano atual: " & Year(Date( ))

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Programando em VBA

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funes

Tipos de Procedimentos

Um programa um conjunto de instrues com vista a realizar um


determinado conjunto de tarefas:

No VBA os programas so chamados de procedimentos. Cada mdulo pode


conter diversos procedimentos;

Existem dois tipos de procedimentos:

Sub-rotinas (macros);
Funes;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funes

O que so macros?

Programa escrito em VBA que inclui instrues sobre como executar


determinada tarefa. til quando uma srie de aces repetidas utilizada
frequentemente;

As macros ou sub-rotinas no recebem parmetros do exterior;

O corpo da rotina composto por um conjunto de instrues que devem estar


localizadas em linhas diferentes;

Sub nomeRotina() Sub ola()


instrues MsgBox Ol
End Sub End Sub

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funes

Segurana Ativao de Macros

Habilitar as macros;
Ficheiro Opes Centro de Fidedignidade Definies do Centro;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funes

Livros com Permisso para Macros

Uma vez escrita a macro, necessrio guardar o livro de excel com o tipo:

Se no o fizermos vamos obter a seguinte mensagem:

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Formas de Criar uma sub-rotina (macro)


Existem duas formas de criar uma sub-rotina (macro):

Com recurso ao gravador de macros;

Programando em VBA;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Como Gravar uma Macro?

Programador Gravar Macro;

Ver Macros Gravar Macro;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Onde Guardar a Macro?

Se pretende que a macro fique sempre disponvel deve seleccionar a opo


guardar macro em novo livro pessoal de macros. As instrues sero gravadas
numa pasta oculta chamada Pessoal.xls

Clique em OK. Efectue as aces de gravao. Clique em Terminar Gravao

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Testar a Macro

Para testar a macro:

Ver Macros Ver Macros - Executar;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Criar um Mdulo. Inserir Procedimento.

possvel criar uma macro a partir do zero sem utilizar o gravador de macros;

Programador Visual Basic

Para iniciar a programao necessrio primeiro


criar um mdulo (elemento que contm o cdigo
VBA):

De seguida necessrio inserir um procedimento:


Insert - Procedure

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

mbito do Procedimento

Public significa que a funo ficar disponvel para todos os livros do


Excel;

Private significa que a funo ficar disponvel apenas para o livro


aberto;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Exemplos de Sub-Rotinas

Exemplo 1: Crie uma macro que proceda soma dos valores 34 e 66


introduzidos nas clulas A1 e A2;

sub First()
Range("A1").Value = 34
Range("A2").Value = 66
Range("A3").Formula = "=A1+A2"
Range("A1").Select
End Sub

Para testar a macro:

Run - Run;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Exemplos de Sub-Rotinas

Exemplo 2: Com recurso ao gravador de macros, crie uma macro (Limpar) que
permita apagar o contedo de qualquer clula. Posteriormente edite a macro de
forma a introduzir uma MsgBox que obrigue o utilizador a confirmar a aco

Sub Limpar()
If MsgBox("Tem a certeza?", vbYesNo + vbQuestion, "Confirmao") = vbYes Then
Selection.ClearContents
End If
End Sub

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Exemplos de Sub-Rotinas

Exemplo 3: Pretende-se criar uma macro Soma que solicite ao utilizador a


introduo de dois valores (X e Y), procedendo posteriormente sua soma e
apresentao dos resultados atravs de uma MsgBox;

Sub Soma()
Dim x As Integer
Dim Y As Integer
Dim Soma As Integer

x = InputBox("Introduza X", "Introduo de Dados")


Y = InputBox("Introduza Y", "Introduo de Dados")

Soma = x + Y
MsgBox "Soma de " & x & "+" & Y & "=" & Soma
End Sub

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Exemplos de Sub-Rotinas

Exemplo 4: Pretende-se criar uma macro com o nome Celula que possibilite a
introduo de um texto numa clula escolha do utilizador;

Sub Celula()
Dim Cell As String
Dim Texto As String

Cell = InputBox("Especifique a Clula", "Introduo de Dados")


Texto = InputBox("Introduza o Texto", "Introduo de Dados")

ActiveSheet.Range(Cell) = Texto
End Sub

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Proteco de Macros

possvel evtar o acesso ao cdigo introduzido:

Tools VBAProject Properties;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Associar Macros Barra de Inicializao Rpida

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funes

Associar Macros a um Boto

Programador Inserir Boto Atribuir Macro

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funes

Noo de Funo
Conjunto de declaraes que retornam um valor;

Exemplos de funes no Excel so a soma(), etc;

A funo identificada pelo nome, pelo nmero e pelo tipo de parmetros


recebidos, e tem como objectivo executar um conjunto de instrues e
produzir um valor final.

Function nomeFuno (parametro1, parametro2)


nomeFuno = valor
End Function

A funo pode ser chamada noutra parte do cdigo das trs seguintes formas:
Variavel = nomeFuno (a, b) //Se a funo retorna um valor
Call nomeFuno (a,b) //pode-se chamar uma funo ou macro com Call
nomeFuno a, b //se Call no for utilizada os parntesis no so usados
Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel
Procedimentos
Sub-Rotinas (Macros)
Funes

Funes vs Sub-rotinas (macros)

Funes comeam com a palavra Function e terminam com a palavra End


Function. Sub-rotinas comeam com a palavra Sub e terminam com a palavra
End Sub;

As funes retornam uma valor. As sub-rotinas no;

As funes tm uma varivel com o mesmo nome da funo para retornar o


valor. As sub-rotinas no;

As funes podem ser usadas em clulas de frmulas no Excel. As sub-rotinas


no;

As sub-rotinas podem ser atribudas a menus, a botes, etc. As funes no.

Ambas podem obter propriedades de informaes de qualquer objecto, tais


como valores de clulas da folha de clculo.
Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel
Procedimentos
Sub-Rotinas (Macros)
Funes

Criar uma Funo

Processo idntico ao da criao de uma sub-rotina;

Insert - Module;

Insert - Function;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funes

Criar uma Funo


Function Saldo (Receitas As Double, Despesas As Double)
Saldo = Receitas - Despesas
End Function

As funes criadas so adicionadas no Excel categoria de funes Definidas


pelo utilizador;

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funes

Passagem de Parmetros
A passagem de parmetros para uma funo pode ser feita de duas formas:

ByVal: indica que o parmetro passado por valor. Isto significa que a funo
utiliza uma cpia interna dos parmetros

ByRef: indica que o parmetro passado por referncia. Este tipo de


passagem de parmetros muito til no caso de pretendermos que a funo
devolva mais do que um resultado

a = 100
b = 400
Imprime valores a e b
Mult a, b //Chama o procedimento
Imprime valores a e b

Mult (ByRef x as Integer, ByVal y as Integer)


x = x * 1.1
Y = y * 1.1
Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel
Procedimentos
Sub-Rotinas (Macros)
Funes

Exemplos de Funes

Exemplo 1: Defina uma funo (PDesconto) que calcule o preo de um produto


aps a aplicao de uma taxa de desconto

Function PDesconto(Valor As Double, Taxa As Single) As Double


PDesconto = Valor - Valor * Taxa
End Function

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funes

Debug de Funes

View Immediate Window


Utilize o cdigo ? NomeDaFuncao (arg 1, arg 2, ) no painel imediato para
devolver o resultado da funo.

Utilize o breakpoint para suspender a execuo de um cdigo. D um clique na


linha de cdigo onde quer proceder suspenso. De seguida escreva
novamente no painel imediato o seguinte cdigo:
? NomeDaFuncao (arg 1, arg 2, )

Utilize a instruo Debug.print NomeDaVarivel (no prprio cdigo) para ver os


resultados de uma expresso na janela de depurao. Escreva novamente no
painel imediato o seguinte cdigo:
? NomeDaFuncao (arg 1, arg 2, )

Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programao em Visual Basic for Applications & Excel