Você está na página 1de 89

Introduo Programao em VBA

para Microsoft Excel


Susana Santos
sgraca@dep.fem.unicamp.be

12 a 14 de Setembro de 2016

Dia 1
12/09/2016

Introduo

Objetivo do minicurso
Introduzir a programao em VBA como uma ferramenta simples
permitindo utilizar as normais planilhas Excel com mais eficincia e
versatilidade.
Facilitar o manuseio de grande quantidade de dados e execuo de
tarefas repetitivas.
Fornecer bases para o estudo autnomo.
Foco na prtica e exerccios.

Durao
6 horas.
Trs sesses de 2 horas: 12/09, 13/09 e 14/09.

Visual Basic for Applications (VBA)

O Visual Basic uma linguagem de programao produzida pela


empresa Microsoft, e parte integrante do pacote Microsoft Visual Studio.

O Visual Basic for Applications (VBA) uma implementao do Visual


Basic da Microsoft incorporada em todos os programas do Microsoft Office,
incluindo:

aplicativos Office (Word, Excel, Power Point, Access, etc.)

outras aplicaes da Microsoft (ex.Visio)

O VBA idntico ao Visual Basic, mas s pode rodar de dentro de uma

aplicao do Office, em vez de executar como uma aplicao separada.

Pode, no entanto, ser usado para controlar uma aplicao a partir de outra (ex. criar um
relatrio no Microsoft Word a partir de dados no Excel ou Access).

O seu principal uso para fazer tarefas repetitivas.

https://pt.wikipedia.org/wiki/Visual_Basic_for_Applications

Configurar a Guia Desenvolvedor


Microsoft Office 2007

Microsoft Office 2010

Gravando a primeira macro (1)

Inicie a gravao da macro:

Complete a caixa de dilogo e faa OK:

Gravando a primeira macro (2)


1.

Crie a seguinte tabela:


= B2 - B1
= B2/B1

2.

Formate a tabela:

formatao: Negrito

3.

formatao:Vermelho

Insira uma linha e uma coluna antes da tabela

Gravando a primeira macro (2)


4.

Insira uma nova Planilha.

5.

Renomeie todas as Planilhas.

6.

Elimine a Planilha C.

7.

Selecione a Tabela previamente criada, copie-a e cole-a na


Planilha B.

8.

Termine a gravao da macro.

Gravando uma planilha habilitada para


macros

Pasta de Trabalho com Permisso para Macros do Excel (*.xlsm)

Ateno: Se a Pasta de Trabalho for salva em *.xlsx todas as macros sero


perdidas.
9

Acessando o Editor VBA

10

Todas as macros existentes


so apresentadas nesta
interface.

Editor do Visual Basic for Applications


Alt+F11

Listagem de todas as macros


armazenadas no Mdulo1

Projeto VBA

As macros so armazenadas em Mdulos


Propriedades
11

Cdigo

Conceitos Importantes

Object (objeto) representa um elemento do Excel.

Property (propriedade) um atributo de um objeto.

Definem as caracteristicas de um objeto;


Podem ser lidas e modificadas;
Ex. Formato, cor, estilo, nome, etc.

Method (mtodo) uma operao em um objeto.

ex: planilha (sheet), clula (cell), grfico, etc.

Ex: selecionar, copiar, formatar, apagar, inserir, etc.

Em VBA, necessrio identificar um objeto antes de aplicar um de seus


mtodos ou alterar um valor de uma das suas propriedades.
Comunicao entre Excel e VBA
12

Exerccio 2

3.

Abra uma nova pasta de trabalho Excel.


Salve-a com o nome Exercicio2 em modo Pasta de Trabalho
Habilitada para Macros Excel (*.xlsm).
Acesse o Editor VBA.
Alt+F11

4.

Insira um novo Mdulo

1.
2.

13

Exerccio 2
Copie a macro criada no Exerccio 1 e cole-a no Mdulo criado.
Feche o Exerccio 1 antes de prosseguir
Divida o seu ecr de modo a conseguir visualizar a pasta Excel e o
Editor VBA.
F8
Execute a Macro em modo Debug Step Into

5.
6.

7.
8.

14

Anlise da primeira macro (1)


Sub Exercicio1()
'
' Exercicio1 Macro
' Gravando uma macro usando a interface excel.
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "A"
Range("B1").Select
ActiveCell.FormulaR1C1 = "5"
Range("A2").Select
ActiveCell.FormulaR1C1 = "B"
Range("B2").Select
ActiveCell.FormulaR1C1 = "10"
Range("A3").Select
ActiveCell.FormulaR1C1 = "A+B"
Range("B3").Select
ActiveCell.FormulaR1C1 = "=R[-2]C+R[-1]C"
Range("A4").Select
ActiveCell.FormulaR1C1 = "A/B"
Range("B4").Select
ActiveCell.FormulaR1C1 = "=R[-3]C/R[-2]C"

15

Incio do cdigo
Linhas de comentrio

Anlise da primeira macro (2)


Range("A1:A4").Select
Selection.Font.Bold = True
Range("B1:B4").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With

Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

16

Anlise da primeira macro (3)


