Visual Basic for Applications - dcc.fc.up.ptricroc/aulas/0203/sap/pdf/vba_excel.pdf · Visual Basic...

22
Visual Basic for Applications: # 1 Visual Basic for Applications Introdução É uma linguagem de programação baseada na conhecida linguagem BASIC Está concebida para funcionar em conjunto com diferentes aplicações, de forma a potenciar a robustez das mesmas Enquadra-se nos ambientes de programação baseados no processamento de sequência de eventos (event-driven programming) História Foi inicialmente integrada com o Excel 5 em 1994 e a partir daí a sua expansão para outras aplicações foi gradual Foi com a saída do Office 97 em 1997 que a Microsoft concretizou um dos seus grandes objectivos: ter um ambiente de programação completamente integrado entre os seus quatro famosos produtos: Word, Excel, Access e PowerPoint Actualmente, o VBA é já por si só um produto independente, que outras companhias podem adoptar e incorporar nas suas aplicações

Transcript of Visual Basic for Applications - dcc.fc.up.ptricroc/aulas/0203/sap/pdf/vba_excel.pdf · Visual Basic...

Visual Basic for Applications: # 1

Visual Basic for Applications

IntroduçãoÉ uma linguagem de programação baseada na conhecida linguagem BASICEstá concebida para funcionar em conjunto com diferentes aplicações, de forma a potenciar a robustez das mesmasEnquadra-se nos ambientes de programação baseados no processamento de sequência de eventos (event-driven programming)

HistóriaFoi inicialmente integrada com o Excel 5 em 1994 e a partir daí a sua expansão para outras aplicações foi gradualFoi com a saída do Office 97 em 1997 que a Microsoft concretizou um dos seus grandes objectivos: ter um ambiente de programação completamente integrado entre os seus quatro famosos produtos: Word, Excel, Access e PowerPointActualmente, o VBA é já por si só um produto independente, que outras companhias podem adoptar e incorporar nas suas aplicações

Visual Basic for Applications: # 2

Variáveis IDeclaração explícita de variáveis

Declarar uma variável VAR: Dim VARDeclarar uma variável VAR como sendo do tipo TYPE: Dim VAR As TYPE

Declaração implícita de variáveisPossibilidade de não declarar variáveisVariáveis não declaradas ou sem declaração de tipo têm por defeito o tipo VariantNão permitir o uso de variáveis implícitas: Option Explicit

Visibilidade e longevidade de uma variávelPublic: visível em todos os módulos e durante toda a execuçãoPrivate ou Dim: visível dentro do seu módulo e durante toda a execuçãoDim: visível dentro do seu procedimento e durante a sua execuçãoStatic: visível dentro do seu procedimento e durante toda a execução

ConstantesSystem-defined constants: True; False; Null; Empty; NothingIntrinsic constants (bibliotecas do VBA): Const LEFT_BUTTON = 1Symbolic constants: Const PI = 3,14

Visual Basic for Applications: # 3

Variáveis IITipo de variáveis

Variant tipo genéricoByte 0 até 255Boolean True ou FalseInteger -32.768 até 32.767Long -2.147.483.648 até 2.147.483.647Single -3,402823E38 até -1,401298E-45 (para valores negativos)

1,401298E-45 até 3,402823E38 (para valores positivos)Double -1,79769313486232E308 até -4,94065645841247E-324 (negativos)

4,94065645841247E-324 até 1,79769313486232E308 (positivos)Currency -922.337.203.685.477,5808 até 922.337.203.685.477,5807Decimal +/-79.228.162.514.264.337.593.543.950.335 (sem casas decimais)

+/-7,9228162514264337593543950335 (com casas decimais)Date 1 de Janeiro de 100 até 31 de Dezembro de 9999String 1 até aproximadamente 2 biliões de caracteres (65.400 se tamanho fixo)Type definido pelo utilizadorObject referência a objectos

Visual Basic for Applications: # 4

Operadores I

Aritméticos+ (adição) - (subtracção e negação) * (multiplicação)/ (divisão) \ (divisão inteira) ^ (exponenciação)Mod (resto da divisão)

Relacionais= (igual a) > (maior que) < (menor que)<> (diferente de) >= (maior ou igual) <= (menor ou igual)Like (padrões de texto) Is (referência de objectos)

LógicosAnd (e lógico) Or (ou lógico) Not (negação)Imp (implicação) Xor (ou exclusivo) Eqv (equivalência)

Texto& (concatenação)

Visual Basic for Applications: # 5

Operadores IIPrecedências

Operador Operação

^ exponenciação- negação* , / multiplicação e divisão\ divisão inteiraMod resto da divisão+ , - adição e subtracção& concatenação= , > , < , <> , >= , <= , Like , Is comparaçãoAnd , Or , Not , Imp , Xor , Eqv lógica

