37
VBA Visual Basic for Applications APROG - Civil

Visual Basic for Applicationsasilva/page14/page16/assets... · 2009. 10. 9. · Para facilitar o acesso às facilidades de gravação e edição de macros, será conveniente tornar

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • VBAVisual Basic for Applications

    APROG - Civil

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Introdução

    VBA é uma linguagem de programação que permite acrescentar capacidades adicionais a aplicações como o Excel ou o Word.

    • Permite automatizar a realização de tarefas rotineiras.

    • Trata-se duma adaptação da linguagem genérica de programação Visual Basic para poder ser utilizada no ambiente específico destas aplicações.

    • Pressupõe-se alguns conhecimentos prévios quer de Visual Basic quer de Excel

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Conceitos Básicos

    MACROS

    •Um macro é um conjunto de instruções (escritas em VBA) que dizem a um programa como o Excel o que fazer para atingir um determinado objectivo.

    •A cada acção ou comando da aplicação corresponderá uma instrução específica do macro.

    •Esse conjunto de instruções pode ser activado mediante uma determinada combinação de teclas ou através dum menu.

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como construir um Macro

    ● Método 1 (“Pelo exemplo”)• Mostrar aquilo que queremos que seja realizado• Modo de gravação invocado em Excel usando o

    Menu “Tools/Macros/Record Macro”● Método 2

    • Um Macro é um programa escrito em VBA• Ambiente de Desenvolvimento Integrado (IDE)

    ● Método misto• Gravação do Macro base usando o método 1• Posterior adaptação e melhoria usando

    directamente o VBA

  • Se se investigar, no entanto, o conteúdo desse macro, verificar-se-á que ele é compostopor instruções escritas precisamente em VBA. Assim sendo, é fácil de intuir que a formaalternativa de construir um macro será precisamente alinhar essas instruções num editorde texto apropriado. É essa a forma de criar um macro quando o seu âmbito é algo nãotrivial.

    2.3 Gravação de um MacroQuando uma dada operação envolvendo uma série de acções deva ser utilizada frequen-temente faz sentido tentar automatizar a sua execução.

    Para gravar um macro que seja capaz de efectuar essas acções, haverá que invocar omodo de gravação de macros, mediante o Menu "Tools/Macros/Record a New Macro"(emExcel), o que fará aparecer a janela descrita da Figura 1. Nela se pode especificar o nomedo macro, a localização em que será armazenado, uma descrição das suas funções e aindaa combinação de teclas (Shortcut key) que será utilizada para arrancar com o macro, umavez este construído.

    Figura 1: Janela de invocação do ambiente de Gravação de Macros

    Após se premir a tecla OK, aparecerá uma pequena janela que permitirá controlaro processo de gravação e dever-se-á dar início à execução das acções que o macro vaisubstituir. Quando se tiver executado a última acção a incluir no macro, basta dar aindicação de que a gravação terminou.

    Uma vez tal realizado, esse macro passará a estar disponível mediante a invoca-ção da combinação de teclas especificada anteriormente (no caso da Figura 1, seriaCtrl+Shft+M) e executará, de forma automática, exactamente a mesma sequência deacções que tínhamos realizado manualmente.

    Em alternativa, mediante a combinação de teclas ALT-F8, pode ser accionada a janelade Gestão de Macros (Figura 2 na página seguinte), onde, entre outras acções, pode serescolhido o macro a ser executado.

    6

    VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como construir um Macro

    Gravação de um MacroMenu Tools/Macros/Record Macro

    Menu Tools/Macros/Stop Recording

    Sequência de OperaçõesMenu Format/CellsSeleccionar Number

    Seleccionar CurrencyOK

    Menu Format/CellsSeleccionar FontSeleccionar Bold

    OK

    Combinação de teclas associada

  • Figura 2: Janela de Gestão de Macros

    2.4 A escrita de um MacroEnsinar pelo exemplo ao Excel como fazer as coisas é um método expedito de construirum macro, mas tem as suas limitações. Já que um macro não é mais que um programaescrito em VBA, porque não tratá-lo como tal e aceder a seu código, alterando-o de formaa melhorar a sua eficiência ou a corrigir problemas. E já agora, porque não criá-los deraiz, aproveitando todo o poder duma linguagem como o VBA?

    2.5 O editor de VBAPara facilitar o acesso às facilidades de gravação e edição de macros, será convenientetornar visível de forma permanente a barra de ferramentas de Visual Basic (Figura 3).No Excel, isto poderá fazer-se mediante a opção de Menu "View/Toolbars/Visual Basic".

    Figura 3: Barra de Ferramentas de Visual Basic

    Para aceder ao editor especializado de Visual Basic (Figura 4 na página seguinte),que se encontra integrado no próprio Excel, basta utilizar o icone adequado na barrade ferramentas ou usar directamente a combinação de teclas ALT-F11. Tornando apremir esta combinação de teclas, voltaremos à nossa folha de cálculo. A este editorespecializado é também dado o nome de Integrated Development Environment (IDE) ou

    7

    VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como usar um Macro

    1. Usando a combinação de teclas

    2. Acedendo à janela de gestão de macros mediante ALT-F8• Seleccionar o macro• Fazer duplo click ou Run

    Um Macro pode ser invocado:

  • Figura 4: Editor integrado do Visual Basic

    Ambiente de Desenvolvimento Integrado e é semelhante à aplicação autónoma usada parao desenvolvimento de programas em Visual Basic.

    Do lado esquerdo na Figura 4 podem-se ver duas janelas, a primeira das quais édesignada por Explorador de Projectos e que serve para mostrar o conteúdo do projectoVBA actual. Um projecto em VBA inclui um ficheiro duma aplicação Office (como, porexemplo, uma folha de cálculo do Excel) e todos os ficheiros VBA associados, incluindoos próprios macros e eventuais user forms (janelas de interface próprias utilizadas pelosmacros1).

    Para poder começar a escrever macros usando o VBA é necessário criar um móduloque o possa albergar, o que é conseguido usando a opção de menu "Insert/Module". Comoconsequência, para além do novo módulo aparecer referido na janela do Explorador deProjectos, será criada uma janela nova onde será possível escrever o código que constitui osnovos macros. Se já existir algum módulo criado, bastará seleccionar o módulo pretendidono explorador de projectos, posicionar o cursor na janela correspondente a esse módulonuma área fora de qualquer macro e seleccionar a opção de menu "Insert/Procedure".Aparecerá uma janela própria (Figura 5 na página seguinte) onde será possível dar o nomeao novo procedimento (o conjunto de instruções que constituirá o macro), especificar o

    1Sobre o assunto, ver Secção 6.

    8

    VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como construir um Macro

    A escrita de um Macro

    Ambiente de Desenvolvimento Integrado do VBA

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como construir um Macro

    Menu Insert/Procedure

    A escrita de um Macro

    Figura 5: Criação de novo Módulo

    tipo de macro que vai ser construído (função ou sub-rotina2) e qual o âmbito da suautilização (pública ou privada, ou seja, limitada ao ficheiro actual).

    2.6 Criação de um MacroEstá na hora de construir o primeiro macro em VBA. Suponhamos que se pretende ummacro que verifique se o valor presente numa determinada célula é superior a um dadolimite e que, caso seja, disso notifique o utilizador. A sub-rotina em que esse macro deveráassentar poderá ter o seguinte conteúdo:

    Public Sub v e r i f i c aVa l o r ( )I f Ce l l s (2 , 2) > 100 Then

    MsgBox "Valor␣maximo␣ excedido ! "End I f

    End Sub

    Neste código podemos observar que a sub-rotina verificaValor utiliza uma estruturade controle condicional (If...Then) para verificar o conteúdo da célula B2 (que se encontrana 2a linha e 2a coluna da folha de cálculo). Caso esse conteúdo ultrapasse o valor limitede 100, será afixada uma janela com a mensagem de alarme adequada. Sempre que fornecessário fazer esta verificação, bastará invocar a combinação de teclas que tenha sidoassociada a este macro.

    Esta verificação poderia ter sido realizada colocando numa célula uma fórmula con-tendo a função do Excel IF. Mas suponhamos agora que se pretende algo mais complicado,por exemplo, fazer essa verificação numa gama de células e apenas desencadear o alarme,caso mais do que duas dessas células ultrapassem o limite estabelecido. A sub-rotinamodificada poderia ser algo como:

    2A distinção entre funções e sub-rotinas, que estará já clara para quem possua os conhecimentosbásicos de Visual Basic, será tratada mais à frente.

    9

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como construir um Macro

    A escrita de um MacroMacro capaz de monitorizar o valor presente na célula B2 e notificar o utilizador caso ultrapasse o valor 100.

    Objecto Cells(2,2) refere-se à célula B2 (2ªlinha/2ªcoluna)

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como construir um MacroAdaptação do macro anterior para estender a verificação a uma gama de células e para que desencadeie o alarme apenas quando mais que 2 células ultrapassem o limite.

    i vai conter o nº de linha

    contador

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Tipos de Macros

    ● Funções• utilizada em fórmulas• devolve um resultado

    ● Sub-rotinas• executam tarefas• não podem ser utilizadas em fórmulas• invocadas mediante combinação de teclas própria ou através de ALT-F8

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Exemplo de Função

    Função que calcula a margem de lucro dum produto a partir do preço de venda e do custo

    Sua utilização numa fórmula:

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Objectos

    ● Exemplos de Objectos• Documento• Folha de cálculo• Gama de células• Célula

    ● Formas de interacção com Objectos• Mudar as suas propriedades• Aplicar-lhe métodos• Especificar sub-rotina que seja executada sempre

    que um evento ocorra nessa objecto

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Propriedades, Métodos e Eventos

    Propriedades de um objecto são as suas características físicas (tipo de letra ou dimensões (por ex.)

    Métodos traduzem acções que podem ser realizadas sobre os objectos

    Eventos são acções que, exercidas sobre os objectos, implicam a possibilidade de ocorrer uma resposta automática do objecto (controlada por um event handler)

    Exemplos: tipo de letra ou dimensões

    Exemplo: Método Save aplicado ao objecto ActiveDocument

    Exemplo: Abertura duma folha dum livro de trabalho

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    VBA - Estruturas de Controlo

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Estrutura For...Each...Next

    Sintaxe

    Exemplo de utilização

    Uma Colecção é um conjunto de objectos idênticos, pertencentes à mesma classe, referenciáveis por um índice.

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como aceder às funções Excel?

    •Para além das funções próprias do VBA, é possível aceder às funções standard do Excel

    •Usa-se a propriedade WorksheetFunction do objecto Application

    Exemplo:Para num macro calcular o valor médio de uma gama de células (identificada pelo nome "Dados") poderia ser usada a seguinte instrução:

  • Para especificar o livro de trabalho com que se quer trabalhar pode-se proceder de três formas diferentes: • Usando o objecto Workbooks que representa o

    conjunto dos ficheiros Excel abertos naquele momento ( Workbooks(Nome) );

    • Usando o objecto ActiveWorkbook que representa o ficheiro com que se está de momento a trabalhar;

    • Usando o objecto ThisWorkbook que representa o ficheiro em que o próprio programa em VBA (e não o utilizador) está a operar no momento.

    VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Trabalhar com objectos Workbook

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Trabalhar com objectos Workbook

    Para abrir um Livro de Trabalho aplica-se o método Open ao objecto Workbooks:

    Os métodos Save e Close são utilizados de forma similar para salvaguardar o conteúdo dum ficheiro e para o fechar, respectivamente.

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Trabalhar com objectos WorksheetPara escolher a folha de cálculo com que se quer trabalhar usa-se o objecto Worksheets, especificando um índice ou o nome da folha.Exemplos:

    Propriedades da classe Worksheet:•Worksheet.Name

    •Worksheet.StandardWidth

  • Worksheet.Activate - activa a folha de cálculo especificada:

    Worksheet.Copy - copia a folha de cálculo especificada para outra posição dentro do livro de trabalho.

    VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Trabalhar com objectos WorksheetMétodos da classe Worksheet:

    Worksheet.Delete - permite eliminar a folha de cálculo especificada.

  • • Um objecto do tipo Range pode ser uma simples célula, um conjunto de células, uma linha ou uma coluna.

    • Para nos referirmos a uma célula ou gama de células usando o método Range usamos uma de duas sintaxes possíveis:

    VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Trabalhar com objectos Range

    Propriedade Value permite conhecer ou modi f i car o valor de Range

  • Objecto pode ser um objecto Worksheet ou Range. Linha e Coluna são valores numéricos indicando qual a linha e qual a coluna na intersecção das quais a célula se encontra.

    VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Trabalhar com objectos Range

    Para se identificar uma gama apenas com uma célula, pode-se usar o método Cells.

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Trabalhar com objectos RangeQuando se quer identificar uma linha ou coluna completa, podem ser usados os métodos Rows e Columns.

    Nº total de linhas de gama

    índice da última linha

    insere uma linha a seguir à última

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Interface gráfica

    ● O acesso aos macros faz-se mediante a combinação de teclas ALT-F8. Pode ainda associar-se a um macro uma combinação de teclas especial que permite accioná-lo directamente.

    ● Por vezes, é mais conveniente interagir com o macro através de uma inter face própr ia, concebida especialmente para ele.

    ● Usam-se para o efeito objectos gráficos como Dialog Boxes (Caixas de Diálogo) desenhadas à medida, que são versões mais desenvolvidas das já conhecidas Input Boxes e Message Boxes.

    ● Vamos nesta secção ver como construir as nossas próprias Dialog Boxes usando objectos da classe UserForm e como as integrar numa aplicação em VBA.

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Interface gráfica

    Form

    Toolbox

    UserForm criada mediante o Menu Insert/User Form

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Interface gráfica

    ● Name - especifica o nome pelo qual a Form será identificada

    ● Caption - especifica o título que figura no topo da Form● BackColor - permite seleccionar a cor do fundo● Enabled - controla a utilização da Form pelo utilizador● ShowModal - permite alterar o comportamento da

    Form de modo a impedir que enquanto esteja activa se possa aceder à aplicação

    ● Font - controla o tipo e tamanho da letra utilizada ● Height / Width - especifica a altura / largura da Form

    Propriedades da Form

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Interface gráfica

    ● Command Buttons● Labels● Text Boxes● Frames● Option Buttons● Check Boxes● List Boxes

    Controlos

    Propriedades específicasColumnCountColumnHeadsRowSource

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Interface gráfica

    ● Name - especifica o nome pelo qual o controlo será identificado no programa

    ● Caption - especifica o texto apresentado pelo controlo

    ● BackColor - permite seleccionar a cor do fundo ● Enabled - controla a utilização do objecto pelo

    utilizador ● Height / Width- especifica a altura/largura do controlo ● Visible - especifica se o controlo está ou não visível

    Propriedades dos Controlos

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como associar a Form à Subrotina?

    1. Visualização duma FormPara visualizar a UserForm usa-se o método Show:

    Se se quizer arrancar com a UserForm sem a visualizar, usa-se a instrução Load:

    Para depois de tornar visível a UserForm aplica-se o método Show.Quando se quer fechar a UserForm usa-se a instrução Unload.

  • Exemplo de um Event Handler que termine uma Form:

    VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como associar a Form à Subrotina?

    2. Tratamento dos EventosDevem existir Event Handlers para os eventos a que se pretende que a Form reaja (click ou change, por exemplo)

    Faz o Unload da Form a que o Event Handler estiver associado

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Como associar a Form à Subrotina?3. Recolha dos resultados duma Form• Uma UserForm é muitas vezes utilizada para pedir

    informação ao utilizador. • Para tal, é preciso recolher os dados introduzidos ou

    as opções seleccionadas nos controlos apropriados• acedendo às propriedades Value dos diversos controlos existentes na Form e

    • copiando os seus valores actuais para células da folha de cálculo. Conteúdo da propriedade Value

    nas principais classes de controlos

  • • Integração de uma UserForm que permita a introdução conjunta dos dados de um aluno (Nome, Número e Curso) sem necessidade de recorrer a três Input Boxes separadas.

    • Esta UserForm conterá duas Text Boxes para inserção do Nome e Número do aluno e uma Combo Box para selecção do seu Curso.

    • Uma Combo Box é um controlo semelhante a uma List Box em que a lista está normalmente invisível, só aparecendo quando o campo superior é activado. Aplicam-se-lhe os mesmos métodos da classe ListBox.

    VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Exemplo de Aplicação

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Exemplo de AplicaçãoMacro de Teste

    Subrotina de inicialização

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    Exemplo de Aplicação

    Event Handler associado ao botão cmdFechar

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    O controlo TabStrip

    Um objecto TabStrip vem de origem com 2 tabs

    Acrescenta o 3º tab

    Event Handler do evento Initialize

  • VBA

    APROGCivil

    ISEP-DEI, António Silva, © 2008

    O controlo TabStrip

    Event Handler do evento Change