Vba
Vba
Vba
Introduo
uma linguagem de programao baseada na conhecida linguagem BASIC Est concebida para funcionar em conjunto com diferentes aplicaes, de forma a potenciar a robustez das mesmas Enquadra-se nos ambientes de programao baseados no processamento de sequncia de eventos (event-driven programming)
Histria
Foi inicialmente integrada com o Excel 5 em 1994 e a partir da a sua expanso para outras aplicaes foi gradual Foi com a sada do Office 97 em 1997 que a Microsoft concretizou um dos seus grandes objectivos: ter um ambiente de programao completamente integrado nos seus quatro produtos mais famosos: Word, Excel, Access e PowerPoint Actualmente, o VBA j por si s um produto independente, que outras companhias podem adoptar e incorporar nas suas aplicaes
Variveis I
Para que servem?
Servem para guardar valores temporariamente em memria
Variveis II
Tipo de variveis
tipo genrico True ou False 0 at 255 -32.768 at 32.767 -2.147.483.648 at 2.147.483.647 +/-79.228.162.514.264.337.593.543.950.335 (sem casas decimais) +/-7,9228162514264337593543950335 (com casas decimais) Currency -922.337.203.685.477,5808 at 922.337.203.685.477,5807 Date 1 de Janeiro de 100 at 31 de Dezembro de 9999 String 1 at aproximadamente 2 bilies de caracteres Variant Boolean Byte Integer Long Decimal
Variveis III
Exemplos
Option Explicit Dim metade As Decimal Dim dobro As Decimal Dim resultado As Decimal metade = x / 2 dobro = 2 * x resultado = metade + dobro Dim val As Boolean val = True Dim texto As String texto = vba Dim aux As Variant aux = True aux = vba Ricardo Rocha DCC-FCUP Visual Basic for Applications: # 4
Operadores I
Aritmticos
+ (adio) - (subtraco e negao) / (diviso) \ (diviso inteira) Mod (resto da diviso) * (multiplicao) ^ (exponenciao)
Texto
& (concatenao)
Comparao
= (igual a) <> (diferente de) > (maior que) >= (maior ou igual) Or (ou lgico) < (menor que) <= (menor ou igual) Not (negao)
Lgicos
And (e lgico)
Operadores II
Precedncias
Maior precedncia ^ *,/ \ Mod +,& = , > , < , <> , >= , <= And , Or, Not exponenciao negao multiplicao e diviso diviso inteira resto da diviso adio e subtraco concatenao comparao lgicos Menor precedncia comentrios mltiplas instrues na mesma linha uma instruo em mltiplas linhas Visual Basic for Applications: # 6
Outros caracteres
: _ Ricardo Rocha DCC-FCUP
Caixas de mensagem
Caixas MsgBox
Forma bsica de apresentar uma mensagem ao utilizador MsgBox(mensagem)
Caixas InputBox
Apresenta uma mensagem numa caixa de mensagem, permite que o utilizador introduza texto, e devolve a sequncia de texto introduzida InputBox(mensagem)
Exemplo
Dim nome As String nome = InputBox(Introduza o seu nome...) MsgBox Bem vindo & nome & !
Procedimentos I
Para que servem?
Quando uma dada sequncia de instrues (tarefa) executada repetidamente em diferentes partes do cdigo, deve ser criado um procedimento que substitua e concentre num nico local a sequncia de instrues da tarefa a executar O uso de procedimentos aumenta a produtividade do programador pois diminui o tamanho global do cdigo a escrever, facilita a edio da sequncia de instrues relativa tarefa em causa, e minimiza a ocorrncia de erros
Tipo de procedimentos
Sub: so utilizados para executar tarefas independentes Function: so utilizados para calcular/retornar valores
Procedimentos II
Procedimentos Sub
Sub nome ([argumentos]) [...] [Exit Sub] [...] End Sub
Exemplo
Sub boas_vindas() Dim nome As String nome = InputBox(Introduza o seu nome...) MsgBox Bem vindo & nome & ! End Sub
Procedimentos III
Procedimentos Function
Function nome ([argumentos]) [As tipo] [...] [nome = expresso] [...] [Exit Function] [...] [nome = expresso] [...] End Function
Exemplo
Function area(comp As Integer, alt As Integer) As Integer area = comp * alt End Function
Argumentos I
Declarar argumentos
argumento [As tipo]
Exemplo
Function area(comp As Integer, alt As Integer) As Integer
Argumentos opcionais
Optional argumento [As tipo] = valor_por_defeito Permite atribuir um valor por defeito nos casos em que no passado ou nomeado qualquer valor A declarao de um argumento opcional implica que os argumentos subsequentes sejam igualmente declarados como opcionais Ricardo Rocha DCC-FCUP Visual Basic for Applications: # 11
Argumentos II
Exemplos
Function area(Optional comp As Integer = 1, larg As Integer = 1) area = comp * larg End Function
d um erro
Function area(Optional comp As Integer = 1, Optional larg As Integer = 1) area = comp * larg End Function aux = area (5, 4) aux = area (5) aux = area () aux = 20 aux = 5 aux = 1
VBA e Excel
Editor do Visual Basic
Menu <Ver> seguido das opes <Barras de ferramentas> e <Visual Basic>
Execuo condicional I
If Then Else
If condio_1 Then [...] ... [ElseIf condio_n Then [...]] [Else [...]] End If
Exemplos
Function escala(num As Integer) As String If num = 0 Then escala = zero ElseIf num < 0 Then escala = negativo Else num > 0 escala = positivo End If End Function Ricardo Rocha DCC-FCUP Visual Basic for Applications: # 15
Execuo condicional II
Exemplos
Function _positivo(num As Integer) As Boolean If num > 0 Then _positivo = True Else num <= 0 _positivo = False End If End Function Function num_min(num1 As Integer, num2 As Integer) If num1 < num2 Then num_min = num1 Else num1 >= num2 num_min = num2 End If End Function
Ciclos numerveis I
For Next
For contador = incio To fim [Step incremento] [...] [Exit For] [...] Next
Condies de paragem
Step: por defeito o valor de incremento 1 Se o incremento for positivo ou zero, o ciclo termina assim que contador seja maior do que fim Se o incremento for negativo, termina assim que contador seja menor do que fim
Ciclos numerveis II
Exemplos
Function mult_int(x As Integer, y As Integer) As Integer Dim contador As Integer If x >= 0 Then mult_int = 0 For contador = 1 To x mult_int = mult_int + y Next Else mult_int = 0 For contador = -1 To x Step -1 mult_int = mult_int - y Next EndIf End Function
Ciclos numerveis IV
Exemplos
Function primo(num As Long) As Boolean Dim contador As Long For contador = 2 To num \ 2 If num Mod contador = 0 Then primo = False Exit Function End If Next primo = True End Function
Ciclos condicionais I
Do Loop
Do {While | Until} condio [...] [Exit Do] [...] Loop Do [...] [Exit Do] [...] Loop {While | Until} condio
Condies de paragem
While: executa o ciclo enquanto a condio for verdade Until: executa o ciclo enquanto a condio for falsa
Ciclos condicionais II
Exemplos
Function mult_int(x As Integer, y As Integer) As Integer If x >= 0 Then mult_int = 0 Do While x > 0 mult_int = mult_int + y x = x 1 Loop Else mult_int = -mult_int(-x,y) EndIf End Function Sub confirmar_password() Dim password As String Do password = InputBox(Insira a password de acesso...) Loop While password <> cta Until password = cta End Sub
Manipulao de strings I
Funes bsicas
Len(string) LCase(string) UCase(string) Left(string, comprimento) Right(string, comprimento) Mid(string, incio [, comprimento])
Exemplos
Len(Hello World) Lcase(Hello World) Ucase(Hello World) Left(Hello World, 1) Right(Hello World, 3) Mid(Hello World, 7) Mid(Hello World, 7, 2) 11 hello world HELLO WORLD H rld World Wo
Manipulao de strings II
Funes bsicas
LTrim (string) RTrim (string) Trim (string) InStr ([incio,] string_geral, string_procura) StrComp (string1, string2)
Exemplos
LTrim( <- -> ) RTrim( <- -> ) Trim( <- -> ) InStr(1, Hello World, o) InStr(6, Hello World, o) StrComp(abc, abc) StrComp(abc, ABC) StrComp(ABC, abc) Ricardo Rocha DCC-FCUP <- -> <- -> <- -> 5 8 0 (string1 = string2) 1 (string1 > string2) -1 (string1 < string2) Visual Basic for Applications: # 25
Exemplo
Function inverte(str As String) As String Dim i As Integer Dim tamanho As Integer tamanho = Len(str) inverte = For i = tamanho To 1 Step -1 inverte = inverte & Mid(str, i, 1) Next End Function
Function dias_de_vida (dia As Integer, mes As Integer, _ ano As Integer) Dim nascimento As Date nascimento = DateSerial(ano, mes, dia) dias_de_vida = Date - nascimento End Function
Objectos I
Conceito
Qualquer coisa que numa aplicao se pode manipular de algum modo
Propriedades
As propriedades so os atributos que definem as caractersticas dos objectos Cells(1,1).Formula = =B1*10 Certas propriedades so elas mesmas objectos Cells(1,1).Font.Italic = True Existem propriedades que so s de leitura col = Cells(1,1).Column
Objectos II
Mtodos
Os mtodos so aces que descrevem o que os objectos podem fazer So executados sobre os objectos e podem conter ou no argumentos Cells(1,1).Clear Cells(1,1).AddComment comentrio
Eventos
Os eventos so algo que acontece aos objectos Ocorrem em resultado de aces do utilizador, do sistema ou do prprio cdigo possvel associar a execuo de procedimentos ocorrncia de eventos Private Sub BotoOK_Click() Os procedimentos correspondentes aos eventos tm todos a seguinte forma: Private Sub Objecto_Evento(argumentos)
Objectos Range I
Referenciao
Range(A1): referncia clula A1 Range(B2:C3): referncia ao intervalo B2:C3 Range(A1, B2:C3): referncia clula A1 mais o intervalo B2:C3 Cells(1, 2): referncia clula na 1 linha e na 2 coluna (clula B1) Range(B2:C3).Cells(1, 2): referncia clula na 1 linha e na 2 coluna dentro do intervalo B2:C3 (clula C2)
Exemplo
For ano = 1 To 100 Range(A & ano) = 1999 + ano Next For mes = 1 To 12 Cells(1, mes) = mes Next
Objectos Range II
Frmulas
range.Formula: frmulas das clulas do range no idioma standard (ingls) range.FormulaLocal: frmulas das clulas do range no idioma local
Exemplos
Range(A1).Formula = =A2 Range(A9).Formula = =SUM(A1:A8) Range(A9).FormulaLocal = =SOMA(A1:A8) aspas nas frmulas devem ser duplicadas Range(A1).Formula = =COUNTIF(B1:B9, >0) Range(A1).FormulaLocal = =CONTAR.SE(B1:B9; >0) as frmulas actualizam-se tal como quando so arrastadas o exemplo que se segue leva a que B9 =SOMA(B1:B8) Range(A9:B9).FormulaLocal = =SOMA(A1:A8) Ricardo Rocha DCC-FCUP Visual Basic for Applications: # 32
Formulrios e Controlos
Formulrios
Menu <Inserir> seguido da opo <UserForm>
Controlos
Caixa de ferramentas
Objectos Control I
Propriedades comuns
Name: nome que identifica o controlo Left / Top: posio relativa ao canto superior esquerdo do formulrio Height / Width: altura e comprimento do controlo BackColor / ForeColor: cor do fundo e cor do texto do controlo Font: tipo de letra do controlo Caption: texto presente no controlo ControlTipText: texto de ajuda para quando se mantm o foco sobre o controlo TabIndex: ordem de navegao do controlo (utilizando a tecla Tab) TabStop: se False previne a navegao por intermdio da tecla Tab Visible: visibilidade do controlo Enabled: se False previne o controlo de receber o foco e responder a eventos Locked: se True previne o utilizador de editar o valor presente no controlo
Objectos Control II
Command button
CommandButton_Click(): ocorre quando o boto premido
Text box
TextBox_Change(): ocorre quando o contedo da caixa alterado
UserForm
UserForm_Initialize(): ocorre quando o formulrio iniciado
Objectos Control IV
Exemplo
Private Sub UserForm_Initialize() CaixaValor = Range(A1) ListaFunes.AddItem dobro ListaFunes.AddItem triplo End Sub Private Sub ListaFunes_Change() If CaixaValor = Then CaixaResultado = ElseIf ListaFunes.ListIndex = 0 Then CaixaResultado = 2 * CaixaValor ElseIf ListaFunes.ListIndex = 1 Then CaixaResultado = 3 * CaixaValor End If End Sub Private Sub BotoCancelar_Click() Unload UserForm1 End Sub Ricardo Rocha DCC-FCUP fecha o formulrio Visual Basic for Applications: # 38