Outros caracteresRem ou ’ comentários: múltiplas instruções na mesma linha_ uma instrução em múltiplas linhas

Visual Basic for Applications: # 6

ProcedimentosProcedimentos Sub

[Public | Private] [Static] Sub nome ( [argumentos] ) [...][Exit Sub][...]

End Sub

Procedimentos Function[Public | Private] [Static] Function nome ( [argumentos] ) [As tipo]

[...][nome = expressão][Exit Function] [...][nome = expressão]

End Function

Visual Basic for Applications: # 7

ArgumentosDeclarar argumentos

[Optional] [ByRef | ByVal] [ParamArray] argumento[( )] [As tipo] [=valor_por_defeito]

Passar e nomear argumentosExemplo: Function area (comp As Integer, alt As Integer) As IntegerPassar argumentos: var = area(5, 4)Nomear argumentos: var = area (alt:= 4, comp:= 5)

Opções de declaraçãoByRef: declara que o argumento é passado por referência (o procedimento recebe o próprio endereço da variável passada como argumento)ByVal: declara que o argumento é passado por valor (o procedimento apenas recebe o valor da variável passada como argumento)Optional: declara que o argumento não é obrigatório (esta declaração implica que os restantes argumentos sejam igualmente declarados como Optional)ParamArray: declara um número arbitrário de argumentos não obrigatórios (esta declaração só pode ser utilizada como último argumento na lista de argumentos)

Visual Basic for Applications: # 8

ArraysDeclarar arrays

Dim nome (limite_superior) As tipoDim nome (limite_inferior To limite_superior) As tipoOption Base 1

Preencher arraysAtribuição directa por elementoFunção Array

Arrays com mais do que uma dimensãoDim nome (limite_superior_1, ... , limite_superior_n) As tipo

Arrays dinâmicosReDim: redefine os limites de um dado arrayRedim Preserve: redefine os limites de um dado array e preserva os valores nele existentes (é aplicável apenas quando se redefine a última dimensão do array)LBound: devolve o limite inferior de um dado arrayUBound: devolve o limite superior de um dado array

Visual Basic for Applications: # 9

Estruturas de DecisãoExecução condicionalIf condição_1 Then

[...]...[ElseIf condição_n Then

[...]][Else

[...]]End If

Múltiplos testesSelect Case expressão_a_testar

Case lista_de_expressões_1[...]

...[Case lista_de_expressões_n

[...]][Case Else

[...]]End Select

MacrosIIf (condição, valor_se_verdade, valor_se_falso)

Switch (condição_1, valor_1, … , condição_n, valor_n)

Choose (índice, valor_1, … , valor_n)

Visual Basic for Applications: # 10

Código em CicloCiclos condicionais

Do {While | Until} condição[...][Exit Do][...]

Loop

Do[...][Exit Do][...]

Loop {While | Until} condição

Ciclos numeráveisFor contador = início To fim [Step incremento]

[...][Exit For][...]

Next [contador]

For Each elemento In colecção[...][Exit For][...]

Next [elemento]

Visual Basic for Applications: # 11

Funções Básicas IConversão de dados

CBool (expressão) CByte (expressão)CCur (expressão) CDate (expressão)CDbl (expressão) CInt (expressão)CLng (expressão) CSng (expressão)CVar (expressão) CStr (expressão)

Testes sobre os dadosIsArray (variável) IsDate (expressão)IsEmpty (variável) IsNumeric (expressão)IsNull (variável) IsMissing (argumento)TypeName (variável) VarType (variável)

Caixas de mensagemMsgBox (mensagem [, …]) InputBox (mensagem [, …])

Visual Basic for Applications: # 12

Funções Básicas IIManipulação de strings

Asc (string) Chr (código)LCase (string) Len (string | variável)Mid (string, início [, comprimento]) Left (string, comprimento)Trim (string) LTrim (string)Str (número) Val (string)InStr ([início,] string_geral, string_procura) StrComp (string1, string2 [, método])

Manipulação de datas e horasDate Year (data)Time Month (data)Now Day (data)DateSerial (ano, mês, dia) Hour (hora)TimeSerial (hora, minuto, segundo) Minute (hora)Weekday (data) Second (hora)

Visual Basic for Applications: # 13

VBA e Excel IMacros

Menu <Ferramentas> seguido da opção <Macro>Gravar macros: botões <Terminar gravação> e <Referência relativa>Executar e editar macros

Visual Basic for Applications: # 14

VBA e Excel IIFormulários

Menu <Ver> seguido das opções <Barras de ferramentas>e <Formulários>Ligar células aos controlos: menu <Formatar> seguido daopção <Controlo...> e doseparador <Controlo>Atribuir macros aos controlos:Menu específico sobre o controlo seguido da opção<Atribuir macro...>

