visual basic for applications - dei.isep.ipp.ptasilva/page14/page16/assets/teoricas aprog... ·...
TRANSCRIPT
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 O!ce (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