Você está na página 1de 77

Programação 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 ] Programação em Visual Basic for Applications & Excel


Autoria
Bibliografia

Autoria
Esta apresentação foi desenvolvida por Ricardo Campos, docente da Unidade Departamental de
Tecnologias de Informação e Comunicação do Instituto Politécnico de Tomar. Encontra-se
disponível na página web do autor [http://www.ccc.ipt.pt/~ricardo], no link Publications - Syllabus,
ao abrigo da seguinte licença:

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

O uso de parte ou da totalidade da apresentação pressupõe a utilização da seguinte referência:


Campos, Ricardo. (2014). Apresentação de Programação em Visual Basic for Applications
& Excel. 77 slides.
A sua disponibilização em formato PPT pode ser feita mediante solicitação (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 ] Programação em Visual Basic for Applications & Excel
Autoria
Bibliografia

Bibliografia
Recursos:

M.J.Sousa
“Domine a 110% Excel 2010”
FCA – Editora de Informática

A.Carvalho
“Exercícios Resolvidos com Excel para Economia & Gestão”
FCA – Editora de Informática

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


Autoria
Bibliografia

Bibliografia

Recursos on-line (tutoriais):

A. Silva (2009). Programação em VBA. Texto Introdutório


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

Júlio Battisti
http://www.juliobattisti.com.br/cursos/excelavancado/modulo5.asp
http://www.juliobattisti.com.br/cursos/excelavancado/modulo6.asp

Nota: Não é possível garantir a existência futura dos endereços (URL’s), citados nos recursos on-line. Como se sabe, os endereços
são virtuais e a sua vida útil depende única e exclusivamente dos seus autores e proprietários.

© Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programação 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 ] Programação em Visual Basic for Applications & Excel


História
Separador Programador
Editor VBA

História do VBA

• Linguagem de programação utilizada por aplicações Windows;

• Objetivo: automatização de tarefas rotineiras;

• Microsoft lança Office 95 cujas aplicações (Excel, Word, PowerPoint, etc)


incluem VBA, adaptação da linguagem de programação Visual Basic (lançada
em 1991) ao ambiente das aplicações 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 ] Programação em Visual Basic for Applications & Excel


História
Separador Programador
Editor VBA

Ativar o Separador Programador

• Não é necessária nenhuma instalação extra para ter acesso ao VBA. Basta:

• Activar o separador Programador


Ficheiro – Opções – 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 ] Programação em Visual Basic for Applications & Excel


História
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 ] Programação em Visual Basic for Applications & Excel
História
Menu Programador
Editor VBA

Painel de Código

Código (View-Code)

Área destinada à escrita de


código.

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


História
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 ] Programação 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 ] Programação em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interacção
Pesquisador de Objectos

Objectos Mais Utilizados no Excel

• Application: objecto que representa o próprio 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 células de uma worksheet.


Exemplo: Range(“a2”).Value = 3

• Cells: uma outra forma de se referir a uma célula 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 ] Programação em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interacção
Pesquisador de Objectos

Hierarquia de Objectos
Application

Workbooks

Worksheets

Range

O objecto Application contém o objecto Workbook;


O objecto Workbooks contém o objecto Worksheets;
O objecto Worksheets contém 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 ] Programação em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interacção
Pesquisador de Objectos

Propriedades, Métodos e Eventos

Os objectos são caracterizados por:

• Propriedades;

• Métodos;

• 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 ] Programação em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interacção
Pesquisador de Objectos

Propriedades

• Propriedades: características dos objectos (exemplo: cor, a designação,


etc). No exemplo abaixo é possível ver as propriedades da Folha1:

A sintaxe genérica 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 ] Programação em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interacção
Pesquisador de Objectos

Métodos

• Métodos: representam procedimentos que executam uma determinada


tarefa;

A sintaxe genérica para nos referirmos a um método de um objecto é a


seguinte: Objecto.Método (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 ] Programação em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interacção
Pesquisador de Objectos

Eventos

• Eventos: ocorrências habitualmente despoletadas pelo utilizador (exemplo:


a inserção de uma nova folha de cálculo no livro) que implicam a ocorrência
de uma resposta automática;

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 não 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 ] Programação em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interacção
Pesquisador de Objectos

MsgBox
• MsgBox: mostra uma mensagem no Excel.
Sintaxe: MsgBox (mensagem, características, título)