Sheets.Add After:=Sheets(Sheets.Count)
Sheets("Plan1").Select
Sheets("Plan1").Name = "A"
Sheets("Plan2").Select
Sheets("Plan2").Name = "B"
Sheets("Plan3").Select
Sheets("Plan3").Name = "C"
Sheets("Plan4").Select
Sheets("Plan4").Name = "D"
Sheets("C").Select
ActiveWindow.SelectedSheets.Delete
Sheets("A").Select
Range("A1:C5").Select
Selection.Copy
Sheets("B").Select
Range("A1").Select
ActiveSheet.Paste
End Sub

17

FormulaR1C1

In 1980, Multiplan the previous Work spread of Microsoft was addressing the cells following
the RiCj notation.

RiCj represents the cell located on the ith row and on the jth column. If the formula
referencing RiCj was copied, the reference was considered as the absolute reference.

R[+i]C[-j] represents the cell located i rows down and j columns on the left of the initial cell.
If the formula referencing R[+i]C[-j] was copied, the reference was considered as relative.

The main interest of this notation is that the difference between relative and absolute is more
natural. R1C1 references, in an absolute way, the top left cell of the sheet while R[-3]C[+2]
represents a relative cell located 3 rows up and 2 columns right.

The drawback is the level of readability of the relative notation. Another well known work
spread called Lotus1.2.3 was referencing the cells using the American notation (as for
instance A1).

The FormulaR1C1 property is based on the R1C1 notation because it is easier to manipulate
row number than row characters in VBA programs. Thus, using the macro recorder to type
the formula in E11 (the active cell) will result in the following statement:
ActiveCell.FormulaR1C1==R11C4*R[-1]C

18

Comunicao Excel e VBA

Principais formas de manipular clulas do Excel a partir de VBA

Range

Objeto mais importante do VBA representa uma clula ou conjunto de clulas

Range(A1)

clula A1

Range(B2:D5)

conjunto de clulas entre B2 e D5

Cells(rowIndex, colIndex)

Cells(1,1)

clula A1

Cells(7,4)

clula D7

Range(Cells(2,2), Cells(5,4)) conjunto de clulas entre B2 e D5

ActiveCell

Refere-se clula atualmente ativa.

Se um conjunto de clulas estiver selecionado (ex. Range(B2:D5)), este objeto refere-se


clula localizada no canto superior esquerdo da atual seleo (clula B2).

19

Comunicao Excel e VBA

Principais formas de manipular clulas do Excel a partir de VBA

Offset(rowOffset, columnOffset)

Offset um mtodo aplicvel ao objeto ActiveCell

Exemplo:
Range(C5).Select

20

ActiveCell.Offset(0,1)

refere-se clula localizada uma coluna direita da


atual seleo Clula D5

ActiveCell.Offset(-1,2)

refere-se clula localizada uma linha acima e duas


colunas direita da atual seleo Clula E4

Objeto Range

Principais Mtodos do Objeto Range

Select

posiciona o cursos na clula e torna-a ativa

Copy

copia a clula (valor ou frmula)

PasteSpecial

cola do copiado com formato especificado

Clear

limpa contedo e formato da clula

ClearFormats

limpa formato da clula

ClearContents

limpa contedo da clula

Merge

cria uma clula mesclada

21

Lista completa de mtodos e propriedades deste objeto: https://msdn.microsoft.com/PT-BR/library/office/ff838238.aspx

Objeto Range

Algumas Propriedades do Objeto Range

Value

retorna ou define valor do range especificado


(propriedade padro)

FormulaR1C1

retorna ou define uma frmula para o objeto


usando a notao R1C1.

Style

Font

retorna ou define o formato do nmero (e.x.


moeda, porcentagem, etc)
fonte (inclui cor, negrito, sublinhado, etc.)

22

Lista completa de mtodos e propriedades deste objeto: https://msdn.microsoft.com/PT-BR/library/office/ff838238.aspx

Objeto Range - Exemplos

Range("A5").Value = Range("A1").Value

X = Range("A1").Value

Range("B1:D10").ClearContents

Cells(1, 1).Value = 24

Range(Cells(1, 1), Cells(10, 10)).Borders.LineStyle = xlThick

Range("C1:C5").Copy

Range("D1:D5").PasteSpecial xlPasteValues

23

Lista completa de mtodos e propriedades deste objeto: https://msdn.microsoft.com/PT-BR/library/office/ff838238.aspx

Exerccio 3 - Reescrevendo a primeira macro

3.

Abra uma nova pasta de trabalho Excel.


Salve-a com o nome Exercicio3 em modo Pasta de Trabalho
Habilitada para Macros Excel (*.xlsm).
Acesse o Editor VBA.
Alt+F11

4.

Insira um novo Mdulo

1.
2.

24

Exerccio 3 nova macro (1)


Sub Exercicio3()
Range("A1").Value = "A"

Range("B1").Value = 5
Range("A2").Value = "B"
Range("B2").Value = 10
Range("A3").Value = "A+B"
Range("B3").FormulaR1C1 = "=R[-2]C+R[-1]C"
'Range("B3").Value = Range("B1").Value + Range("B2").Value

