Programação em Visual Basic for Applications & Excel Ricardo Campos (ricardo.campos@ipt.pt) Ricardo Campos [ h t t p : / / w w w. c c c. i p t. p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
Autoria Bibliografia Autoria Esta apresentação foi desenvolvida por Ricardo Campos, docente da Unidade Departamental de Tecnologias de Informação e Comunicação do Instituto Politécnico de Tomar. Encontra-se disponível na página web do autor [http://www.ccc.ipt.pt/~ricardo], no link Publications - Syllabus, ao abrigo da seguinte licença: Mais detalhes em: http://creativecommons.org/licenses/by-nc/3.0/deed.pt O uso de parte ou da totalidade da apresentação pressupõe a utilização da seguinte referência: Campos, Ricardo. (2014). Apresentação de Programação em Visual Basic for Applications & Excel. 77 slides. A sua disponibilização em formato PPT pode ser feita mediante solicitação (email: ricardo.campos@ipt.pt)
Autoria Bibliografia Bibliografia Recursos: M.J.Sousa Domine a 110% Excel 2010 FCA Editora de Informática A.Carvalho Exercícios Resolvidos com Excel para Economia & Gestão FCA Editora de Informática
Autoria Bibliografia Bibliografia Recursos on-line (tutoriais): A. Silva (2009). Programação em VBA. Texto Introdutório http://www.dei.isep.ipp.pt/~tmatos/aprog_civil_20132014/programming-in-vba-v3.pdf Júlio Battisti http://www.juliobattisti.com.br/cursos/excelavancado/modulo5.asp http://www.juliobattisti.com.br/cursos/excelavancado/modulo6.asp Nota: Não é possível garantir a existência futura dos endereços (URL s), citados nos recursos on-line. Como se sabe, os endereços são virtuais e a sua vida útil depende única e exclusivamente dos seus autores e proprietários.
Visual Basic for Applications Ricardo Campos [ h t t p : / / w w w. c c c. i p t. p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
História Separador Programador História do VBA Editor VBA Linguagem de programação utilizada por aplicações Windows; Objetivo: automatização de tarefas rotineiras; Microsoft lança Office 95 cujas aplicações (Excel, Word, PowerPoint, etc) incluem VBA, adaptação da linguagem de programação Visual Basic (lançada em 1991) ao ambiente das aplicações Office;
História Separador Programador Editor VBA Ativar o Separador Programador Não é necessária nenhuma instalação extra para ter acesso ao VBA. Basta: Activar o separador Programador Ficheiro Opções Personalizar Friso Seleccionar o separador Programador.
História Separador Programador Painel das Propriedades Editor VBA Apresenta as propriedades do projecto seleccionado. Propriedades do objecto (View-Properties)
História Menu Programador Painel de Código Editor VBA Código (View-Code) Área destinada à escrita de código.
História Menu Programador Painel do Projecto Editor VBA Explorador do Projecto (View-Project Explorer) Apresenta uma listagem dos projectos e de todos os itens nele contidos. Cada livro do excel tem um projecto associado (ex: VBAProject(Livro1)
Objectos Ricardo Campos [ h t t p : / / w w w. c c c. i p t. p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
Objectos do Excel Objectos de Interacção Pesquisador de Objectos Objectos Mais Utilizados no Excel Application: objecto que representa o próprio Excel. Exemplo: Application.ActiveWindow.ActiveCell.Font.Name = Helvetica Workbooks: objecto que representa o ficheiro (livro) do Excel. Exemplo(s): Workbooks.Open("Dados.xls"); ThisWorkbook.Close Worksheets: objecto que representa as folhas do Excel. Na hierarquia situase abaixo de Workbook. Exemplo: Worksheets( Livro1").Select Range: utilizado para representar uma ou mais células de uma worksheet. Exemplo: Range( a2 ).Value = 3 Cells: uma outra forma de se referir a uma célula do Excel. Exemplo: Cells(2,2).Value = 6 Mais: http://www.juliobattisti.com.br/cursos/excelavancado/modulo6.asp
Objectos do Excel Hierarquia de Objectos Objectos de Interacção Pesquisador de Objectos Application Workbooks Worksheets Range O objecto Application contém o objecto Workbook; O objecto Workbooks contém o objecto Worksheets; O objecto Worksheets contém o objecto Range.
Objectos do Excel Objectos de Interacção Pesquisador de Objectos Propriedades, Métodos e Eventos Os objectos são caracterizados por: Propriedades; Métodos; Eventos;
Objectos do Excel Objectos de Interacção Propriedades Pesquisador de Objectos Propriedades: características dos objectos (exemplo: cor, a designação, etc). No exemplo abaixo é possível ver as propriedades da Folha1: A sintaxe genérica para nos referirmos a uma propriedade de um objecto é a seguinte: Objecto.Propriedade Exemplo: Worksheets( Folha1).Range( A9 ).Value = 5
Objectos do Excel Objectos de Interacção Métodos Pesquisador de Objectos Métodos: representam procedimentos que executam uma determinada tarefa; A sintaxe genérica para nos referirmos a um método de um objecto é a seguinte: Objecto.Método (argumento 1, argumento 2,.) Exemplo: Range( A9 ).Select
Objectos do Excel Objectos de Interacção Eventos Pesquisador de Objectos Eventos: ocorrências habitualmente despoletadas pelo utilizador (exemplo: a inserção de uma nova folha de cálculo no livro) que implicam a ocorrência de uma resposta automática; Para que um objecto possa reagir a um dado evento deverá existe o event handler (tratador de eventos), que especifica o que fazer caso esse evento ocorra. Sem isso, o objecto detectará esse acontecimento mas não saberá o que fazer. Nenhuma resposta será produzida;
Objectos do Excel Objectos de Interacção MsgBox Pesquisador de Objectos MsgBox: mostra uma mensagem no Excel. Sintaxe: MsgBox (mensagem, características, título) Mensagem: texto a apresentar; Caracteristicas: especifica os diferentes tipos de botões; Título: título a apresentar na MsgBox; MsgBox ( Tem a certeza?, vbyesno + vbquestion, Confirmação ) A MsgBox serve para apresentar uma mensagem ao utilizador, mas também para recolher informação.
Objectos do Excel Objectos de Interacção MsgBox Pesquisador de Objectos Sintaxe: variável = MsgBox (mensagem, características, título) O valor numérico a devolver depende do botão premido pelo utilizador: VbOk 1 VbCancel 2 VbAbort 3 VbRetry 4 VbIgnore 5 VbYes 6 VbNo 7 If MsgBox("Tem a certeza?", vbyesno + vbquestion, "Confirmação") = vbyes Then Selection.ClearContents End If
Objectos do Excel Objectos de Interacção InputBox Pesquisador de Objectos InputBox: permite que o utilizador introduza dados. Sintaxe: variável = InputBox (mensagem, título) nome = InputBox ("Indique o seu nome", "Introdução de nomes")
Objectos do Excel Objectos de Interacção Pesquisador de Objectos Pesquisador de Objectos O pesquisador dos objectos permite ver uma lista dos procedimentos em cada objecto do nosso projecto, seja ele um módulo, um formulário, uma folha, etc. Um duplo clique em cima do procedimento permite ter acesso automático a ele; O acesso ao pesquisador de objectos faz-se através do menu View Object Browser ou em:
Variáveis Ricardo Campos [ h t t p : / / w w w. c c c. i p t. p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
Operadores Diferentes tipos de Operadores Aritméticos +; -; *; / ^ (exponenciação); / (divisão inteira); mod (retorna o resto inteiro de uma operação de divisão) Relacionais = (igual); <> (diferente); > (maior); >= (maior ou igual); < (menor); <= (menor ou igual) Lógicos And; Or; Not Texto & (concatenação) Outros Caracteres (linha de comentários) Variáveis Arrays
Operadores Noção de Variável. Tipos de Dados. Declaração de Variáveis Contêm dados temporários; Embora não seja obrigatório, é uma boa prática declarar variáveis; O tipo de informação a guardar numa variável depende do tipo de dados: Byte (0 a 255); Boolean (True ou False); Integer; Long; Single; Double; Currency; Date; String; Object (serve para suportar qualquer tipo de objecto do excel, i.e., livro, folha, intervalo de células); Variant (tipo de dado default para variáveis não declaradas) As declarações de variáveis são feitas com recurso a Dim: Dim result as long Dim description as string Dim startdate, enddate as date Dim Range_1 as object Variáveis Arrays
Operadores Variáveis Atribuir Valores a Variáveis Arrays <NomeDaVariável> = <Valor> Total = Valor_1 + Valor_2 Resultado = sqrt (Total)
Operadores Variáveis Âmbito das Variáveis Arrays Zona do programa em que a variável é conhecida; Public numero as Integer As variáveis públicas ficam disponíveis para todos os procedimentos, de todos os módulos, em todas as aplicações; Private numero as Integer As variáveis privadas ficam disponíveis para o módulo em que são declaradas; Dim numero as Integer Visível apenas no próprio procedimento;
Operadores Variáveis Constantes Arrays Nome que é dado a um valor numérico ou a uma cadeia de caracteres. Útil no caso de um valor constante ser utilizado múltiplas vezes ao longo do programa Const nome as tipo = expressão Const PI = 3,14159265 O VB tem várias constantes incorporadas precedidas pelas letras xl ou vb
Operadores Variáveis Arrays Tipos de Dados definidos pelo Utilizador Criação de um tipo de dados que representa uma estrutura com dados de diferentes tipos. Esta definição deverá ocorrer no início do módulo; Type DadosPessoais Nome As String Idade As Integer Nasc As Date CC As Long End Type
Operadores Variáveis Arrays Tipos de Dados definidos pelo Utilizador Como utilizar as estruturas de dados? Dim Pessoa As DadosPessoais Pessoa.Nome = InputBox ("Indique o seu nome", Nome") Pessoa.Idade = InputBox ("Indique a sua idade", Idade") Pessoa.Nasc = InputBox ("Indique a sua data de nascimento", Data") Pessoa.CC = InputBox ("Indique o seu número de cartão do cidadão", CC") MsgBox Pessoa.Nome & Chr(13) & "Data de Nascimento: " & Pessoa.Nasc & Chr(13) & CC: " & Pessoa.CC
Operadores Variáveis Noção de Array Arrays Um Array é um tipo especial de variável, que pode armazenar diversos valores numa única variável; Cada valor armazenado no Array é um elemento do conjunto. Exemplo: Podemos criar um Array para armazenar os nomes dos meses do ano. Com isso teríamos um Array de 12 elementos Cada elemento de um Array, é acedido através do nome da variável Array e de um índice.
Operadores Variáveis Declaração de Arrays Arrays Para declarar um Array chamado dias, com 7 elementos, utilizaríamos o seguinte comando: Dim dias(7) As String ou Dim dias(1 to 7) As String De seguida atribuímos os valores para os dias da semana: Dias(1)= "Segunda-feira Dias(2)= "Terça-feira".. Dias(7)= "Domingo"
Operadores Arrays Multi-Dimensionais Variáveis Arrays Um array pode também armazenar dados multidimensionais. Suponha-se a seguinte tabela de vendas: 2012 2013 CDs 200 40 DVDs 300 100 Dim Arr(2,2) As Integer ou Dim Arr(1 to 2, 1 to 2) As Integer arr(1,1) = 200 arr(1,2) = 40 arr(2,1) = 300 arr(2,2) = 100
Operadores Variáveis Arrays de Arrays Arrays É possível criar um array do tipo Variant e preenche-lo com arrays de diferentes tipos: Dim Arr(2) As Variant Arr(1) = ArrA() Arr(2) = ArrB() //declara array com 2 elementos Sendo que ArrA é um array de inteiros: Dim ArrA(5) As Integer Sendo que ArrB é um array de strings: Dim ArrB(5) As String MsgBox Arr(1)(2) MsgBox Arr(2)(2) //Imprime o valor que se encontra na posição 2 de ArrA //Imprime o valor que se encontra na posição 2 de ArrB
Estruturas de Controlo Condicional Ricardo Campos [ h t t p : / / w w w. c c c. i p t. p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
If-Then Select Case If Then As estruturas de controlo repetitivo permitem efectuar testes a condições para, em função do resultado, executar determinadas instruções; Não existe qualquer acção a executar quando a condição é falsa: If condicao Then Instruções End If If faltas > 3 Then MsgBox Perde o bónus End If
If-Then Select Case If Then Else Estrutura baseada no teste de uma condição. Se essa condição for verdadeira desencadeará a execução das Instruções1, se for falsa desencadeará a execução das Instruções2. Análoga à função SE do Excel If condicao Then Instruções1 Else Instruções2 End If If faltas > 3 Then MsgBox Perde o bónus Else MsgBox Ganha o bónus End If
If Then Else (aninhados) Permite a selecção de uma entre várias alternativas. É possível embutir um qualquer números de blocos ElseIf dentro de uma dada estrutura condicional; If condicao1 Then Else Instruções1 If condicao2 Then Instruções2 Else End If End If If-Then Select Case Instruções3
If-Then Select Case Select Case Executa um de vários grupos de expressões consoante o valor de uma expressão. Projectada para evitar os If-Then-Else (aninhados). Select Case expressão Case Condição1.. Instruções 1 Case Condiçãon Instruções n Case else End Select Instruções a executar no caso das anteriores serem falsas
If-Then Select Case Select Case Dim Mult as double Mult = Range( a1 ).Value * Range( b1 ).Value Select Case Mult Case Is < 10 MsgBox Menor que 10 Case Is < 20 MsgBox Menor que 20 Case else MsgBox Maior do que 20 End Select
Estruturas de Controlo Repetitivo Ricardo Campos [ h t t p : / / w w w. c c c. i p t. p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
While For While As estruturas de repetição permitem executar conjuntos de instruções de forma cíclica; Repete um conjunto de instruções enquanto a condição for verdadeira. Se a condição for falsa no primeiro teste, o ciclo não é executado. Do while condicao Loop Instruções Repete um conjunto de instruções enquanto a condição for verdadeira. Como o teste é feito no fim do ciclo, este é executado pelo menos uma vez, mesmo se a condição for falsa. Do Instruções Loop while condicao
While For While Dim Contador as Integer Dim Total as double Contador = 2 Total = 0 Do while Range( a & Contador).Value <> Sul Total = Total + Range( b & Contador).Value Contador = Contador + 1 Loop Range( d2).value = Total
While For For-To-Next Repete um número de instruções um determinado número de vezes. Usada quando sabemos o número de vezes que uma determinada secção de código deve ser repetida. Baseia-se na existência de um contador que incrementa automaticamente o conteúdo da variável contador (variável de controlo do ciclo) cada vez que o ciclo funciona. For contador = inicio to fim Instruções Next contador Por defeito a variável contador produz um incremento de 1. No entanto, é possível utilizar a palavra Step para especificar um incremento diferente. For contador = inicio to fim Step x Instruções Next contador
While For For-To-Next Dim Contador as Integer Dim Total as double Total = 0 For Contador = 2 to 15 Total = Total * Contador Next Contador Range( d2).value = Total
For-Each-In-Next While For Repete um número de instruções um determinado número de vezes. Usada quando não sabemos à partida o número de vezes que uma determinada secção de código deve ser repetida. Baseia-se na existência de uma colecção (Range, Worksheet, Workbook) ou array. Não é possível executar um loop for each em objectos individuais For each ItemNoGrupo in GrupoDeItems Instruções Next ItemNoGrupo
For-Each-In-Next While For Exemplo. Suponha que se pretende ocultar todas as linhas (entre o range C1 e C10) que contenham o valor 0 Sub hide_zero() Dim rng As Range Dim cell As Range Set rng = Range("C1:C10") For Each cell In rng If cell.value = 0 Then cell.entirerow.hidden = True End If Next Variáveis que são objectos (range, etc) são assignados valores através da palavra set Dim declara o nome da variável e o tipo; Set atribui o valor à variável. End Sub
Funções VBA Ricardo Campos [ h t t p : / / w w w. c c c. i p t. p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
Funções de Texto Funções de Data/Hora Funções de Texto Len(string) Determina o tamanho da String que foi passada como parâmetro para a função. Exemplo: MsgBox Len("Este é um exemplo de uso da função Len!!") retorna 41 caracteres; Lcase(string) Converte para minúsculas, a String que foi passada como parâmetro para a função; UCase(string) Converte para MAIÚSCULAS, a String que foi passada como parâmetro para a função
Funções de Texto Funções de Data/Hora Funções de Texto Left(string,n) Retorna um número especificado de caracteres, a partir do início de uma String. Note que espaços também são considerados; Right(string,n) Retorna um número especificado de caracteres, a partir do fim de uma String. Note que espaços também são considerados; Mid(String, posicao_inicio, n) Retorna um número especificado de caracteres, a partir de uma posição especificada, dentro da String. Note que espaços também são considerados; String(n, caracter) Retorna um determinado caractere, um número especificado de vezes. Exemplo: MsgBox String(35,"*")
Funções de Data/Hora Funções de Texto Funções de Data/Hora Date() Retorna a data atual do sistema. Exemplo: MsgBox "Data do Sistema: " & Date() Time() Retorna a hora atual do sistema. Exemplo: MsgBox "Data do Sistema: " & Time() Day(data) Recebe como parâmetro uma data, e retorna um número entre 1 e 31, indicando o dia do mês.; Month(data) Recebe como parâmetro uma data, e retorna um número entre 1 e 12, indicando o mês do ano.
Funções de Data/Hora Funções de Texto Funções de Data/Hora Now() Retorna a hora e a data atual do sistema. Exemplo: MsgBox "Data e Hora do Sistema: " & Now() MonthName() Recebe como parâmetro um número, indicativo do mês do ano (1 - Janeiro, 2 - Fevereiro, e assim por diante). Exemplo: MsgBox "Mês do ano: " & MonthName(Month(Date)) DateDiff(intervalo, data1, data2) Determina o número de intervalos (em dias, trimestres, semestres, anos, etc), entre duas datas. O parâmetro intervalo é uma String que diz que tipo de intervalo vamos calcular yyyy (anos); q (trimestres); m (meses); d (dias); w (semanas); h (horas); n (minutos); s (segundos). Exemplo: DateDiff("m","22/04/1500","31/12/1999")
Funções de Data/Hora Funções de Texto Funções de Data/Hora DateAdd(intervalo, número de intervalos, data) Esta função pode ser utilizada para determinar uma data futura, tendo por base uma data fornecida, o tipo de período a ser acrescentado (dias, meses, anos, etc), e o número de períodos a serem acrescentados. Exemplo: DateAdd("m",1000,"22/04/1500") //mil mêses após 22/04/1500 Year(data) Recebe como parâmetro uma data, e retorna o ano. Exemplo: MsgBox "Ano atual: " & Year(Date( ))
Programando em VBA Ricardo Campos [ h t t p : / / w w w. c c c. i p t. p t / ~ r i c a r d o ] Programação em Visual Basic for Applications & Excel
Procedimentos Sub-Rotinas (Macros) Tipos de Procedimentos Funções Um programa é um conjunto de instruções com vista a realizar um determinado conjunto de tarefas: No VBA os programas são chamados de procedimentos. Cada módulo pode conter diversos procedimentos; Existem dois tipos de procedimentos: Sub-rotinas (macros); Funções;
Procedimentos Sub-Rotinas (Macros) O que são macros? Funções Programa escrito em VBA que inclui instruções sobre como executar determinada tarefa. Útil quando uma série de acções repetidas é utilizada frequentemente; As macros ou sub-rotinas não recebem parâmetros do exterior; O corpo da rotina é composto por um conjunto de instruções que devem estar localizadas em linhas diferentes; Sub nomerotina() End Sub instruções Sub ola() End Sub MsgBox Olá
Procedimentos Sub-Rotinas (Macros) Funções Segurança Ativação de Macros Habilitar as macros; Ficheiro Opções Centro de Fidedignidade Definições do Centro;
Procedimentos Sub-Rotinas (Macros) Funções Livros com Permissão para Macros Uma vez escrita a macro, é necessário guardar o livro de excel com o tipo: Se não o fizermos vamos obter a seguinte mensagem:
Procedimentos Gravador de Macros Sub-Rotinas (Macros) Programando em VBA Funções Formas de Criar uma sub-rotina (macro) Existem duas formas de criar uma sub-rotina (macro): Com recurso ao gravador de macros; Programando em VBA;
Procedimentos Sub-Rotinas (Macros) Funções Como Gravar uma Macro? Gravador de Macros Programando em VBA Programador Gravar Macro; Ver Macros Gravar Macro;
Procedimentos Sub-Rotinas (Macros) Funções Onde Guardar a Macro? Gravador de Macros Programando em VBA Se pretende que a macro fique sempre disponível deve seleccionar a opção guardar macro em novo livro pessoal de macros. As instruções serão gravadas numa pasta oculta chamada Pessoal.xls Clique em OK. Efectue as acções de gravação. Clique em Terminar Gravação
Testar a Macro Procedimentos Sub-Rotinas (Macros) Funções Gravador de Macros Programando em VBA Para testar a macro: Ver Macros Ver Macros - Executar;
Procedimentos Gravador de Macros Sub-Rotinas (Macros) Programando em VBA Funções Criar um Módulo. Inserir Procedimento. É possível criar uma macro a partir do zero sem utilizar o gravador de macros; Programador Visual Basic Para iniciar a programação é necessário primeiro criar um módulo (elemento que contém o código VBA): De seguida é necessário inserir um procedimento: Insert - Procedure
Procedimentos Sub-Rotinas (Macros) Funções Âmbito do Procedimento Gravador de Macros Programando em VBA Public significa que a função ficará disponível para todos os livros do Excel; Private significa que a função ficará disponível apenas para o livro aberto;
Procedimentos Sub-Rotinas (Macros) Funções Exemplos de Sub-Rotinas Gravador de Macros Programando em VBA Exemplo 1: Crie uma macro que proceda à soma dos valores 34 e 66 introduzidos nas células A1 e A2; sub First() Range("A1").Value = 34 Range("A2").Value = 66 Range("A3").Formula = "=A1+A2" Range("A1").Select End Sub Para testar a macro: Run - Run;
Procedimentos Sub-Rotinas (Macros) Funções Exemplos de Sub-Rotinas Gravador de Macros Programando em VBA Exemplo 2: Com recurso ao gravador de macros, crie uma macro ( Limpar ) que permita apagar o conteúdo de qualquer célula. Posteriormente edite a macro de forma a introduzir uma MsgBox que obrigue o utilizador a confirmar a acção Sub Limpar() If MsgBox("Tem a certeza?", vbyesno + vbquestion, "Confirmação") = vbyes Then Selection.ClearContents End If End Sub
Procedimentos Sub-Rotinas (Macros) Funções Exemplos de Sub-Rotinas Gravador de Macros Programando em VBA Exemplo 3: Pretende-se criar uma macro Soma que solicite ao utilizador a introdução de dois valores (X e Y), procedendo posteriormente à sua soma e à apresentação dos resultados através de uma MsgBox; Sub Soma() Dim x As Integer Dim Y As Integer Dim Soma As Integer x = InputBox("Introduza X", "Introdução de Dados") Y = InputBox("Introduza Y", "Introdução de Dados") Soma = x + Y MsgBox "Soma de " & x & "+" & Y & "=" & Soma End Sub
Procedimentos Sub-Rotinas (Macros) Funções Exemplos de Sub-Rotinas Gravador de Macros Programando em VBA Exemplo 4: Pretende-se criar uma macro com o nome Celula que possibilite a introdução de um texto numa célula à escolha do utilizador; Sub Celula() Dim Cell As String Dim Texto As String Cell = InputBox("Especifique a Célula", "Introdução de Dados") Texto = InputBox("Introduza o Texto", "Introdução de Dados") ActiveSheet.Range(Cell) = Texto End Sub
Protecção de Macros Procedimentos Sub-Rotinas (Macros) Funções Gravador de Macros Programando em VBA É possível evtar o acesso ao código introduzido: Tools VBAProject Properties;
Procedimentos Gravador de Macros Sub-Rotinas (Macros) Programando em VBA Funções Associar Macros à Barra de Inicialização Rápida
Procedimentos Sub-Rotinas (Macros) Funções Associar Macros a um Botão Gravador de Macros Programando em VBA Programador Inserir Botão Atribuir Macro
Procedimentos Sub-Rotinas (Macros) Noção de Função Funções Conjunto de declarações que retornam um valor; Exemplos de funções no Excel são a soma(), etc; A função é identificada pelo nome, pelo número e pelo tipo de parâmetros recebidos, e tem como objectivo executar um conjunto de instruções e produzir um valor final. Function nomefunção (parametro1, parametro2) End Function nomefunção = valor A função pode ser chamada noutra parte do código das três seguintes formas: Variavel = nomefunção (a, b) //Se a função retorna um valor Call nomefunção (a,b) nomefunção a, b //pode-se chamar uma função ou macro com Call //se Call não for utilizada os parêntesis não são usados
Procedimentos Sub-Rotinas (Macros) Funções Funções vs Sub-rotinas (macros) Funções começam com a palavra Function e terminam com a palavra End Function. Sub-rotinas começam com a palavra Sub e terminam com a palavra End Sub; As funções retornam uma valor. As sub-rotinas não; As funções têm uma variável com o mesmo nome da função para retornar o valor. As sub-rotinas não; As funções podem ser usadas em células de fórmulas no Excel. As sub-rotinas não; As sub-rotinas podem ser atribuídas a menus, a botões, etc. As funções não. Ambas podem obter propriedades de informações de qualquer objecto, tais como valores de células da folha de cálculo.
Procedimentos Sub-Rotinas (Macros) Criar uma Função Funções Processo idêntico ao da criação de uma sub-rotina; Insert - Module; Insert - Function;
Procedimentos Sub-Rotinas (Macros) Criar uma Função Funções Function Saldo (Receitas As Double, Despesas As Double) End Function Saldo = Receitas - Despesas As funções criadas são adicionadas no Excel à categoria de funções Definidas pelo utilizador ;
Procedimentos Sub-Rotinas (Macros) Passagem de Parâmetros Funções A passagem de parâmetros para uma função pode ser feita de duas formas: ByVal: indica que o parâmetro é passado por valor. Isto significa que a função utiliza uma cópia interna dos parâmetros ByRef: indica que o parâmetro é passado por referência. Este tipo de passagem de parâmetros é muito útil no caso de pretendermos que a função devolva mais do que um resultado a = 100 b = 400 Imprime valores a e b Mult a, b //Chama o procedimento Imprime valores a e b Mult (ByRef x as Integer, ByVal y as Integer) x = x * 1.1 Y = y * 1.1
Procedimentos Sub-Rotinas (Macros) Exemplos de Funções Funções Exemplo 1: Defina uma função (PDesconto) que calcule o preço de um produto após a aplicação de uma taxa de desconto Function PDesconto(Valor As Double, Taxa As Single) As Double PDesconto = Valor - Valor * Taxa End Function
Procedimentos Sub-Rotinas (Macros) Debug de Funções Funções View Immediate Window Utilize o código? NomeDaFuncao (arg 1, arg 2, ) no painel imediato para devolver o resultado da função. Utilize o breakpoint para suspender a execução de um código. Dê um clique na linha de código onde quer proceder à suspensão. De seguida escreva novamente no painel imediato o seguinte código:? NomeDaFuncao (arg 1, arg 2, ) Utilize a instrução Debug.print NomeDaVariável (no próprio código) para ver os resultados de uma expressão na janela de depuração. Escreva novamente no painel imediato o seguinte código:? NomeDaFuncao (arg 1, arg 2, )