Beruflich Dokumente
Kultur Dokumente
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.
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).
https://pt.wikipedia.org/wiki/Visual_Basic_for_Applications
2.
Formate a tabela:
formatao: Negrito
3.
formatao:Vermelho
5.
6.
Elimine a Planilha C.
7.
8.
10
Projeto VBA
Cdigo
Conceitos Importantes
Exerccio 2
3.
4.
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
15
Incio do cdigo
Linhas de comentrio
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
16
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
Range
Range(A1)
clula A1
Range(B2:D5)
Cells(rowIndex, colIndex)
Cells(1,1)
clula A1
Cells(7,4)
clula D7
ActiveCell
19
Offset(rowOffset, columnOffset)
Exemplo:
Range(C5).Select
20
ActiveCell.Offset(0,1)
ActiveCell.Offset(-1,2)
Objeto Range
Select
Copy
PasteSpecial
Clear
ClearFormats
ClearContents
Merge
21
Objeto Range
Value
FormulaR1C1
Style
Font
22
Range("A5").Value = Range("A1").Value
X = Range("A1").Value
Range("B1:D10").ClearContents
Cells(1, 1).Value = 24
Range("C1:C5").Copy
Range("D1:D5").PasteSpecial xlPasteValues
23
3.
4.
1.
2.
24
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
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
Notas importantes:
28
29
Declarao de Variveis
30
Declarao de Variveis
Dim
Sintaxe simplificada:
Dim nomeVariavel As tipoVariavel
31
https://msdn.microsoft.com/pt-br/library/7ee5a7s1.aspx
Tipos de dados
32
Tamanho
Intervalo
Boolean
2 bytes
Verdadeiro ou Falso
Byte
1 byte
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
Long
4 bytes
Object
4 bytes
Single
4 bytes
String
Variante
16 bytes
https://msdn.microsoft.com/pt-br/library/47zceaw7.aspx
Declarao de Variveis
Dim
Sintaxe completa:
[ <attributelist> ][ accessmodifier ][[ Shared ][ Shadows ]|[ Static ]
][ ReadOnly ] Dim [ WithEvents ] variablelist
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
1.
1.
2.
3.
2.
36
Exerccio 4 - Resoluo
Function hipotenusa(x As Double, y As Double) As Double
hipotenusa = (x * x + y * y) ^ (1 / 2)
End Function
37
InputBox
MsgBox
Declarao: pop-up que mostra uma informao ao usurio.
38
InputBox
39
MsgBox
40
MsgBox
41
MsgBox
42
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
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:
a = b + c*b / sqr(b) + _
c*b*0.5
Call Macro1
47
Resumo do Dia 1
48
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.
Hierarquia de Objetos
52
Hierarquia de objetos.
Nestes casos, nem sempre necessrio usar o qualificador de
objeto principal.
Objeto Application
Muitas das propriedades e mtodos que retornam os objetos mais comuns da interface do usurio,
podem ser usadas sem o qualificador de objeto Application.
Application.Sheets(1).Activate
Application.WorksheetFunction.CountA(Range("A:A"))
54
Uma coleo de todos os objetos Workbook que esto abertos no momento no aplicativo Microsoft Excel.
Workbook
ThisWorkbook
A propriedade ThisWorkbook retorna a pasta de trabalho onde o cdigo do Visual Basic est sendo
executado, no a pasta de trabalho ativa.
Workbooks.Close
Workbooks(1).Close
Workbooks(1).Activate
Workbooks.Add
ThisWorkbook.Close SaveChanges:=False
56
fecha pasta de trabalho onde o cdigo do Visual Basic est sendo executado, sem salvar as alteraes.
Objeto Sheets
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.
Activate
Add
Copy
Delete
Move
Select
PrintOut
Count
57
Sheets.PrintOut
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"
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".
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.
Worksheet
ActiveSheet
59
Activate
Name
Copy
Paste
PasteSpecial
Delete
Move
Select
Worksheet.SaveAs
Columns
Rows
Range
60
Worksheets.Move After:=Sheets(Sheets.Count)
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
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).
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.
WorksheetFunction.Min(Range("A1:I1"))
WorksheetFunction.Average(Range(Cells(1,1), Cells(7,5)))
WorksheetFunction.CountA(Range("A:A"))
63
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
Sintaxe simplificada
For i = 1 To 10000 Step 3
seu cdigo
Next
65
Estruturas loop
For Each Next
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
Sintaxe simplificada
While condition
seu cdigo
End While
68
Estruturas de deciso
If...Then...Else...End If
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
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...
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
Application.Calculation
Application.DisplayAlerts
Application.EnableEvents
Application.ScreenUpdating
74
Aceleradores de macros
'Optimize Macro Speed
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
.DisplayAlerts = False
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
77
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
End With
84
Diretrio Exercicio6
85
Diretrio Exercicio6
myFile = Dir
Loop
86
Diretrio Exercicio6
.DisplayAlerts = True
End With
End Sub
87
Diretrio Exercicio6
Resumo do Dia 3
88
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