Range("A4").Value = "A/B"
Range("B4").FormulaR1C1 = "=R[-3]C+R[-2]C"
'Range("B4").Value = Range("B1").Value / Range("B2").Value
Range("A1:A4").Font.Bold = True

Range("B1:B4").Font.Color = -16776961
'Range("B1:B4").Font.Color = vbRed
'Range("B1:B4").Font.Color = RGB(255, 0, 0)

25

Exerccio 3 nova macro (2)


Range("A1").EntireRow.Insert
Range("A1").EntireColumn.Insert

Sheets.Add After:=Sheets(Sheets.Count)
'Sheets.Add After:=Sheets("Plan3")
Sheets("Plan1").Name = "A"
Sheets("Plan2").Name = "B"
Sheets("Plan3").Name = "C"
Sheets("Plan4").Name = "D"

Sheets("C").Delete
Sheets("A").Range("A1:C5").Copy
Sheets("B").Range("A1").PasteSpecial xlPasteAll

End Sub

26

Procedimentos VBA

Procedimentos
Um procedimento uma unidade de cdigo que realiza uma tarefa e se encontra localizada
entre instrues Sub e End Sub ou entre instrues Function e End Function.
SubProcedure
uma rotina que desempenha uma tarefa especfica.
Instrues Sub e End Sub.
Function
As funes so como sub-rotinas, mas com a diferena que devolvem um valor como
resultado da operao.
Instrues Function e End Function.

Mdulos
O cdigo dentro de um mdulo organizado em procedimentos.
Um mdulo deve armazenar um conjunto de procedimentos que realizem tarefas especficas
ou identicas.

27

Funes VBA

Uma funo computa um resultado a partir de argumentos que so


fornecidos como dados de entrada (clulas, valores, variveis, ).

Sintaxe simplificada para declarao de funes:

Function functionName (Mandatory Arguments, optional


Optional Arguments)
End Funtion

Notas importantes:

28

O separador de argumentos a virgula;


Todos as palavras-chave so em Ingls;
O separador decimal o ponto (Ingls);
Recomenda-se que todas as funes sejam armazenadas no mesmo Mdulo
facilita a exportao para outra Planilha.

Funes VBA Exemplo


Function Imposto(Valor As Double, Taxa As Double) As
Double
Esta funo recebe o valor bruto e a taxa de imposto
aplicvel e calcula do montante do imposto a pagar

Imposto = Valor * Taxa


End Function

29

Declarao de Variveis

Uma varivel uma rea na memria, referenciada por um identificador,


onde pode ser armazenado um valor e alterado a qualquer momento.

Caracteristicas do nome das variveis:

comear por uma letra;


ser nico dentro do mesmo nvel de escopo;
no pode conter espaos;
no pode ser igual a uma palavra reservada da linguagem;
No permitido o uso de caracteres especiais,

Exceo: _, $, %, #, @, &, ! se utilizados como ltimo caractere do nome.


O smbolo _ tambm pode ser usado entre palavras do nome da varivel.

Palavras reservadas (Termos que so de uso da linguagem VBA)


as, byref, byval, case, close, const, date, declare, dim, each, else, empty, false, for, friend,
function, get, input, if, is, len, let, lock, next, new, nothing, on, open, option, print,
public, private, resume, seek, select, set, static, string, sub, then, to, true, type, variant,
with, while, write.

30

Declarao de Variveis

Dim

Declara e aloca espao de armazenamento para uma ou mais variveis.


O valor da varivel retido apenas enquanto o procedimento no qual ela foi
declarada estiver em execuo.

Sintaxe simplificada:
Dim nomeVariavel As tipoVariavel

possvel na mesma declarao de variveis declarar variveis de diversos


tipos:

Dim var1 As Integer, var2 As Date, var3 As Double


Para declarar diversas variveis do mesmo tipo:
Dim var_1, var_2, var_3 As Double

31

https://msdn.microsoft.com/pt-br/library/7ee5a7s1.aspx

Tipos de dados

O tipo de uma varivel determina a quantidade de memria que ela ocupar, em


bytes, e o modo de armazenamento.
VBA

32

Tamanho

Intervalo

Boolean

2 bytes

Verdadeiro ou Falso

Byte

1 byte

Nmeros sem sinal entre 0 e 255

Date

8 bytes

01/01/100 a 31/12/9999

Double

8 bytes

-1.79769313486231570E+308 a
-4.94065645841246544E-324 para valores negativos;
4.94065645841246544E-324 a
1.79769313486231570E+308 para valores positivos.

Integer

2 bytes

Nmeros inteiros entre -32768 e 32767

Long

4 bytes

nmeros inteiros entre -2 147 483 648 e 2 147 483 648

Object

4 bytes

utilizado para fazer referncia a um objeto do Excel

Single

4 bytes

-3.4028235E+38 a -1.401298E-45 para valores negativos;


1.401298E-45 a 3.4028235E+38 para valores positivos.

String

1 byte por caractere

0 a aproximadamente 2 bilies de caracteres Unicode

Variante

16 bytes

permite armazenar qualquer tipo de dados

https://msdn.microsoft.com/pt-br/library/47zceaw7.aspx