Visual Basic for Applications: # 15

VBA e Excel IIIEditor do Visual Basic

ProjectoPropriedadesCódigo

Visual Basic for Applications: # 16

Código VBA e Funções do ExcelCódigo VBA como função do Excel

Funções do Excel como código VBA

Visual Basic for Applications: # 17

Objectos IConceito

Qualquer coisa que numa aplicação se pode ver e manipular de algum modo

Formas de manipular um objectoAlterar o seu conjunto de propriedadesActivar métodos específicos do objecto para executar determinadas tarefasAssociar procedimentos aos eventos que podem ocorrer sobre o objecto

PropriedadesAs propriedades são os atributos que definem as características dos objectos

ActiveCell.Formula = "=A1*10"Certas propriedades são elas mesmas objectos

ActiveCell.Font.Italic = TrueExistem propriedades que são só de leitura

col = ActiveCell.Column

Visual Basic for Applications: # 18

Objectos IIMétodos

Os métodos são acções que descrevem o que os objectos podem fazerSão executados sobre os objectos e podem conter ou não argumentos

ActiveCell.ClearActiveCell.AddComment "comentário"

EventosOs eventos são algo que acontece aos objectosOcorrem como resultado de acções do utilizador, do sistema ou do próprio código

Private Sub Worksheet_Activate()

Classes e instânciasClasse de objectos: conjunto de objectos com as mesmas propriedades, com os mesmos métodos e que respondem aos mesmos eventosInstância: todo o objecto particular de uma classe

Visual Basic for Applications: # 19

Objectos IIIHierarquia de objectos

Application: objecto de topo da hierarquia de objectosCaminhos hierárquicos

Application.Workbooks(“Livro1”).Worksheets(“Folha1”)Caminhos únicos podem ser abreviados

Worksheets(“Folha1”)ActiveCell

Collection: tipo de objecto que resulta da colecção de outros objectos Variáveis como objectos

Tipo de dados ObjectA instrução SetA constante NothingO operador IsA variável Me

Múltiplas acções sobre um objectoWith objecto[...]End With

Visual Basic for Applications: # 20

Objectos WorkbookReferenciação

[Application.]Workbooks(“Livro1”) [Application.]Workbooks(1)[Application.]ActiveWorkbook [Application.]ThisWorkbook

Workbooks Collection[Application.]Workbooks.Add [Application.]Workbooks.Open(FileName)[Application.]Workbooks.Close [Application.]Workbooks.Count

Propriedadesworkbook.Name workbook.Pathworkbook.FullName workbook.Saved

Métodosworkbook.Activate workbook.Saveworkbook.Close(SaveChanges, FileName) workbook.SaveAs(FileName) workbook.Protect(Password, Structure, Windows) workbook.Unprotect(Password)

EventosPrivate Sub Workbook_Activate()Private Sub Workbook_Open()Private Sub Workbook_Newsheet(ByVal Sh As Object)

Visual Basic for Applications: # 21

Objectos WorksheetReferenciação

Sheets = Worksheets + Charts[ActiveWorkbook.]Worksheets(“Folha1”) [ActiveWorkbook.]Worksheets(1)[ActiveWorkbook.]ActiveSheet

Worksheets Collection[ActiveWorkbook.]Worksheets.Add(Before, After, Count)[ActiveWorkbook.]Worksheets.Count

Propriedadesworksheet.Name worksheet.Visible

Métodosworksheet.Activate worksheet.Copy(Before, After)worksheet.Delete worksheet.Move(Before, After)worksheet.Protect(Passwd, DrawingObjs, Contents) worksheet.Calculate

EventosPrivate Sub Worksheet_Calculate()Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Visual Basic for Applications: # 22

Objectos RangeReferenciação

[ActiveSheet.]Range(“B2:C3”) [ActiveSheet.]Range(“A1, B2:C3”)[ActiveSheet.]Range(“Lucro”) [ActiveSheet.]Range(“B2”, “C3”)[ActiveSheet.]Cells(1, 2) [ActiveSheet.]Range(“B2:C3”).Cells(1, 2)

Propriedadesrange.Row range.Columnrange.Rows(Index) range.Columns(Index)range.Offset(RowOffset, ColumnOffset) range.Valuerange.Formula range.FormulaLocalrange.FormulaR1C1 range.FormulaR1C1Localrange.Address(RowAbsolute, ColumnAbsolute) range.Count

Métodosrange.Select range.Calculaterange.Copy(Destination) range.Cut(Destination)range.Clear range.ClearCommentsrange.ClearContents range.ClearFormatsrange.FillDown range.FillUprange.FillLeft range.FillRight