Mensagem: texto a apresentar;


Caracteristicas: especifica os diferentes tipos de botões;
Título: título a apresentar na MsgBox;

MsgBox (“Tem a certeza?”, vbYesNo + vbQuestion, “Confirmação”)

A MsgBox serve para apresentar uma mensagem ao utilizador, mas também


para recolher informação.
© Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
Objectos do Excel
Objectos de Interacção
Pesquisador de Objectos

MsgBox
Sintaxe: variável = MsgBox (mensagem, características, título)

O valor numérico a devolver depende do botão premido pelo utilizador:

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

If MsgBox("Tem a certeza?", vbYesNo + vbQuestion, "Confirmação") = 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 ] Programação em Visual Basic for Applications & Excel
Objectos do Excel
Objectos de Interacção
Pesquisador de Objectos

InputBox

• InputBox: permite que o utilizador introduza dados.


Sintaxe: variável = InputBox (mensagem, título)

nome = InputBox ("Indique o seu nome", "Introdução 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 ] Programação em Visual Basic for Applications & Excel


Objectos do Excel
Objectos de Interacção
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 módulo, um formulário, uma
folha, etc.

• Um duplo clique em cima do procedimento permite


ter acesso automático a ele;

• O acesso ao pesquisador de objectos faz-se através 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 ] Programação em Visual Basic for Applications & Excel


Variáveis

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


Operadores
Variáveis
Arrays

Diferentes tipos de Operadores


• Aritméticos
+; -; *; /
^ (exponenciação); / (divisão inteira); mod (retorna o resto inteiro de uma
operação de divisão)

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

• Lógicos
And; Or; Not

• Texto
& (concatenação)

• Outros Caracteres
‘ (linha de comentários)
© Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
Operadores
Variáveis
Arrays

Noção de Variável. Tipos de Dados. Declaração de Variáveis


• Contêm dados temporários;

• Embora não seja obrigatório, é uma boa prática declarar variáveis;

• O tipo de informação a guardar numa variável 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 células); Variant (tipo de
dado default para variáveis não declaradas)

• As declarações de variáveis são 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 ] Programação em Visual Basic for Applications & Excel


Operadores
Variáveis
Arrays

Atribuir Valores a Variáveis


<NomeDaVariável> = <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 ] Programação em Visual Basic for Applications & Excel


Operadores
Variáveis
Arrays

Âmbito das Variáveis

• Zona do programa em que a variável é conhecida;

• Public numero as Integer


As variáveis públicas ficam disponíveis para todos os procedimentos,
de todos os módulos, em todas as aplicações;

• Private numero as Integer


As variáveis privadas ficam disponíveis para o módulo em que são
declaradas;

• Dim numero as Integer

Visível apenas no próprio 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 ] Programação em Visual Basic for Applications & Excel


Operadores
Variáveis
Arrays

Constantes

• Nome que é dado a um valor numérico ou a uma cadeia de


caracteres. Útil no caso de um valor constante ser utilizado múltiplas
vezes ao longo do programa

Const nome as tipo = expressão


Const PI = 3,14159265

• O VB tem várias 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 ] Programação em Visual Basic for Applications & Excel


Operadores
Variáveis
Arrays

Tipos de Dados definidos pelo Utilizador

• Criação de um tipo de dados que representa uma estrutura com


dados de diferentes tipos. Esta definição deverá ocorrer no início do
módulo;

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 ] Programação em Visual Basic for Applications & Excel


Operadores
Variáveis
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 número de cartão do cidadão", “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 ] Programação em Visual Basic for Applications & Excel


Operadores
Variáveis
Arrays

Noção de Array

• Um Array é um tipo especial de variável, que pode armazenar


diversos valores numa única variável;

• Cada valor armazenado no Array é um elemento do conjunto.

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


do ano. Com isso teríamos um Array de 12 elementos

• Cada elemento de um Array, é acedido através do nome da variável 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 ] Programação em Visual Basic for Applications & Excel


Operadores
Variáveis
Arrays

Declaração de Arrays

• Para declarar um Array chamado dias, com 7 elementos, utilizaríamos


o seguinte comando:

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

• De seguida atribuímos os valores para os dias da semana:


Dias(1)= "Segunda-feira“
Dias(2)= "Terça-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 ] Programação em Visual Basic for Applications & Excel