Declarao de Variveis

Dim

Sintaxe completa:
[ <attributelist> ][ accessmodifier ][[ Shared ][ Shadows ]|[ Static ]
][ ReadOnly ] Dim [ WithEvents ] variablelist

As palavras-chave que especificam o nvel de acesso so chamadas modificadores acesso


(accessmodifier).

Public

A varivel pode ser acessada a partir de cdigo em qualquer lugar no mesmo projeto, de outros
projetos que fazem referncia do projeto, e do qualquer conjunto de mdulos criado a partir do
projeto

Private

o valor fica disponvel a todos os procedimentos dentro do mdulo onde a varivel foi declarada.

Static

Especifica que uma ou mais variveis locais declaradas devem continuar a existir e manter seus valores mais
recentes aps o trmino do procedimento no qual elas so declaradas.

33

https://msdn.microsoft.com/pt-br/library/76453kax.aspx

Principais Operadores

34

http://bianchi.pro.br/vba/vba_p1.php

Principais Operadores

35

http://bianchi.pro.br/vba/vba_p1.php

Exerccio 4 - Criando uma Funo


Crie uma funo para calcular a hipotenusa de um
tringulo retngulo a partir das dimenses dos catetos.

1.
1.
2.
3.

2.

36

Use o arquivo fornecido Exerccio4.xlsx


Crie um novo mdulo denominado Funes
Denomine a sua funo de hipotenusa

Na interface Excel, chame a sua funo na clula B5


para calcular a hipotenusa de um tringulos cujos
catetos so informados nas clulas B2 e B3.

Exerccio 4 - Resoluo
Function hipotenusa(x As Double, y As Double) As Double
hipotenusa = (x * x + y * y) ^ (1 / 2)
End Function

37

Interao com o Usurio

Em uma rotina, pode ser necessrio recolher informaes do usurio


atravs de questes abertas (InputBox) ou fechadas (MsgBox)

InputBox

MsgBox
Declarao: pop-up que mostra uma informao ao usurio.

38

Funo: permite coletar e tratar informao.

InputBox

39

MsgBox

40

MsgBox

41

MsgBox

A funo MsgBox produz um valor em funo do boto


acionado, assim produzir como output um dos valores
constantes da tabela seguinte:

42

Interao com o Usurio - Exemplos


preco = InputBox("Informe o preo")

resposta = MsgBox("Tem a certeza que deseja cancelar esta operao?",


vbYesNo + vbQuestion, "Ateno!!!")

MsgBox "Erro de Sintaxe!!!", 2 + 48 + 512 + 4096, "Mensagem de Erro

43

Exerccio 4 parte 2
Procedimento para calcular a hipotenusa de um triangulo retngulo, usando as
funcionalidades de interface com o usurio para informar os valores dos
catetos.
Adicione um novo mdulo denominado parte2
Crie um novo subprocedimento denominado hipotenusa_usuario
Utilize a funo InputBox para o usurio informar as dimenses dos
lados x e y do tringulo, as quais devem ser escritas nas clulas B2 e B3;
Use a funo criada na parte 1 deste exerccio para calcular a hipotenusa;
Usando a declarao MsgBox, mostra a seguinte mensagem informando a
dimenso da hipotenusa: A dimenso da hipotenusa z, onde z o
valor encontrado;
Crie um boto para chamar este procedimento.

1.
2.
3.
4.
5.

6.

44

Exerccio 4 Botes de macros

45

Exerccio 4 Resoluo
Sub hipotenusa_usuario()
'declarao das variveis
Dim ladoX As Double, ladoY As Double, resultado As Double
'questes para o usurio
ladoeX = InputBox("Informe a dimenso de x", "Clculo da Hipotenusa", 0)
Range("B2") = ladoX
ladoY = InputBox("Informe a dimenso de y", "Clculo da Hipotenusa", 0)
Range("B3") = ladoY
'calculo da hipotenusa
resultado = hipotenusa(ladoX, ladoY)
'resultado
MsgBox "A hipotenusa : " & Format(resultado, "###.##"), vbInformation,
"Resultado"
'MsgBox "A hipotenusa : " & resultado
End Sub

46

Outras utilidades

Comentrios no cdigo:

Para inserir comentrios basta preced-lo de um apstrofo ()


O comentrio pode ser inserido no princpio ou a meio de uma linha de cdigo.
Tudo o que est escrito esquerda do apstrofo considerado como comentrio.
O comentrio aparece no editor de cdigo com a cor verde.

Esta rotina tem o objetivo ....


Dim n As Integer n o nmero de estudantes

Continuao de linha de cdigo:

A quebra de linha definida por um underline precedido de um espao ( _)


Por vezes torna-se necessrio, por questes de espao e de leitura do cdigo, continuar a linha de cdigo na linha
seguinte.

a = b + c*b / sqr(b) + _
c*b*0.5

Chamando outra rotina

Pode-se chamar uma funo ou subrotina com a palavra-chave Call

Call Macro1

47

Resumo do Dia 1

O que o Visual Basic for Applications (VBA).

Criao de macros VBA usando a interface Excel: Guia Desenvolvedor; Gravar,


