Escolar Documentos
Profissional Documentos
Cultura Documentos
Macros
Menu <Ferramentas> seguido da opção <Macro>
Gravar macros: botões <Terminar gravação> e <Referência relativa>
Gravar macros é uma forma simples e rápida de visualizar os objectos, as
propriedades ou os métodos envolvidos em certas operações sobre as quais
queremos escrever código
Editor do
Visual Basic
Projecto
Propriedades
Código: a opção
(General) contém
as declarações e
os procedimentos;
cada objecto
contém a lista de
eventos a ele
associado
Classes e instâncias
Classe de objectos: conjunto de objectos com as mesmas propriedades, com
os mesmos métodos e que respondem aos mesmos eventos
Instância: todo o objecto particular de uma classe
Métodos
Os métodos são acções que descrevem o que os objectos podem fazer
São executados sobre os objectos e podem conter ou não argumentos
ActiveCell.Clear
ActiveCell.AddComment “comentário”
Eventos
Os eventos são algo que acontece aos objectos
Ocorrem em resultado de acções do utilizador, do sistema ou do próprio código
Os procedimentos correspondentes aos eventos têm todos a seguinte forma:
Private Sub Objecto_Evento(argumentos)
É necessário não confundir métodos com eventos. Por exemplo, o método
Activate quando executado sobre um objecto implica a execução do evento
Activate do mesmo objecto:
Worksheets(1).Activate
Private Sub Worksheet_Activate()
Uma variável do tipo Object também fica com o valor Nothing se o objecto a
ela associado for fechado/terminado/eliminado
Métodos
worksheet.Activate: torna a folha activa
worksheet.Delete: elimina a folha
worksheet.Copy(Before, After): copia a folha
worksheet.Move(Before, After): move a folha
worksheet.Protect(Passwd, DrawingObjs, Contents): protege a
folha no que diz respeito aos seus objectos gráficos e/ou ao seu conteúdo
worksheet.Calculate: recalcula todas as fórmulas presentes na folha. Útil
para fórmulas que utilizam funções voláteis como AGORA() e HOJE()
Exemplos
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
For Each cel In Target
cel.Interior.ColorIndex = 3
Next
End Sub
Exemplo
For ano = 1 To 100
Range(“A” & ano).Value = 1999 + ano
Next ano
Exemplo
Function LastRow(rng As range)
With rng
LastRow =.Rows.Count + .Row – 1
‘LastRow =.Rows(.Rows.Count).Row
End With
End Function
Exemplos
Range(“A9”).Formula = “=SUM(A1:A8)”
Range(“A9”).FormulaLocal = “=SOMA(A1:A8)”
‘aspas nas fórmulas devem ser duplicadas
Range(“A1”).Formula = “=COUNTIF(B1:B9, ““>0””)”
Range(“A1”).FormulaLocal = “=CONTAR.SE(B1:B9; ““>0””)”
‘o exemplo que se segue leva a que B9 Å =SUM(B1:B8)
Range(“A9:B9”).Formula = “=SUM(A1:A8)”
‘o exemplo que se segue leva a que A9 Å =SUM($A$1:$A$8)
Range(“A9”).FormulaR1C1 = “=SUM(R1C1:R8C1)”
Range(“A9”).FormulaR1C1Local = “=SOMA(L1C1:L8C1)”
‘o exemplo que se segue leva a que A9 Å =SUM(A1:A8)
Range(“A9”).FormulaR1C1 = “=SUM(R[-8]C:R[-1]C)”
‘o exemplo que se segue leva a que A9 Å =SUM(A$1:$A8)
Range(“A9”).FormulaR1C1 = “=SUM(R1C:R[-1]C1)”
Exemplos
Range(“C5:D10”).Select
Selection.Offset(-4, -2).Select ‘A1:B6
Selection.Offset(3, 1).Range(“B2”).Select ‘C5
^ exponenciação
- negação
*,/ multiplicação e divisão
\ divisão inteira
Mod resto da divisão
+,- adição e subtracção
& concatenação
= , > , < , <> , >= , <= , Like , Is comparação
And , Or , Not , Imp , Xor , Eqv lógica
Menor precedência
Procedimentos Function
[Public | Private] Function nome ([argumentos]) [As tipo]
[...]
[nome = expressão]
[Exit Function]
[...]
[nome = expressão]
End Function
Condições de paragem
While: executa o ciclo enquanto a condição for verdade
Until: executa o ciclo enquanto a condição for falsa
Dim var2
IsNull(var2) ‘False
var2 = “”
IsNull(var2) ‘False
var2 = Null
IsNull(var2) ‘True
Propriedades e métodos
collection.Count: número total de objectos na collection (só de leitura)
collection.Add Item, Key, Before, After: adiciona um novo objecto
Item: objecto a adicionar
Key: nome pelo qual o objecto será conhecido na collection
Before/After: objecto antes/depois do qual o novo objecto deve ser adicionado
collection(Index): objecto de ordem Index (o primeiro tem ordem 1)
collection(Key): objecto cujo nome é Key
collection.Remove Index: remove o objecto de ordem Index
collection.Remove Key: remove o objecto cujo nome é Key
Public
Property Let PropertyName([args,] NewVal As PropertyDataType)
[... : m_DataMember = expr]
[Exit Property]
[... : m_DataMember = expr]
End Property
Ricardo Rocha DCC-FCUP Visual Basic for Applications: # 84
Módulos de classe III
Exemplo
‘data members do módulo de classe CFactura
Private m_ID As Long : ... : Private m_emAtraso As boolean
‘factura01.ID
Public Property Get ID() As Long
ID = m_ID
End Property
‘factura01.EmAtraso
Public Property Get EmAtraso() As Boolean
EmAtraso = m_emAtraso
End Property
‘factura01.Quantia = newQuantia
Public Property Let Quantia(newQuantia As Currency)
If newQuantia < 0 Then
newQuantia = 0
MsgBox “Quantia inválida! Será usado zero.”
End If
m_quantia = newQuantia
End Property
Ricardo Rocha DCC-FCUP Visual Basic for Applications: # 85
Módulos de classe IV
Exemplo
'factura01.DataFactura = newData
Public Property Let DataFactura(newData As Date)
If newData > Date Then
newData = Date
MsgBox “Data inválida! Será usada a data de hoje.”
End If
m_dataFactura = newData
m_dataVencimento = m_dataFactura + 30
End Property
'factura01.DataPagamento = newData
Public Property Let DataPagamento(newData As Date)
m_dataPagamento = newData
m_emAtraso = False
End Property
‘cliente01.Nome
Public Property Get Nome() As String
Nome = m_Nome
End Property
‘cliente01.Facturas
Public Property Get Facturas() As CFacturas
Set Facturas = m_Facturas
End Property
Ricardo Rocha DCC-FCUP Visual Basic for Applications: # 91
Módulos de classe X
Exemplo
‘cliente01.Nome = newNome
Public Property Let Nome(newNome As String)
m_Nome = newNome
End Property
‘Set cliente01.Facturas = newFacturas
Public Property Set Facturas(newFacturas As CFacturas)
Set m_Facturas = newFacturas
End Property
‘exemplo de utilização
Dim cliente01 As New CCliente
With cliente01
.Nome = “António”
Set .Facturas = New CFacturas ‘a declaração New cria uma
With .Facturas ‘nova instância do objecto
.Add 1000
.Add 2000
End With
End With
MsgBox cliente01.Facturas.Item(1).Quantia ‘apresenta “1000”
Ricardo Rocha DCC-FCUP Visual Basic for Applications: # 92