Operadores
Variáveis
Arrays

Arrays Multi-Dimensionais

• Um array pode também 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 ] Programação em Visual Basic for Applications & Excel


Operadores
Variáveis
Arrays

Arrays de Arrays

• É possível 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 posição 2 de ArrA


MsgBox Arr(2)(2) //Imprime o valor que se encontra na posição 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 ] Programação 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 ] Programação em Visual Basic for Applications & Excel


If-Then

Select Case

If – Then
As estruturas de controlo repetitivo permitem efectuar testes a condições para,
em função do resultado, executar determinadas instruções;

• Não existe qualquer acção a executar quando a condição é falsa:

If condicao Then
Instruções
End If

If faltas > 3 Then


MsgBox “Perde o bónus”
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 ] Programação em Visual Basic for Applications & Excel


If-Then

Select Case

If – Then – Else

• Estrutura baseada no teste de uma condição. Se essa condição for


verdadeira desencadeará a execução das Instruções1, se for falsa
desencadeará a execução das Instruções2. Análoga à função SE do Excel

If condicao Then If faltas > 3 Then


Instruções1 MsgBox “Perde o bónus”
Else Else
Instruções2 MsgBox “Ganha o bónus”
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 ] Programação em Visual Basic for Applications & Excel


If-Then

Select Case

If – Then – Else (aninhados)

• Permite a selecção de uma entre várias alternativas. É possível embutir um


qualquer números de blocos ElseIf dentro de uma dada estrutura
condicional;

If condicao1 Then
Instruções1
Else
If condicao2 Then
Instruções2
Else
Instruções3
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 ] Programação em Visual Basic for Applications & Excel


If-Then

Select Case

Select Case

• Executa um de vários grupos de expressões consoante o valor de


uma expressão. Projectada para evitar os If-Then-Else (aninhados).

Select Case expressão


Case Condição1
Instruções 1
…..
Case Condiçãon
Instruções n
Case else
Instruções 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 ] Programação 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 ] Programação 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 ] Programação em Visual Basic for Applications & Excel


While

For

While
As estruturas de repetição permitem executar conjuntos de instruções de forma
cíclica;

• Repete um conjunto de instruções enquanto a condição for verdadeira. Se


a condição for falsa no primeiro teste, o ciclo não é executado.
Do while condicao
Instruções
Loop

• Repete um conjunto de instruções enquanto a condição for verdadeira.


Como o teste é feito no fim do ciclo, este é executado pelo menos uma
vez, mesmo se a condição for falsa.
Do
Instruções
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 ] Programação 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 ] Programação em Visual Basic for Applications & Excel


While

For

For-To-Next
• Repete um número de instruções um determinado número de vezes.

• Usada quando sabemos o número de vezes que uma determinada secção


de código deve ser repetida.

• Baseia-se na existência de um contador que incrementa automaticamente


o conteúdo da variável contador (variável de controlo do ciclo) cada vez
que o ciclo funciona.
For contador = inicio to fim
Instruções
Next contador

• Por defeito a variável contador produz um incremento de 1. No entanto, é


possível utilizar a palavra Step para especificar um incremento diferente.

For contador = inicio to fim Step x


Instruções
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 ] Programação 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 ] Programação em Visual Basic for Applications & Excel


While

For

For-Each-In-Next
• Repete um número de instruções um determinado número de vezes.

• Usada quando não sabemos à partida o número de vezes que uma


determinada secção de código deve ser repetida.

• Baseia-se na existência de uma colecção (Range, Worksheet, Workbook)


ou array. Não é possível executar um loop “for each” em objectos
individuais

For each ItemNoGrupo in GrupoDeItems


Instruções
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 ] Programação 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 Variáveis que são objectos


Dim cell As Range (range, etc) são assignados
valores através 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 variável e o tipo;
End If
Next Set atribui o valor à variável.

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 ] Programação em Visual Basic for Applications & Excel


Funções 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 ] Programação em Visual Basic for Applications & Excel


Funções de Texto

Funções de Data/Hora

Funções de Texto

• Len(string)
Determina o tamanho da String que foi passada como parâmetro para a
função. Exemplo: MsgBox Len("Este é um exemplo de uso da função Len !!")
retorna 41 caracteres;

• Lcase(string)
Converte para minúsculas, a String que foi passada como parâmetro para a
função;