Editar e Correr uma macro.

Editor do Visual Basic.

Comunicao entre Excel e VBA: objetos, propriedades e mtodos.

Principais formas de manipular clulas do Excel a partir de VBA: Range, Cells,


ActiveCell.

Declarao e tipos de variveis.

Subprocedimentos versus Funes em VBA.

Interao com usurio: botes e caixas de dilogo (InputBox, MsgBox).

Outras utilidades: comentrios no cdigo, continuao de linha de cdigo, chamar


outras rotinas.

48

Dicas e Esclarecimentos adicionais

http://ic.unicamp.br/~everton/aulas/excel/Aula%2023%20%20macros%20com%20VB.pdf
http://bianchi.pro.br/vba/vba_p1.php
https://msdn.microsoft.com/en-us/library/office/gg264358.aspx
http://www.excel-easy.com/vba/range-object.html
https://msdn.microsoft.com/PT-BR/library/office/ff838238.aspx
https://msdn.microsoft.com/pt-br/library/office/ff823188.aspx
https://msdn.microsoft.com/pt-br/library/47zceaw7.aspx
https://msdn.microsoft.com/pt-br/library/b6ex274z.aspx
https://msdn.microsoft.com/pt-br/library/215yacb6.aspx
https://msdn.microsoft.com/pt-br/library/ft3z50dy.aspx
https://msdn.microsoft.com/en-us/library/bb209950
https://msdn.microsoft.com/pt-br/library/139z2azd(v=vs.90).aspx
https://msdn.microsoft.com/pt-br/library/76453kax.aspx
49

Dia 2
13/09/2016

Recordando.

Object (objeto) representa um elemento do Excel.

Property (propriedade) um atributo de um objeto.

Definem as caracteristicas de um objeto;


Podem ser lidas e modificadas;
Ex. Formato, cor, estilo, nome, etc.

Method (mtodo) uma operao em um objeto.

ex: planilha (sheet), clula (cell), grfico, etc.

Ex: selecionar, copiar, formatar, apagar, inserir, etc.

Em VBA, necessrio identificar um objeto antes de aplicar um de seus


mtodos ou alterar um valor de uma das suas propriedades.

Dia 1: Range, Cell, ActiveCell, Offset Comunicao com clulas


51

Hierarquia de Objetos

Em Excel VBA, um objeto pode conter outro objeto, e esse


objeto pode conter outro objeto, etc.

52

Hierarquia de objetos.
Nestes casos, nem sempre necessrio usar o qualificador de
objeto principal.

Objeto Application

Representa todo o aplicativo Microsoft Excel.


O objeto Application contm:

Configuraes e opes para o aplicativo como um todo.


Mtodos que retornam objetos de nvel superior.

Muitas das propriedades e mtodos que retornam os objetos mais comuns da interface do usurio,
podem ser usadas sem o qualificador de objeto Application.

Propriedades mais importantes


ActiveCell
ActiveSheet
Cells
Columns
Range
Rows
Selection
Sheets
Workbooks
WorksheetFunction
Worksheets
53

Lista completa de mtodos e propriedades deste objeto: https://msdn.microsoft.com/pt-br/library/office/ff194565.aspx

Objeto Application - Exemplos


Application.ActiveCell.Font.Bold = True

Pode ser escrito como:


ActiveCell.Font.Bold = True

Application.Sheets(1).Activate

Pode ser escrito como:


Sheets(1).Activate

Application.WorksheetFunction.CountA(Range("A:A"))

Pode ser escrito como:


WorksheetFunction.CountA(Range("A:A"))

54

Objetos Workbooks, Workbook e


ThisWorkbook
Workbooks

Uma coleo de todos os objetos Workbook que esto abertos no momento no aplicativo Microsoft Excel.

Workbook

Cada objeto Workbook representa uma pasta de trabalho Microsoft Excel.

ThisWorkbook

A propriedade ThisWorkbook retorna a pasta de trabalho onde o cdigo do Visual Basic est sendo
executado, no a pasta de trabalho ativa.

55Lista completa de mtodos e propriedades destes objetos: https://msdn.microsoft.com/pt-br/library/office/ff841074.aspx


https://msdn.microsoft.com/pt-br/library/office/ff835568.aspx https://msdn.microsoft.com/pt-br/library/office/ff193227.aspx

Objetos Workbooks, Workbook e


ThisWorkbook Exemplos

Workbooks.Close

Workbooks(1).Close

abre o arquivo Dados.xls como uma pasta de trabalho somente leitura

Workbooks(1).Activate

adiciona uma nova pasta de trabalho vazia ao Microsoft Excel.

Workbooks.Open FileName:=Dados.xls", ReadOnly:=True

fecha todas as pastas de trabalho um.

Workbooks.Add

fecha todas as pastas de trabalho

ativa a pasta de trabalho um.

ThisWorkbook.Close SaveChanges:=False

56

fecha pasta de trabalho onde o cdigo do Visual Basic est sendo executado, sem salvar as alteraes.

Objeto Sheets

Uma coleo de todas as planilhas na pasta de trabalho ativa ou especificada.

