Anda di halaman 1dari 89

Introduo Programao em VBA

para Microsoft Excel


Susana Santos 12 a 14 de Setembro de 2016
sgraca@dep.fem.unicamp.be
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.

3
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.

4
https://pt.wikipedia.org/wiki/Visual_Basic_for_Applications
Configurar a Guia Desenvolvedor
Microsoft Office 2007 Microsoft Office 2010

5
Gravando a primeira macro (1)
Inicie a gravao da macro:

Complete a caixa de dilogo e faa OK:

6
Gravando a primeira macro (2)
1. Crie a seguinte tabela:
= B2 - B1
= B2/B1

2. Formate a tabela:

formatao: Negrito formatao:Vermelho

3. Insira uma linha e uma coluna antes da tabela

7
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.

8
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

Todas as macros existentes


so apresentadas nesta
interface.

10
Editor do Visual Basic for Applications
Listagem de todas as macros
Alt+F11 armazenadas no Mdulo1

Projeto VBA

As macros so armazenadas em Mdulos


Propriedades Cdigo
11
Conceitos Importantes
Object (objeto) representa um elemento do Excel.
ex: planilha (sheet), clula (cell), grfico, etc.

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: 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
1. Abra uma nova pasta de trabalho Excel.
2. Salve-a com o nome Exercicio2 em modo Pasta de Trabalho
Habilitada para Macros Excel (*.xlsm).
3. Acesse o Editor VBA. Alt+F11

4. Insira um novo Mdulo

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

14
Anlise da primeira macro (1)
Sub Exercicio1() Incio do cdigo
'
' Exercicio1 Macro
' Gravando uma macro usando a interface excel.
Linhas de comentrio
'
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
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
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

20
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 retorna ou define o formato do nmero (e.x.
moeda, porcentagem, etc)
Font 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
1. Abra uma nova pasta de trabalho Excel.
2. Salve-a com o nome Exercicio3 em modo Pasta de Trabalho
Habilitada para Macros Excel (*.xlsm).
3. Acesse o Editor VBA. Alt+F11

4. Insira um novo Mdulo

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:
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.
28
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 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

32 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
1. Crie uma funo para calcular a hipotenusa de um
tringulo retngulo a partir das dimenses dos catetos.
1. Use o arquivo fornecido Exerccio4.xlsx
2. Crie um novo mdulo denominado Funes
3. Denomine a sua funo de hipotenusa

2. 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.

36
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.

Funo: permite coletar e tratar informao.

38
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.

1. Adicione um novo mdulo denominado parte2


2. Crie um novo subprocedimento denominado hipotenusa_usuario
3. 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;
4. Use a funo criada na parte 1 deste exerccio para calcular a hipotenusa;
5. Usando a declarao MsgBox, mostra a seguinte mensagem informando a
dimenso da hipotenusa: A dimenso da hipotenusa z, onde z o
valor encontrado;
6. Crie um boto para chamar este procedimento.

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.
ex: planilha (sheet), clula (cell), grfico, etc.

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: 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.
Hierarquia de objetos.
Nestes casos, nem sempre necessrio usar o qualificador de
objeto principal.

52
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
fecha todas as pastas de trabalho

Workbooks(1).Close
fecha todas as pastas de trabalho um.

Workbooks.Add
adiciona uma nova pasta de trabalho vazia ao Microsoft Excel.

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


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

Workbooks(1).Activate
ativa a pasta de trabalho um.

ThisWorkbook.Close SaveChanges:=False
fecha pasta de trabalho onde o cdigo do Visual Basic est sendo executado, sem salvar as alteraes.

56
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
Retorna um valor Long que representa o nmero de objetos na coleo.

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


Objeto Sheets - Exemplos
Sheets.PrintOut
imprime todas as planilhas na pasta de trabalho ativa.

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


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"
Adiciona uma nova planilha denominada Caso1 no final de todas as planilhas da pasta de trabalho.

Sheets(Plan1").Activate
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)


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.

58
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)
Use a propriedade de Worksheets para retornar a coleo de Worksheets . O
exemplo move todas as planilhas at o final da pasta de trabalho.

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 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
Ativa Sheet1 na pasta de trabalho chamada Logs.xls (a pasta de trabalho precisa estar aberta no
Microsoft Excel).

61
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

-ou-

Do
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
Retorna ou define um valor xlCalculation que representa o modo de clculo.
Application.DisplayAlerts
True se o Microsoft Excel exibe certos alertas e mensagens enquanto uma
macro est sendo executado.
Application.EnableEvents
True se os eventos so ativados para o objeto especificado.
Application.ScreenUpdating
True se a atualizao de tela estiver ativada.

74
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