• UCase(string)
Converte para MAIÚSCULAS, a String que foi passada como parâmetro para
a função

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


Funções de Texto

Funções de Data/Hora

Funções de Texto

• Left(string,n)
Retorna um número especificado de caracteres, a partir do início de uma
String. Note que espaços também são considerados;

• Right(string,n)
Retorna um número especificado de caracteres, a partir do fim de uma String.
Note que espaços também são considerados;

• Mid(String, posicao_inicio, n)
Retorna um número especificado de caracteres, a partir de uma posição
especificada, dentro da String. Note que espaços também são considerados;

• String(n, caracter)
Retorna um determinado caractere, um número 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 ] Programação em Visual Basic for Applications & Excel


Funções de Texto

Funções de Data/Hora

Funções 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 parâmetro uma data, e retorna um número entre 1 e 31,
indicando o dia do mês.;

• Month(data)
Recebe como parâmetro uma data, e retorna um número entre 1 e 12,
indicando o mês 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 ] Programação em Visual Basic for Applications & Excel


Funções de Texto

Funções de Data/Hora

Funções de Data/Hora
• Now()
Retorna a hora e a data atual do sistema. Exemplo: MsgBox "Data e Hora do
Sistema: " & Now()

• MonthName()
Recebe como parâmetro um número, indicativo do mês do ano (1 - Janeiro, 2
- Fevereiro, e assim por diante). Exemplo: MsgBox "Mês do ano: " &
MonthName(Month(Date))

• DateDiff(intervalo, data1, data2)


Determina o número de intervalos (em dias, trimestres, semestres, anos, etc),
entre duas datas. O parâmetro 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 ] Programação em Visual Basic for Applications & Excel
Funções de Texto

Funções de Data/Hora

Funções de Data/Hora

• DateAdd(intervalo, número de intervalos, data)


Esta função pode ser utilizada para determinar uma data futura, tendo por
base uma data fornecida, o tipo de período a ser acrescentado (dias, meses,
anos, etc), e o número de períodos a serem acrescentados.
Exemplo: DateAdd("m",1000,"22/04/1500") //mil mêses após 22/04/1500

• Year(data)
Recebe como parâmetro 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 ] Programação 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funções

Tipos de Procedimentos

• Um programa é um conjunto de instruções com vista a realizar um


determinado conjunto de tarefas:

• No VBA os programas são chamados de procedimentos. Cada módulo pode


conter diversos procedimentos;

Existem dois tipos de procedimentos:

• Sub-rotinas (macros);
• Funções;

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


Procedimentos
Sub-Rotinas (Macros)
Funções

O que são macros?

• Programa escrito em VBA que inclui instruções sobre como executar


determinada tarefa. Útil quando uma série de acções repetidas é utilizada
frequentemente;

• As macros ou sub-rotinas não recebem parâmetros do exterior;

• O corpo da rotina é composto por um conjunto de instruções que devem estar


localizadas em linhas diferentes;

Sub nomeRotina() Sub ola()


instruções 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funções

Segurança – Ativação de Macros

• Habilitar as macros;
Ficheiro – Opções – Centro de Fidedignidade – Definições 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funções

Livros com Permissão para Macros

• Uma vez escrita a macro, é necessário guardar o livro de excel com o tipo:

Se não 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

Onde Guardar a Macro?

• Se pretende que a macro fique sempre disponível deve seleccionar a opção


“guardar macro em novo livro pessoal de macros”. As instruções serão gravadas
numa pasta oculta chamada “Pessoal.xls”

• Clique em OK. Efectue as acções de gravação. Clique em Terminar Gravação

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


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

Criar um Módulo. Inserir Procedimento.

• É possível criar uma macro a partir do zero sem utilizar o gravador de macros;

• Programador – Visual Basic

• Para iniciar a programação é necessário primeiro


criar um módulo (elemento que contém o código
VBA):

• De seguida é necessário 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

Âmbito do Procedimento

• Public significa que a função ficará disponível para todos os livros do


Excel;

• Private significa que a função ficará disponível 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

Exemplos de Sub-Rotinas

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


introduzidos nas células 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

Exemplos de Sub-Rotinas

Exemplo 2: Com recurso ao gravador de macros, crie uma macro (“Limpar”) que
permita apagar o conteúdo de qualquer célula. Posteriormente edite a macro de
forma a introduzir uma MsgBox que obrigue o utilizador a confirmar a acção