A coleo Sheets pode conter objetos Chart ou Worksheet .

A coleo Sheets til quando voc deseja retornar planilhas de qualquer tipo. Se voc
precisar trabalhar com planilhas de apenas um tipo, consulte o tpico do objeto para esse
tipo de planilha: Charts ou Worksheet.

Mtodos mais usados:

Activate
Add
Copy
Delete
Move
Select
PrintOut

Propriedades mais usadas:

Count

57

Retorna um valor Long que representa o nmero de objetos na coleo.


Lista completa de mtodos e propriedades deste objeto: https://msdn.microsoft.com/pt-br/library/office/ff193217.aspx

Objeto Sheets - Exemplos

Sheets.PrintOut

Sheets.Add type:=xlChart, count:=2, after:=Sheets(2)

Adiciona uma nova planilha denominada Caso1 no final de todas as planilhas da pasta de trabalho.

Sheets(Plan1").Activate

Use o mtodo Add para criar uma nova planilha e adicion-la coleo. O exemplo adiciona duas
planilhas de grfico pasta de trabalho ativa, inserindo-as aps a segunda planilha.

Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = Caso1"

imprime todas as planilhas na pasta de trabalho ativa.

Use Sheets(index), onde ndice o nome da planilha ou o nmero de ndice, para retornar um nico
objeto Chart ou Worksheet . O exemplo ativa a planilha chamada Plan1".

Sheets(Array("Sheet4", "Sheet5")).Move before:=Sheets(1)

58

Use Sheets(matriz) para especificar mais de uma planilha. O exemplo a seguir move as planilhas
chamadas "Sheet4" e "Sheet5" para o incio da pasta de trabalho.

Objetos Worksheets, Worksheet e


ActiveSheet
Worksheets

Uma coleo de todos os objetos Worksheet em uma pasta de trabalho.

Worksheet

Cada objeto Worksheet representa uma planilha.

ActiveSheet

Propriedade que retorna um objeto que representa a planilha ativa.

59

Lista completa de mtodos e propriedades deste objeto: https://msdn.microsoft.com/pt-br/library/office/ff194464.aspx

Objetos Worksheet e ActiveSheet


Mtodos mais usados:

Activate

Name

Copy

Paste

PasteSpecial

Delete

Move

Select

Worksheet.SaveAs

Propriedades mais usados:


Cells

Columns

Rows

Range

60

Lista completa de mtodos e propriedades deste objeto: https://msdn.microsoft.com/pt-br/library/office/ff194464.aspx

Objeto Worksheets Exemplos (1)

Worksheets.Move After:=Sheets(Sheets.Count)

Worksheets.Add Count:=2, Before:=Sheets(1)

Use o mtodo Add para criar uma nova planilha e adicion-la coleo. O exemplo
adiciona duas novas planilhas antes da planilha um da pasta de trabalho ativa.

Worksheets(1).Visible = False

Use a propriedade de Worksheets para retornar a coleo de Worksheets . O


exemplo move todas as planilhas at o final da pasta de trabalho.

Use as Worksheets(index), onde ndice o nome ou nmero de ndice da planilha, para


retornar um nico objeto Worksheet . O exemplo oculta a planilha um na pasta de
trabalho ativa.

Workbooks(Logs.xls").Worksheets("Sheet1").Activate

61

Ativa Sheet1 na pasta de trabalho chamada Logs.xls (a pasta de trabalho precisa estar aberta no
Microsoft Excel).

Objeto Worksheet Exemplos (2)

Worksheets("Plan1").Activate

Worksheets("Plan1").Copy After:=Worksheets("Plan3")

Worksheets("Plan1").Move After:=Worksheets("Plan3")

Worksheets("Plan1").Range("C1:C5").Copy
ActiveSheet.Paste Destination:=Worksheets("Plan1").Range("D1:D5")

Worksheets("Plan1").Cells(1).ClearContents

Worksheets("Plan1").Columns(1).Font.Bold = True

Worksheets("Plan1").Rows(3).Delete

Worksheets("Plan1").Range("A1").Value = 3.14159

Worksheets("Plan1").Range("C1:C5").Copy
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("D1:D5")

62

Objeto WorksheetFunction

Usado como continer para funes de planilha do Microsoft Excel que podem ser
chamadas no Visual Basic.

Mtodos mais usados:


Count
CountA
CountIf
Average
Max
Min
Sum
Exemplos

WorksheetFunction.Min(Range("A1:I1"))

WorksheetFunction.Average(Range(Cells(1,1), Cells(7,5)))

WorksheetFunction.CountA(Range("A:A"))

63

Lista completa de mtodos e propriedades deste objeto: https://msdn.microsoft.com/pt-br/library/office/ff834434.aspx

Exerccio 5.1
Considere um caso de estudo de previso de produo usando simulao numrica de
reservatrios.
Queremos analisar a chance de o poo produtor PROD026 apresentar produo nula.
Planilha: DadosPROD026
Crie um novo procedimento que registre em uma nova planilha (denominada Ex5.1)
os modelos e respectivos dados em que o poo PROD026 apresenta produo nula
(Np=0). Aps identificados, calcule o nmero de modelos e o percentual do total de
modelos.

64

Arquivo Exercicio5.xlsx

Estruturas loop
For Next

Repete um grupo de instrues em um nmero de vezes especificado.

Sintaxe simplificada
For i = 1 To 10000 Step 3

seu cdigo
Next

65

Estruturas loop
For Each Next

Repete um grupo de instrues para cada elemento em uma coleo.

Sintaxe simplificada
For Each item_in_group In group_of_items
seu cdigo

Next

66

Estruturas loop
Do Loop
Repete um bloco de declaraes enquanto uma condio Boolean for True ou
at a condio tornar-se True.

Sintaxe simplificada
Do { While | Until } condition
seu cdigo
Loop
-ouDo

seu cdigo
Loop { While | Until } condition

67

Estruturas loop
While End While

Executa uma srie de instrues enquanto uma condio determinada True.

Sintaxe simplificada
While condition
seu cdigo

End While

68

Estruturas de deciso
If...Then...Else...End If

Executa um grupo de instrues condicionalmente, dependendo do valor de uma


expresso.

Sintaxe simplificada
If a > 0 Then
MsgBox O valor maior do que zero
ElseIf a = 0 Then
MsgBox O valor igual a zero

Else
MsgBox O valor menor do que zero
End If
69

Outras estruturas
With End With

Executa uma srie de instrues que referenciam repetidamente um nico


objeto ou estrutura

Sintaxe simplificada
With Objeto

intrues
End With

70

Exerccio 5.1
Considere um caso de estudo de previso de produo usando simulao numrica de
reservatrios.
Queremos analisar a chance de o poo produtor PROD026 apresentar produo nula
(planilha: DadosPROD026).
Crie um novo procedimento que registre em uma nova planilha (denominada Ex5.1)
os modelos e respectivos dados em que o poo PROD026 apresenta produo nula
(Np=0). Aps identificados, calcule o nmero de modelos e o percentual do total de
modelos.

71

Arquivo Exercicio5.xlsx

Algumas dicas...

LastRow = Cells(Rows.Count, 1).End(xlUp).Row

NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1

LastColumn = Cells(1, Columns.Count).End(xlToLeft).Column

NextColumn = Cells(1, Columns.Count).End(xlToLeft).Column + 1

Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Ex5.1

Sheets.Add After:=Worksheets(Worksheets.Count))

Sheets(Worksheets.Count).Name = "Ex5.1"

72

Arquivo Exercicio5.xlsx

Exerccio 5.2
Considere o mesmo caso de estudo do Ex. 5.1.
fornecido um banco de dados (planilha Modelos) organizada por modelo
que inclui:
- poos perfurados no perodo de explorao (NA1A, NA2, NA3D, RJS19)
que no sero usados no desenvolvimento do campo.
- novos poos da estratgia de produo, ainda no perfurados.
Crie um novo procedimento que duplique a planilha Modelos para no
perder os dados originais (denomine-a de Ex5.2). Na nova planilha criada,
elimine as linhas referentes ao poos de explorao no usados na previso
de produo (NA1A, NA2, NA3D, RJS19).

73

Arquivo Exercicio5.xlsm

Aceleradores de macros

Algumas propriedades do objeto Application (o aplicativo Microsoft Excel)


podem ser modificadas de modo a acelerar o tempo de execuo de uma
macro.

Application.Calculation

Application.DisplayAlerts

True se o Microsoft Excel exibe certos alertas e mensagens enquanto uma


macro est sendo executado.

Application.EnableEvents

Retorna ou define um valor xlCalculation que representa o modo de clculo.

True se os eventos so ativados para o objeto especificado.

Application.ScreenUpdating

74

True se a atualizao de tela estiver ativada.

Aceleradores de macros
'Optimize Macro Speed
With Application
.ScreenUpdating = False

.EnableEvents = False
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With

'Reset Macro Optimization Settings


With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
.DisplayAlerts = True
End With

75

Exerccio 5.3
Considere um caso de estudo de previso de produo usando simulao
numrica de reservatrios.
Observe que o banco de dados criado no exerccio anterior (planilha Ex5.2)
encontra-se organizado por modelo e inclui:
- dados do campo (linha *FIELD).
- todos os poos da estratgia de produo.
Crie um novo procedimento que crie uma nova planilha (denominada Ex5.3)
que contenha apenas os dados de campo.

76

Arquivo Exercicio4.xlsm

Resumo do Dia 2

Objetos: Application, Workbooks, Sheets, Worksheets, WorksheetFunction.


Hierarquia de Objetos em VBA.
Estruturas de deciso: If...Then...Else...End If.
Estruturas Loop: For...Next; For Each Next; Do...Loop; While End
While;
Outras estruturas: With End With.
Aceleradores de macros.

77

Dicas e Esclarecimentos adicionais

https://msdn.microsoft.com/pt-br/library/office/ff834434.aspx

https://msdn.microsoft.com/pt-br/library/office/ff193217.aspx

http://www.excel-easy.com/vba/workbook-worksheet-object.html

http://webserver.mohid.com/MTDP/downloads/Introdu%C3%A7%C3%A3o_%C
3%A0_programa%C3%A7%C3%A3o_em_VBA.pdf

https://msdn.microsoft.com/pt-br/library/wc500chb.aspx

https://msdn.microsoft.com/pt-br/library/752y8abs.aspx

https://msdn.microsoft.com/pt-br/library/5z06z1kb.aspx

https://msdn.microsoft.com/pt-br/library/eked04a7.aspx

https://msdn.microsoft.com/pt-br/library/zh1f56zs.aspx

https://msdn.microsoft.com/PT-BR/library/office/ff839409.aspx

http://software-solutions-online.com/2014/03/13/vba-folder-dialog/

78

Dia 3
14/09/2016

Exerccio 5.4
Considere um caso de estudo de previso de produo usando simulao
numrica de reservatrios.
fornecido um arquivo (Ex5.2) organizada por modelo que inclui:
- dados do campo (linha *FIELD).
- todos os poos da estratgia de produo.

Crie um novo procedimento que crie uma nova planilha (denominada Ex5.4)
que contenha apenas os dados do poo produtor PROD005, incluindo o
nome do modelo correspondente.

80

Arquivo Exercicio5.xlsm

Exerccio 5.5
Considere um caso de estudo de previso de produo usando simulao
numrica de reservatrios.
So fornecidos dois bancos de dados (planilhas Produtores e Injetores)
que incluem o desempenho dos poos produtores e injetores nos 147
modelos do reservatrio.
Crie um novo procedimento que crie uma nova planilha (denominada Ex5.5)
com a seguinte tabela, mostrando o nmero de modelos em que cada poo
apresenta produo ou injeo nula (Np=0 e Winj=0, respectivamente):

81

Arquivo Exercicio5.xlsm

Exerccio 5.6
Considere um caso de estudo de previso de produo usando simulao
numrica de reservatrios.
fornecido um arquivo (Ex5.2) que inclui o desempenho dos poos
produtores nos 147 modelos do reservatrio.
Crie uma nova planilha (denominada Ex5.6) com a seguinte tabela,
mostrando quando modelos apresenta de 0 a n poos secos:

82

Arquivo Exercicio5.xlsm

Exerccio 6
So fornecidos 20 arquivos com dados de previso de 20 modelos de
simulao.
Crie um procedimento que abra os 20 arquivos e copie os dados referentes
vazo total de leo do campo (Qo) para uma nova planilha.

83

Diretrio Exercicio6

Abrir e editar arquivos externos


Sub LoopAllExcelFilesInFolder()
Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim myExtension As String
Dim FldrPicker As FileDialog

'Optimize Macro Speed


With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
.DisplayAlerts = False

End With

84

Diretrio Exercicio6

Abrir e editar arquivos externos


'Retrieve Target Folder Path From User
Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker)
With FldrPicker
.Title = "Select A Target Folder"
.AllowMultiSelect = False
If .Show <> -1 Then GoTo NextCode
myPath = .SelectedItems(1) & "\"
End With

'In Case of Cancel


NextCode:
If myPath = "" Then GoTo ResetSettings

'Target File Extension (must include wildcard "*")


myExtension = "*.xls"

85

Diretrio Exercicio6

Abrir e editar arquivos externos


'Target Path with Ending Extention
myFile = Dir(myPath & myExtension)
'Loop through each Excel file in folder
Do While myFile <> ""
'Set variable equal to opened workbook
Set wb = Workbooks.Open(Filename:=myPath & myFile)

'PLACE YOUR CODE HERE


'Save and Close Workbook
wb.Close SaveChanges:=False
'Get next file name

myFile = Dir
Loop

86

Diretrio Exercicio6

Abrir e editar arquivos externos


'Message Box when tasks are completed
MsgBox "Task Complete!"
ResetSettings:
'Reset Macro Optimization Settings
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic

.DisplayAlerts = True
End With
End Sub

87

Diretrio Exercicio6

Resumo do Dia 3

Estruturas de deciso: If...Then...Else...End If.


Estruturas Loop: For...Next; For Each Next; Do...Loop; While End
While;
Outras estruturas: With End With.
Aceleradores de macros.
Abrir e manipular arquivos externos usando rotinas VBA.

88

Dicas e Esclarecimentos adicionais

https://msdn.microsoft.com/pt-br/library/office/ff834434.aspx

https://msdn.microsoft.com/pt-br/library/office/ff193217.aspx

http://www.excel-easy.com/vba/workbook-worksheet-object.html

http://webserver.mohid.com/MTDP/downloads/Introdu%C3%A7%C3%A3o_%C
3%A0_programa%C3%A7%C3%A3o_em_VBA.pdf

https://msdn.microsoft.com/pt-br/library/wc500chb.aspx

https://msdn.microsoft.com/pt-br/library/752y8abs.aspx

https://msdn.microsoft.com/pt-br/library/5z06z1kb.aspx

https://msdn.microsoft.com/pt-br/library/eked04a7.aspx

https://msdn.microsoft.com/pt-br/library/zh1f56zs.aspx

https://msdn.microsoft.com/PT-BR/library/office/ff839409.aspx

http://software-solutions-online.com/2014/03/13/vba-folder-dialog/

89