Sub Limpar()
If MsgBox("Tem a certeza?", vbYesNo + vbQuestion, "Confirmação") = 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

Exemplos de Sub-Rotinas

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


introdução de dois valores (X e Y), procedendo posteriormente à sua soma e à
apresentação dos resultados através de uma MsgBox;

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

x = InputBox("Introduza X", "Introdução de Dados")


Y = InputBox("Introduza Y", "Introdução 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

Exemplos de Sub-Rotinas

Exemplo 4: Pretende-se criar uma macro com o nome “Celula” que possibilite a
introdução de um texto numa célula à escolha do utilizador;

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

Cell = InputBox("Especifique a Célula", "Introdução de Dados")


Texto = InputBox("Introduza o Texto", "Introdução 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

Protecção de Macros

• É possível evtar o acesso ao código 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

Associar Macros à Barra de Inicialização Rápida

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


Procedimentos Gravador de Macros
Sub-Rotinas (Macros) Programando em VBA
Funções

Associar Macros a um Botão

• Programador – Inserir Botão – 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funções

Noção de Função
• Conjunto de declarações que retornam um valor;

• Exemplos de funções no Excel são a soma(), etc;

• A função é identificada pelo nome, pelo número e pelo tipo de parâmetros


recebidos, e tem como objectivo executar um conjunto de instruções e
produzir um valor final.

Function nomeFunção (parametro1, parametro2)


nomeFunção = valor
End Function

• A função pode ser chamada noutra parte do código das três seguintes formas:
Variavel = nomeFunção (a, b) //Se a função retorna um valor
Call nomeFunção (a,b) //pode-se chamar uma função ou macro com Call
nomeFunção a, b //se Call não for utilizada os parêntesis não são 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 ] Programação em Visual Basic for Applications & Excel
Procedimentos
Sub-Rotinas (Macros)
Funções

Funções vs Sub-rotinas (macros)

• Funções começam com a palavra Function e terminam com a palavra End


Function. Sub-rotinas começam com a palavra Sub e terminam com a palavra
End Sub;

• As funções retornam uma valor. As sub-rotinas não;

• As funções têm uma variável com o mesmo nome da função para retornar o
valor. As sub-rotinas não;

• As funções podem ser usadas em células de fórmulas no Excel. As sub-rotinas


não;

• As sub-rotinas podem ser atribuídas a menus, a botões, etc. As funções não.

• Ambas podem obter propriedades de informações de qualquer objecto, tais


como valores de células da folha de cálculo.
© Ricardo Campos [ h t t p : / / w w w . c c c . i p t . p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
Procedimentos
Sub-Rotinas (Macros)
Funções

Criar uma Função

Processo idêntico ao da criação 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funções

Criar uma Função


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

• As funções criadas são adicionadas no Excel à categoria de funções “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 ] Programação em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funções

Passagem de Parâmetros
A passagem de parâmetros para uma função pode ser feita de duas formas:

• ByVal: indica que o parâmetro é passado por valor. Isto significa que a função
utiliza uma cópia interna dos parâmetros

• ByRef: indica que o parâmetro é passado por referência. Este tipo de


passagem de parâmetros é muito útil no caso de pretendermos que a função
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 ] Programação em Visual Basic for Applications & Excel
Procedimentos
Sub-Rotinas (Macros)
Funções

Exemplos de Funções

Exemplo 1: Defina uma função (PDesconto) que calcule o preço de um produto


após a aplicação 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 ] Programação em Visual Basic for Applications & Excel


Procedimentos
Sub-Rotinas (Macros)
Funções

Debug de Funções

• View – Immediate Window


Utilize o código ? NomeDaFuncao (arg 1, arg 2, …) no painel imediato para
devolver o resultado da função.

Utilize o breakpoint para suspender a execução de um código. Dê um clique na


linha de código onde quer proceder à suspensão. De seguida escreva
novamente no painel imediato o seguinte código:
? NomeDaFuncao (arg 1, arg 2, …)

Utilize a instrução Debug.print NomeDaVariável (no próprio código) para ver os


resultados de uma expressão na janela de depuração. Escreva novamente no
painel imediato o seguinte código:
? 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 ] Programação em Visual Basic for Applications & Excel

Você também pode gostar