Excel avançado com VBA - ultradownloads.com.brultradownloads.com.br/redirect/2,1110634.html · O QUE É UMA MACRO? Uma macro é um pequeno programa que contém uma lista de instruções

Embed Size (px)

Citation preview

Excel avanado com VBA

ndice

MACROS......................................................................................................................................................5

O QUE UMA MACRO?...................................................................................................................................6CRIAR MACROS............................................................................................................................................. 6

Gravar uma Macro................................................................................................................................6Exerccio ......................................................................................................................................................... 8Procedimento BackGround do Excel................................................................................................................ 9

Programao em Visual Basic for Applications................................................................................. 10EXECUTAR UMA MACRO................................................................................................................................11

Tecla de Atalho Shortcut Key........................................................................................................... 12Boto na Toolbar ................................................................................................................................12

Associar uma Macro a um Boto.................................................................................................................... 12Dissociar uma Macro de um Boto................................................................................................................. 14

Run ......................................................................................................................................................14Comando no Menu...............................................................................................................................15

Associao de uma Macro a um Comando do Menu...................................................................................... 15Dissociao..................................................................................................................................................... 16

Editor de Visual Basic for Applications.............................................................................................. 17REMOVER MACROS...................................................................................................................................... 17

Remoo de Macros em Ambiente Excel.............................................................................................17Remoo de Macros no Editor de VBA............................................................................................... 18

EDITOR DE VISUAL BASIC FOR APPLICATIONS......................................................................... 19

PROJECT EXPLORER ..................................................................................................................................... 21PROPERTIES WINDOW................................................................................................................................... 22JANELA DE EDIO.......................................................................................................................................23OBJECT BROWSER........................................................................................................................................ 23HELP ON-LINE............................................................................................................................................ 24AS CORES DO VBA.....................................................................................................................................24

FUNES E SUBROTINAS....................................................................................................................26

SUBROTINAS............................................................................................................................................... 28Definio de SubRotinas..................................................................................................................... 28Trabalhar no Editor de VBA Criar uma SubRotina ........................................................................ 28Execuo de uma SubRotina............................................................................................................... 29

FUNES.....................................................................................................................................................30Definio de Funes.......................................................................................................................... 30Definio do tipo de parmetros e do tipo da funo......................................................................... 30Trabalhar no Editor de VBA Criar uma Funo............................................................................. 31Execuo de uma Funo....................................................................................................................32

Execuo dentro de uma Clula...................................................................................................................... 32Execuo dentro de uma Rotina..................................................................................................................... 38

DIFERENAS ENTRE FUNES E ROTINAS......................................................................................................... 39REGRAS PARA A PASSAGEM DE PARMETROS..................................................................................................... 39

VARIVEIS............................................................................................................................................... 41

MANUSEAMENTO COM VARIVEIS...................................................................................................................42O que so variveis?........................................................................................................................... 42Assignao de valores a variveis:..................................................................................................... 43Utilizao de variveis como se fossem valores:................................................................................ 43

TIPOS DE VARIVEIS .....................................................................................................................................43

DECLARAO DE VARIVEIS..........................................................................................................................44VARIVEIS VANTAGENS DA UTILIZAO....................................................................................................... 45VARIVEIS DO TIPO OBJECTO........................................................................................................................ 45

Declarao da Varivel Objecto.........................................................................................................45Atribuio de uma varivel Objecto....................................................................................................45Utilizao Genrica da Varivel Objecto........................................................................................... 46Utilizao Especifica da Varivel Objecto......................................................................................... 46

VARIVEIS DECLARAO OPCIONAL E O TIPO VARIANT.................................................................................47Os Prs e Contras da Utilizao do tipo Variants..............................................................................47

Prs................................................................................................................................................................ 47Contras........................................................................................................................................................... 47

Variveis Declarao Forada........................................................................................................ 48VARIVEIS TIPOS DEFINIDOS PELO UTILIZADOR - ESTRUTURAS........................................................................... 48

Definio do Tipo................................................................................................................................ 48Utilizao das Estruturas de Dados....................................................................................................49

VARIVEIS ARRAYS...................................................................................................................................50O que um Array ?..............................................................................................................................50

Array Uni-Dimensional.................................................................................................................................. 50Array Bi-Dimensional.................................................................................................................................... 50

Declarao de um array......................................................................................................................51Arrays Uni-dimensionais................................................................................................................................ 51Arrays Bi-dimensionais.................................................................................................................................. 51

Utilizao de um Array........................................................................................................................52Para aceder ao elemento................................................................................................................................. 52Atribuio de valores ..................................................................................................................................... 52

Option Base e Array Bounds............................................................................................................... 53

CONSTANTES.......................................................................................................................................... 54

O QUE SO CONSTANTES ?............................................................................................................................. 55

INPUTBOX E MSGBOX.......................................................................................................................... 56

O QUE SO ?............................................................................................................................................... 57INPUTBOX...................................................................................................................................................57

O que faz.......................................................................................................................................... 57Sintaxe................................................................................................................................................. 57Parmetros.......................................................................................................................................... 58

MSGBOX.................................................................................................................................................... 59O que faz.......................................................................................................................................... 59Sintaxe................................................................................................................................................. 59Parmetros.......................................................................................................................................... 59Valores Produzidos.......................................................................................................................... 62

DOMNIO DAS VARIVEIS, CONSTANTES E ROTINAS.............................................................. 63

O QUE O DOMINIO?.................................................................................................................................... 64DOMNIO DAS VARIVEIS.............................................................................................................................. 64

mbito do Procedimento..................................................................................................................... 64mbito do Mdulo............................................................................................................................... 65mbito do Projecto..............................................................................................................................66

DOMNIO DAS CONSTANTES ...........................................................................................................................67mbito do Procedimento..................................................................................................................... 67mbito do Mdulo............................................................................................................................... 68mbito do Projecto..............................................................................................................................68

DOMNIO DE SUBROTINAS E FUNES.............................................................................................................68

ESTRUTURAS DE CONTROLO ...........................................................................................................69

O QUE SO ESTRUTURAS DE CONTROLO?.......................................................................................................... 70QUAIS AS ESTRUTURAS.............................................................................................................................. 70IF-THEN-ELSE............................................................................................................................................. 71

Funo IF do Excel............................................................................................................................. 71Sintaxe da Estrutura If-Then-Else....................................................................................................... 71Aplicao Prtica................................................................................................................................ 72A instruo adicional ElseIf............................................................................................................... 76

Aplicao Prtica............................................................................................................................................ 76

FOR NEXT................................................................................................................................................77Sintaxe................................................................................................................................................. 77Aplicao Prtica................................................................................................................................ 77

A Funo das Variveis:................................................................................................................................. 78Construo do Ciclo:...................................................................................................................................... 78Traduo Integral........................................................................................................................................... 79

Funcionamento do Ciclo:.................................................................................................................... 79Perigos associados utilizao do ciclo For-Next:............................................................................79Outra Aplicao ................................................................................................................................. 80

WHILE-WEND............................................................................................................................................. 81Sintaxe................................................................................................................................................. 81Aplicao Prtica................................................................................................................................ 82

A Funo das Variveis:................................................................................................................................. 82Construo do Ciclo:...................................................................................................................................... 82Traduo Integral........................................................................................................................................... 83

Funcionamento do Ciclo..................................................................................................................... 83Perigos associados utilizao do ciclo While-Wend........................................................................84Outra Aplicao.................................................................................................................................. 84

DO LOOP................................................................................................................................................. 85Sintaxe................................................................................................................................................. 85Aplicaes Prticas............................................................................................................................. 86

SELECT CASE.............................................................................................................................................. 88Sintaxe................................................................................................................................................. 88Aplicao Prtica................................................................................................................................ 88

Construo da Estrutura.................................................................................................................................. 89FOR EACH NEXT....................................................................................................................................90

Sintaxe................................................................................................................................................. 90Aplicaes Prticas............................................................................................................................. 91

Utilizando Arrays........................................................................................................................................... 91Construo do Ciclo................................................................................................................................... 92

Utilizando Coleces de Objectos.................................................................................................................. 92

COLECES DE OBJECTOS E OBJECTOS......................................................................................94

O QUE SO OBJECTOS ?................................................................................................................................ 95OBJECTOS: PROPRIEDADES, MTODOS E EVENTOS.............................................................................................95

Propriedades....................................................................................................................................... 95Mtodos .............................................................................................................................................. 95Eventos.................................................................................................................................................95

OBJECTOS MAIS UTILIZADOS NO EXCEL........................................................................................................... 96Propriedades................................................................................................................................................... 96Mtodos.......................................................................................................................................................... 97Propriedades................................................................................................................................................... 98Mtodos.......................................................................................................................................................... 99Propriedades................................................................................................................................................. 100Mtodos........................................................................................................................................................ 100Propriedades................................................................................................................................................. 101Mtodos........................................................................................................................................................ 102

OBJECTOS SINGULARES VS COLECES DE OBJECTOS........................................................................ 103INDEXAO DE COLECES POR NMERO OU NOME.......................................................................................... 104

Indexao com Base em Nmeros..................................................................................................... 104Indexao com Base no Nome...........................................................................................................105

Vantagem .................................................................................................................................................... 105O Objecto Range uma excepo.....................................................................................................105

Tratamento como objecto:............................................................................................................................ 105Tratamento como coleco de objectos:....................................................................................................... 105

REFERNCIA IMPLCITA................................................................................................................................106Declarao implcita da aplicao:.................................................................................................. 106Declarao implcita do WorkBook:.................................................................................................107Declarao implcita da WorkSheet:................................................................................................ 107Nvel de referncia a privilegiar....................................................................................................... 108

MISCELLANEOUS................................................................................................................................ 109

A INSTRUO WITH................................................................................................................................... 110Aplicao Prtica.............................................................................................................................. 110

OUTRAS FUNES TEIS DO VBA.............................................................................................................. 111

MacrosMacros

O QUE UMA MACRO?Uma macro um pequeno programa que contm uma lista de instrues a realizar no Excel. Como sendo um repositrio de operaes, uma macro pode executar um conjunto de tarefas atravs de um nico procedimento o qual pode ser invocado rapidamente.

As instrues que formam o corpo da macro so escritas num cdigo prprio para que o computador as possa entender, essa linguagem designada por VBA Visual Basic for Applications.

CRIAR MACROSExistem duas possibilidades de criao de macros:

Atravs do Gravador de Macros Utilizando o editor e programando em Visual Basic for Applications

Gravar uma Macro

1. Tools / Macro / Record New Macro. O Excel exibir a caixa de dilogo da fig.1.

Fig.1 caixa de dilogo para a gravao de macros.

2. O nome da Macro ser constitudo por um conjunto de caracteres que identificaro a Macro e a sua funcionalidade.

3. Shortcut Key composto por uma combinao de teclas que podero ser utilizadas para executar uma macro.

4. Opte por armazenar a macro numa das seguintes alternativas: This Workbook, New Workbook ou Personal Workbook, sendo que cada uma corresponde a macros de mbito diferente. Assim devero armazenar a macro na opo ThisWorkBook para que ela esteja activa sempre que o documento estiver aberto, e para que ela esteja armazenada no prprio ficheiro no correndo o risco de ficar armazenada nas Macros do Excel. (na rede do ISCTE impossvel gravar a macro no Personal WorkBook.)

5. No campo Description, introduza um comentrio funo este poder ser importante para que no seja esquecido o respectivo objectivo e funcionalidade.

6. Clique em OK para iniciar a gravao da macro neste momento ser exibida uma toolbar semelhante da figura 2, e o cone do rato ser transformado numa cassete, indicando o estado de gravao.

Fig.2 Toolbar exibida para a gravao de macros.

7. Na toolbar Stop Record, existem dois botes: Stop Recording e Relative Reference O boto de Stop Recording termina a gravao da macro, o boto de Relative Reference selecciona o modo de gravao da macro se feito com base em referncias relativas (boto seleccionado) ou referncias absolutas.

8. No caso da toolbar Stop Record desaparecer, poder voltar a exibi-la fazendo no menu a sequncia: View / Toolbars / Stop Record (seleccione a toolbar). Caso a toolbar no aparea listada a gravao de macros no est activa.

Nota: Tome ateno aos passos que d quando est a gravar pois tudo ser registado, o que significa que quando for executar a macro, esses procedimentos sero efectuados.

EXERCCIO

Objectivo: Gravar uma macro testando a diferena entre a execuo de macros com referncias absolutas e relativas.

1 Fase: Macro com referncias Absolutas

1. Accione a gravao da macro. Atribua-lhe o Short Key Ctrl+P2. Certifique-se que o boto Relative Reference est desactivado.3. Clique na clula B3.4. Escreva ISCTE5. Formate a clula para Bold, Itlico, tamanho 18, Small Caps, (utilize o Format / Font)6. Na clula B4 escreva: Av. Foras Armadas7. Na clula B5 escreva: 1700 Lisboa8. Pare a gravao da macro. A macro est criada.9. Apague tudo o que escreveu nas clulas da coluna B.10. Clique na clula L8.11. Carregue simultaneamente nas teclas Ctrl e P12. O que aconteceu ?

2 Fase: Macro com referncias Relativas

1. Seleccione a clula D5.2. Accione a gravao da macro. Atribua-lhe o Short Key Ctrl+R3. Seleccione o boto Relative Reference.4. Escreva ISCTE na clula que havia sido seleccionada.5. Formate a clula para Bold, Itlico, tamanho 18, Small Caps, (utilize o Format / Font)6. Na clula D6 escreva: Av. Foras Armadas7. Na clula D7 escreva: 1700 Lisboa8. Pare a gravao da macro. A macro est criada.9. Apague tudo o que escreveu nas clulas da coluna D.10. Clique na clula L8.11. Carregue simultaneamente nas teclas Ctrl e R12. O que aconteceu ? Porqu ?

PROCEDIMENTO BACKGROUND DO EXCELO Excel quando se grava uma macro cria um objecto designado por module no workbook onde regista todas as operaes gravadas em linguagem Visual Basic for Applications - VBA. Este module no aparece no Excel com as restantes Sheets.

Para ser visualizado necessrio abrir o Editor de Visual Basic for Applications:

1. Tools / Macro / Macros

2. Selecciona-se a Macro e Clica-se no boto Edit

3. Poder visualizar na rea do lado direito o cdigo VBA que est subjacente s macros que entretanto gravou. A poder executar as mesmas tarefas que num editor de texto normal: escrever, apagar, copiar, mover, mas instrues de VBA.

4. Tente fazer a leitura do que est escrito e compreenda o procedimento da macro.

5. Para regressar ao Excel basta File / Close and return to Microsoft Excel.

Programao em Visual Basic for Applications

1. Para aceder ao editor de Visual Basic for Applications: Tools / Macro / Visual Basic Editor (para se familiarizar mais com o editor consulte o capitulo Editor Visual Basic for Applications e o capitulo Funes e SubRotinas)

Figura 3 Editor de Visual Basic for Applications

2. Para inserir um mdulo faa Insert / Module isto porque as macros que construir devero ser escritas dentro de um mdulo (repare na Figura 3 que o Module 1 est seleccionado na janela de projecto e do lado direito tem-se uma rea de edio onde poder-se-o escrever as macros a executar)

3. Pode agora programar os procedimentos manualmente ou com recurso a algumas funcionalidades do Editor:

a) Insert / Procedure insere um procedimento para o qual dever indicar o tipo de procedimento.

b) Quando estiver a introduzir as variveis haver de ser exibida a lista de tipos de variveis possvel.

4. Sempre que precisar de construir uma macro mais ou menos complicada, se no conhecer muito de VBA poder comear por gravar no EXCEL pequenas macros com operaes muito simples e depois no editor de VBA tentar compreender a sua funcionalidade e assim construir uma macro cada vez mais complexa, completa e adequada s suas exigncias.

5. Poder em cada macro fazer uma chamada a uma outra macro, bastando para tal escrever o respectivo nome.

6. No Editor de Visual Basic for Applications poder encontrar ajuda para o desenvolvimento do seu procedimento. Assim:

6.1. Clique no cone do Object Browser ou View/Object Browser ou F2

6.2. Na Caixa de Drop-Down onde aparece referido , seleccione a aplicao para a qual pretende ajuda neste caso Excel. Convm referir que poder utilizar as funes de toda e qualquer aplicao.

6.3. Na rea intitulada por Classes aparecem todos os objectos especficos para o manuseamento da aplicao seleccionada. A classe especial designada por Globals refere-se s funes que esto disponveis na aplicao independentemente dos objectos seleccionados.

6.4. Seleccione um dos objectos e visualize do lado direito os Members of

6.5. Para cada membro da classe dispe de um help on-line que o esclarece sobre a respectiva funo e funcionamento, dando exemplo que poder testar. Para tal basta clicar sobre o boto de Help da janela do Object Browser.

EXECUTAR UMA MACROA execuo de uma macro pode ser concretizada de diversas formas:

Tecla de Atalho Shortcut Key Boto na Toolbar Run Comando no Menu Editor de Visual Basic for Applications

Tecla de Atalho Shortcut Key

A associao a teclas de atalho realizada aquando da criao da macro.

Boto na Toolbar

ASSOCIAR UMA MACRO A UM BOTO

1. View / Toolbars / Customize

2. Na janela do Customize seleccione o Commands Tab

3. Seleccione a categoria Macro (visualizar a caixa de dilogo exibida na Figura 4)

Fig.4 caixa de dilogo para assignao de boto a macros

4. Na rea respeitante aos Commands sero exibidos dois itens: Custom Menu Item e Custom Button. Seleccione este segundo e arraste-o com o rato at Toolbar onde o pretende inserir. Ateno s poder inserir o boto quando o ponteiro do rato ficar com a forma I. Nesse momento libertar o boto do rato utilizado para o arrastamento e verificar que ser criado um novo boto.

5. Na janela de Customize poder ainda utilizar dois botes que se encontram na rea do Selected Command:

a) Description que exibe um texto explicando o que o comando seleccionado faz.b) Modify Selection semelhante ao clique sobre o boto criado, exibe uma srie de tarefas

possveis para configurao do boto ( ver operaes seguintes).

Fig.5 Menu para configurao do boto da toolbar

6. Clique sobre o boto Modify Selection- abrindo um menu de tarefas possveis para a configurao do boto Ver Figura 5

a) No ltimo agrupamento de configuraes possveis existe uma opo designada por Assign Macro. Esta opo permite indicar qual a macro que dever ser executada sempre que se clica no boto.

b) No terceiro agrupamento existem 4 estilos diferentes de exibir o boto: s com texto, com texto e imagem ou somente com imagem. Se seleccionar o estilo Texto e Imagem, ser exibido no boto para alm da imagem o nome associado ao boto.

c) Na opo Name indique o nome que pretende ver associado ao boto, por defeito aparece o nome da macro. (repare que aparece um & atrs da letra que aparece a sublinhado)

d) Para alterar a imagem associada ao boto poder: optar por uma imagem diferente, alterar a que est a visualizar ou a construir a sua. Para isso clique sobre a tarefa de Change Button Image, seleccione o logotipo pretendido, se nenhum o satisfizer e pretender criar o seu seleccione o logotipo que representa um quadrado vazio. Para o poder (re)desenhar a imagem, na lista de tarefas disponibilizada pelo boto Modify Selection opte por Edit Button Image e crie a sua imagem que poder reeditar.

DISSOCIAR UMA MACRO DE UM BOTO1. Tools / Customize

2. Arraste o boto da toolbar at ao documento3. Solte-o

Run

1. Tools / Macro / Macros

2. Na caixa de dilogo Macros selecciona-se a macro pretendida na lista da Macro Name (Figura 6)

3. Clique sobre o boto Run

Fig.6 Janela para seleco da macro a executar

Comando no Menu

ASSOCIAO DE UMA MACRO A UM COMANDO DO MENU

1. View / Toolbars / Customize

2. Na janela do Customize encontra-se no Commands Tab

3. Seleccione a categoria Macro

4. Na area respeitante aos Commands ser exibido um item de Custom Menu Item, seleccione-o e arraste-o com o rato at a uma posio do menu que lhe interesse por exemplo pode introduzir numa das listas de opes do menu (File, View,) ou ento criar como uma nova opo do Menu..

Fig.7 Caixa de dilogo para atribuir uma macro a um comando do menu

5. Se pretender criar uma nova lista no menu dever :a) Seleccionar a categoria New Menub) Na rea dos Commands ser exibida a opo New Menu, que dever arrastar at barra dos

menusc) Poder alterar o seu nome clicando no boto de Modify Selectiond) Esta nova lista ter o mesmo comportamento que a outras

Fig.8 Caixa de dilogo para criar um novo menu na barra dos menus

6. Na janela de Customize poder ainda utilizar dois botes que se encontram na rea do Selected Command:

c) Description que exibe um texto explicando o que o comando seleccionado faz.d) Modify Selection semelhante ao clique sobre o menu ou comando de menu criado, exibe

uma srie de tarefas possveis para configurao (Ver o item 6 do captulo Associar uma Macro a um Boto)

DISSOCIAO1. Tools / Customize

2. Arraste o Menu ou Comando do Menu at ao documento e solte-o

Editor de Visual Basic for Applications

1. Tools / Macro / Visual Basic Editor - para aceder ao Editor

2. Posicionando-se no corpo de uma macro, na janela do lado direito inferior, poder executar a macro atravs de: Run / Run Sub-UserForms (figura 9) ou boto Run.

Fig.9 Execuo de uma macro no Editor de Visual Basic for Applications

REMOVER MACROSA remoo das macros poder ser feita:

no ambiente Excel, ou no Editor de VBA

Remoo de Macros em Ambiente Excel

1. Tools / Macro / Macros

2. Selecciona-se a Macro a remover

3. Clica-se no boto Delete

4. Pede a confirmao e apaga se confirmar

Remoo de Macros no Editor de VBA

2. Tools / Macro / Visual Basic Editor - para aceder ao Editor

3. Podem-se apagar as macros que se encontrem na janela do lado direito inferior e que tm inicio com a palavra Sub e fim com as palavras End Sub (Ver capitulo de funes e procedimentos)

Editor de VisualEditor de Visual Basic forBasic for

ApplicationsApplications

Para aceder ao editor de Visual Basic for Applications: Tools / Macro / Visual Basic Editor

Figura 10 Editor de Visual Basic for Applications

Encontrar o cran dividido em trs grandes reas: Project Explorer, Properties Window e do lado direito a janela de edio de texto.

PROJECT EXPLORER Se a janela no estiver visvel active-a atravs do View / Project Explorer ou utilizando o boto ou combinaes de letras associadas a esta tarefa.Nesta janela poder visualizar a hierarquia dos projectos de Visual Basic for Applications activos nesse momento.

Entre eles dever encontrar um cujo nome corresponde ao nome do WorkBook do Excel com que est a trabalhar. E.g. VBAProject (Book1). dentro deste projecto que dever trabalhar para que todas as funcionalidades que implemente estejam nele activas sempre que necessrio.

Figura 11 Janela do Project Explorer

Assim se fizer o desdobramento do seu VBAProject, encontrar um folder cuja designao Microsoft Excel Objects, e um outro designado Modules (se este no aparecer significa que o seu projecto ainda no possui qualquer macro implementada. Para criar este folder dever fazer: Insert / Module).

No folder do Microsoft Excel Objects, encontrar todos os objectos que fazem parte do seu documento: as WorkSheets e o WorkBook (que no fundo o conjunto de WorkSheets). Se clicar duplamente em cada um destes objectos, uma nova janela ser visualizada na rea da direita, em cada uma dessas reas poder definir a aco a ser executada em funo dos eventos de cada objecto.

No Folder Modules, aparecer o conjunto de ficheiros (mdulos) onde poder programar as suas macros. Clicando duplamente em cada um dos mdulos indicados poder visualizar as macros, que o compem, na janela da direita.

PROPERTIES WINDOW

Se a janela das propriedades no estiver visvel active-a atravs do View / Properties Window ou utilizando o boto ou combinaes de letras associadas a esta tarefa.

Figura 12 Janela de propriedades

Nesta janela poder visualizar e alterar as propriedades que definem cada objecto: o nome - neste caso.

JANELA DE EDIO

A janela de edio exibir a cada momento o cdigo em Visual Basic for Applications associado ao elemento seleccionado na janela do Project Explorer.

Figura 13 Janela de edio

OBJECT BROWSER

No Editor de Visual Basic for Applications poder encontrar ajuda para o desenvolvimento do seu procedimento. Assim:

Clique no cone do Object Browser ou View/Object Browser ou F2

Na Caixa de Drop-Down onde aparece referido , seleccione a aplicao para a qual pretende ajuda neste caso Excel. Convm referir que poder utilizar as funes de toda e qualquer aplicao.

Na rea intitulada por Classes aparecem todos os objectos especficos para o manuseamento da aplicao seleccionada. A classe especial designada por Globals refere-se s funes que esto disponveis na aplicao independentemente dos objectos seleccionados.

Seleccione um dos objectos e visualize do lado direito os Members of

Para cada membro da classe dispe de um help on-line que o esclarece sobre a respectiva funo e funcionamento, dando um exemplo que poder testar. Para tal basta clicar sobre o boto de Help da janela do Object Browser.

HELP ON-LINEO Editor de Visual Basic for Applications, disponibiliza ao utilizador um sistema de ajuda constante. Assim, quando se constroiem procedimentos, na janela de edio, medida que a linguagem escrita o editor abre oportunamente listas de opes para ajudar a escrever o cdigo.

AS CORES DO VBANa Janela de Edio so programados, armazenados e exibidos os procedimentos VBA criados.

Porm, o texto envolvido em cada procedimento dotado de uma srie de cores diferentes, sendo que cada uma tem significado diferente.

Cor Significado

Azul Palavras-Chave da linguagem. Ex: Sub, End Sub, Function, If, Then, Else, While, Loop,

Vermelho Sempre que escreve na janela uma linha em linguagem VBA, o editor vai rectificar a sintaxe da linguagem por forma a indicar se existe ou no algum erro de escrita. Se for detectado um erro a linha fica a vermelho e exibida uma mensagem de erro, seno todas as palavras so reconhecidas, coloridas da cor da respectiva categoria e alteradas para letras maisculas ou minsculas, conforme esteja pr-definido.

Preto Nome de variveis, procedimentos, valores, operadores,

Verde Comentrio introduzidos no seio dos procedimentos. Estes comentrios servem para o utilizador poder associar algumas explicaes aos procedimentos realizados. De referir que as palavras com esta cor so ignoradas no procedimento, i.e., no produzem qualquer efeito na sua execuo. Para introduzir comentrios bastar que o caractere anteceda o texto a introduzir.

Amarelo Um sombreado amarelo poder aparecer sobre a linha que identifica um procedimento. Esta cor simboliza a ocorrncia de um erro na execuo do respectivo procedimento e o estado de execuo do mesmo, i.e., o procedimento iniciou a execuo, durante a qual detectou um erro e agora est parado, mas ainda em execuo. Quando isto acontecer no dever voltar a dar ordem de execuo do procedimento, sem antes parar (Stop) a execuo mal sucedida.

Funes eFunes e SubRotinasSubRotinas

Como foi referido anteriormente, quando se grava uma macro no Excel, este tem um comportamento em background que realiza a respectiva codificao para Visual Basic for Applications. Este resultado bem visvel quando procedemos edio de uma macro no Editor de Visual Basic for Applications. Cada macro que se cria tem um comportamento concreto e autnomo relativamente a outras macros implementadas, e tem como objectivo executar um determinado nmero de instrues1 que respondam s exigncias do utilizador.

Cada macro criada d origem a um procedimento ou rotina. Existem dois tipos de rotinas:

as subrotinas ou rotinas Sub, e as funes.

SUBROTINAS

Definio de SubRotinas

As SubRotinas so aquelas cuja definio delimitada pelas palavras-chave Sub e EndSub. Assim se reparar todas as macros que grava no Excel so deste tipo. Repare ainda como que so definidas:

Sub ( )

End Sub

Estas SubRotinas so designadas pelo nome2 que lhe atribumos e no recebem parmetros3 do exterior, tm como funo desempenhar um conjunto de tarefas que compem o seu corpo. O corpo da macro, assim composto por um conjunto de instrues, sendo que cada instruo diferente necessita de estar numa linha diferente. Contudo, quando se trata de instrues demasiado grandes o editor faz a sua partio por diversas linhas, recorrendo ao operador _, por forma a facilitar a leitura.

Trabalhar no Editor de VBA Criar uma SubRotina

Para criar uma SubRotina necessrio que exista um mdulo onde se possa escrever.Uma vez posicionado nesse mdulo poder:

1 Entenda-se instruo como uma tarefa a executar que corresponde a uma linha de cdigo.

2 O nome da rotina pode ser qualquer um desde que no contenha espaos, comece por caracteres alfa

Escrever a macro integralmente, ou

Recorrer ao Insert / Procedure para que o Visual Basic for Applications lhe crie a estrutura (Figura 14)

Figura 14 Caixa de Dilogo para a criao de uma nova rotina

Assim dever indicar o tipo de rotina a criar Sub e o nome que pretende dar macro (ou rotina ou procedimento ou SubRotina) 4. Automaticamente ele criar a estrutura da rotina, neste caso ficaria:

Sub Macro1( )

End Sub

Execuo de uma SubRotina

SubRotina e Macro so duas designaes para a mesma realidade, portanto tudo o que foi referido relativamente a Macros vlido tambm para as SubRotinas. (Consultar captulo das Macros)

Neste contexto a execuo de SubRotinas segue o mesmo mecanismo das macros. Porm neste momento j se pode referir uma nova forma de executar as macros ou SubRotinas dentro de outras

3 Para ter a noo do que so parmetros recorde-se do funcionamento das funes do Excel, que para executarem determinada funo necessitavam de receber parmetros que colocamos entre parntesis separados por virgulas.

4 Nomes alternativos para fazer referncia a um conjunto de instrues.

rotinas, i.e., quando se escreve dentro de uma rotina o nome de outra a execuo da rotina tem continuidade na execuo da rotina que est a ser invocada.

FUNES

Definio de Funes

Funes so rotinas cuja definio comea com a palavra-chave Function e termina com as palavras End Function. Todas as funes que utiliza no Excel so deste tipo de rotina. A sua definio tem a estrutura seguinte:

Function ( , ,)

=

End Function

A funo identificada pelo nome, pelo nmero e tipo de parmetros recebidos, e tem como objectivo executar um conjunto de instrues e produzir um valor final. Isto , sempre que se pretender executar uma funo sabido priori que ela produzir um valor. Recorde-se como exemplo a funo SUM, esta recebe por parmetro um conjunto de valores que se pretendem somar, sabe-se que o resultado da aplicao dessa funo ao conjunto de valores ser o respectivo somatrio.

Para definir o valor produzido por uma funo basta no seu interior, atribuir ao nome da funo um determinado valor ou expresso.

Definio do tipo de parmetros e do tipo da funo

Todos os elementos de input e output de uma funo tm um tipo de dados atribudo. Assim os parmetros devero ser definidos com o tipo de dados respectivo e a funo dever ser definida do tipo de dados que ela envie para o exterior.Aps isto poder-se- refinar a definio de uma funo:

Function ( As , ) As

=

End Function

Nota: Se os tipos no forem definidos ser assumido por defeito como sendo do tipo Variant

Trabalhar no Editor de VBA Criar uma Funo

Para criar uma Funo necessrio que exista um modulo onde se possa escrever.Uma vez posicionado nesse mdulo poder:

Escrever a macro integralmente, ou

Recorrer ao Insert / Procedure para que o Visual Basic for Applications lhe crie a estrutura (Figura 15)

Figura 15 Caixa de Dilogo para a criao de uma nova rotina - funo

Nesta caixa de dilogo dever indicar o tipo de rotina a criar Function e o nome que pretende dar funo. Automaticamente o Visual Basic for Applications criar a estrutura da rotina, que neste caso ficaria:

Function IVA( )

End Function

Execuo de uma Funo

Uma vez que uma funo produz um valor ela poder ser executada:

dentro de uma clula numa WorkSheet, semelhana de qualquer uma outra funo do Excel

dentro de qualquer outra funo ou SubRotina.

Com base na seguinte funo, analisemos as formas de execuo com mais pormenor:

Figura 16 Janela de Edio com a funo IVA

EXECUO DENTRO DE UMA CLULA1. Posicione-se na clula onde pretende inserir a funo2. Insert / Function 3. Seleccione a categoria User Defined repare que aparece listada a funo que acabou de criar IVA

(Figura 17)

Figura 17 Caixa de Dilogo para introduo da funo

4. Clique em OK e de imediato uma janela de ajuda vir auxiliar a utilizao da sua funo (Figura 18)

Figura 18 Caixa de Dilogo para apoio utilizao da funo

5. Introduza os parmetros e clique em OK (Figura 19)

Figura 19 Caixa de Dilogo para apoio utilizao da funo introduo de valores

Em suma:

Qualquer funo poder ser chamada a partir da WorkSheet do Excel, sendo que a sua chamada ser realizada semelhana de qualquer outra funo: numa clula

= ( , )

EXECUO DENTRO DE UMA ROTINA

Quando dentro de uma rotina se faz referncia ao nome de uma outra rotina a execuo da primeira passa pela execuo daquela que est a ser invocada.

No exemplo que se segue, a funo Valor_Liquido faz uma chamada funo IVA por forma a que, o valor por esta produzido, seja adicionado varivel Valor, e assim produzir o output final da funo Valor_Liquido.

Figura 20 Funo Valor_Liquido ao ser executada d ordens de execuo funo IVA

Um outro exemplo poder elucidar melhor:

Figura 21 A Subrotina Ident_Maior ao ser executada d ordens de execuo funo Ver_Maior

DIFERENAS ENTRE FUNES E ROTINAS

As funes so similares s subrotinas, existem simplesmente trs diferenas:

1. As Funes Comeam com a palavra-chave Function e terminam com as palavras End Function

2. As Funes podem ser chamadas a partir de frmulas introduzidas numa WorkSheet

3. As funes retornam valores para as frmulas ou subrotinas que as chamarem

REGRAS PARA A PASSAGEM DE PARMETROS

Regra 1: Como uma funo retorna um valor, esta dever ser utilizada numa expresso. Quando uma funo utilizada do lado direito de uma assignao, ou como argumento de uma outra rotina, dever-se- passar os parmetros dentro de parntesis

Regra 2: Pode-se chamar uma funo ou subrotina com a palavra-chave Call, neste caso dever-se-o colocar todos os parmetros entre parntesis.

Regra 3: Quando uma rotina chamada de forma isolada e sem a palavra-chave Call, no se deve utilizar parntesis.

VariveisVariveis

MANUSEAMENTO COM VARIVEIS

O que so variveis?

As variveis constituem repositrios temporrios de dados, podendo ser utilizadas para diversos fins.

Figura 22 Manuseamento de Variveis

Assignao de valores a variveis:

Quando se pretende atribuir valores a variveis dever-se- indicar o nome da varivel, o operador "=" e o valor que se pretende que a varivel armazene.

=

Pela observao do procedimento Adio - Figura 22- podemos verificar que as variveis Parcela_1 e Parcela_2 armazenam os valores introduzidos pelo utilizador atravs das InputBox (Ver captulo "InputBox e MsgBox"). Tambm varivel Total vai ser atribudo o valor resultante da adio das duas parcelas - Total = Parcela_1 + Parcela_2.

Utilizao de variveis como se fossem valores:

O nome da varivel representa o contedo da mesma, i.e., sempre que mencionar o nome da varivel o seu contedo que ser considerado.

No exemplo da figura 22, pode-se constatar que na expresso:

Total = Parcela_1 + Parcela_2

Parcela_1 representa o primeiro valor introduzido e Parcela_2 representa o segundo valor, no se trata de adicionar o nome de duas variveis, mas adicionar os contedos que elas armazenam.

TIPOS DE VARIVEIS O tipo de varivel est associado ao gnero de informao que esta tem hiptese de armazenar

Boolean 2 bytes Permite armazenar valores Boolenaos True ou False

Byte 1 Byte permite armazenar nmeros sem sinal entre 0 e 255

Currency - 8 bytes permite armazenar moeda

Date 8 Bytes permite armazenar datas

Double 8 bytes permite armazenar um real desde -1.79769313486232E308 at -4.94065645841247E-324 para valores negativos, e desde 1.79769313486232E308 at 4.94065645841247E-324 para valores positivos.

Single 4 bytes permite armazenar um real desde -3.402823E38 at -1.4011298E-45, para valores negativos e desde 3.402823E38 at 1.4011298E-45, para valores positivos

Integer 2 bytes - permite armazenar nmeros inteiros entre -32.768 e 32767

Long 4 bytes permite armazenar nmeros inteiros entre -2 147 483 648 e 2 147 483 648

Object 4 bytes utilizado para fazer referncia a um objecto do Excel

String 1 byte por caractere permite armazenar conjuntos de caracteres

Variant 16 bytes - permite armazenar qualquer tipo de dados

User-Defined permite armazenar valores de tipos diferentes

DECLARAO DE VARIVEIS

Dim I_Numero As Integer

Onde:

Dim Palavra chave que indica uma declarao de variveis (abreviatura de dimenso)I_Numero - nome da varivel a utilizarAs palavra chave utilizada para separar o nome da varivel do tipo de dadosInteger tipo de dados atribudo varivel

possvel na mesma declarao de variveis declarar variveis de diversos tipos:

Dim var1 As Integer, var2 As Date, var3 As Double

Para declarar diversas variveis do mesmo tipo:

Dim var_1, var_2, var_3 As Currency

VARIVEIS VANTAGENS DA UTILIZAO

Simplificam a codificao, principalmente quando se necessita de utilizar um valor especifico inmeras vezes

Com variveis o cdigo mais rpido

VARIVEIS DO TIPO OBJECTOUma varivel objecto representa uma referncia a um objecto. Uma varivel de extrema importncia que facilita a codificao e melhora a performance da subrotina.

Declarao da Varivel Objecto

Dim As Object

Atribuio de uma varivel Objecto

Set =

Onde:

Set palavra chave que indica a assignao de uma varivel objecto - Varivel Objecto= - Operador de assignao

- Objecto a ser atribudo varivel

Utilizao Genrica da Varivel Objecto

A utilizao genrica do tipo Objecto serve para suportar qualquer tipo de objecto Excel (WorkBook,WorkSheet,Range,)

Exemplo:

Dim Range_1 as ObjectRange_1 = Worksheet(1).Range(A1)Range_1.Value = 10

Utilizao Especifica da Varivel Objecto

Utiliza-se o tipo exacto do objecto que se pretende atribuir varivel. Esse tipo especifico de objectos coincide com o nome dos objectos em EXCEL.

Dim Range_1 As RangeDim WB_1 As WorkbookDim WS_1 As WorkSheet

Dim XL As Aplicativo

Exemplo:

Dim Range_1 as RangeRange_1 = Worksheet(1).Range(A1)Range_1.Value = 10

Contudo estas declaraes tambm podem ser feitas da seguinte forma genrica:

Dim Range_1 As ObjectDim WB_1 As ObjectDim WS_1 As ObjectDim XL As Object

Ento qual o interesse de definir as variveis de forma especifica se o podemos fazer de forma genrica?

Por uma questo de performance, se utilizar um objecto genrico, o VBA antes de executar qualquer funo com o objecto tem que primeiramente o identificar (perdendo tempo) em subrotinas simples essa diferena no substancial mas quando se trata de grandes subrotinas j se denotam diferenas significativas.

VARIVEIS DECLARAO OPCIONAL E O TIPO VARIANTA declarao de variveis opcional, se as variveis no forem declaradas o VBA faz a sua declarao por defeito. Assim sempre que a instruo do Dim omitida para uma varivel, essa assume o tipo Variant.

Os Prs e Contras da Utilizao do tipo Variants

PRS Diminui o nmero de linhas de cdigo

No necessrio estar preocupado se a varivel est ou no declarada porque o VBA automaticamente o faz

CONTRAS Aumenta o tempo de execuo o VBA primeiro precisa de reconhecer o tipo de dados com os

quais est a trabalhar.

Este tipo de dados consome mais memria (uma vez que tem que alocar espao para qualquer tipo de dados que lhe seja atribudo) 16 bytes mais um byte por caractere se for String => problemas de performance para subrotinas grandes.

No possvel saber o tipo de dados que uma determinada varivel contm dificultando a deteco de erros.

Variveis Declarao Forada

Para que o VBA detecte um erro sempre que uma varivel no seja declarada dever fazer:

Tools/Options

Editor Tab Activar Require Variable Declaration

Ou ento, escrever no incio de cada mdulo Option Explicit

Neste caso sempre que seja detectada uma varivel que ainda no foi declarada d uma mensagem de erro - Variable Not Defined

VARIVEIS TIPOS DEFINIDOS PELO UTILIZADOR - ESTRUTURAS

Definio do Tipo

A primeira fase constituda pela definio do tipo:

Type Dados_Pessoais

Nome As StringIdade As IntegerDataNascimento As DateBI As Long

End Type

Criou-se um tipo de dados que representa uma estrutura com dados de diferentes tipos. Esta definio dever ocorrer no incio do mdulo VBA.

Onde:

Type Palavra-Chave que indica a definio de um tipo de dados criado pelo utilizador.

Dados_Pessoais Nome atribudo ao tipo de dados.

Nome As String Primeiro elemento da estrutura de dados definida.

Idade As Integer Segundo elemento da estrutura de dados definida.

DataNascimento As Date Terceiro elemento da estrutura de dados definida.

BI As Long Quarto elemento da estrutura de dados definida.

End Type Palavra-Chave que indica o fim da definio da estrutura de dados.

Utilizao das Estruturas de Dados

Como utilizar as estruturas de dados:

Sub Tipos_definidos_Utilizador()

Dim Pessoa As Dados_Pessoais

Pessoa.Nome = FranciscoPessoa.DataNascimento = #8/7/73#Pessoa.Idade = WorksheetFunction.Year(Date)_ WorksheetFunction.Year(Pessoa.DataNascimento)Pessoa.BI = 103582915

MsgBox 5Pessoa.Nome & Chr(13) & , Idade & Pessoa.Idade & Chr(13) & _, Data de Nascimento & Pessoa.DataNascimento & Chr(13) & _, com o BI nmero _ & Pessoa.BI

End Sub

VARIVEIS ARRAYS

O que um Array ?

Um Array uma varivel que representa um conjunto de variveis do mesmo tipo.

Os Arrays podem ser multi-dimensionais, onde todas as dimenses so indexadas numericamente.

ARRAY UNI-DIMENSIONAL012345

5 Ver captulo InputBox e MsgBox

Um array uni-dimensional constitudo por uma nica lista de elementos indexveis. Esta lista tem um elemento inicial e um outro final sendo que a cada elemento da lista corresponde um nico ndice, traduo do lugar que ocupa na lista, que o identifica univocamente.

ARRAY BI-DIMENSIONAL

0 1 20123

Um array bi-dimensional um pouco mais complexo e constitudo por um conjunto de listas do mesmo comprimento, este formato normalmente conhecido como array ou matriz. portanto constituda por linhas e colunas e cada elemento identificado por um ndice composto pela intercepo dos nmeros da linha e da coluna.

Declarao de um array

ARRAYS UNI-DIMENSIONAISDim ArrayNumerico(10) As Integer

Array_Numerico o nome da varivel array, o nmero entre parntesis indica o nmero de elementos que o array pode armazenar, isto

Array_Numerico0123456789

Em que cada elemento do tipo Integer.

ARRAYS BI-DIMENSIONAISDim Tabela_Textual (5, 4 ) As String

Tabela_textual o nome da varivel, os nmero entre parntesis indicam que a tabela ir ter 5 linhas e 4 colunas, podendo assim armazenar 20 elementos do tipo String.

Tabela_Textual0 1 2

0123

Utilizao de um Array

PARA ACEDER AO ELEMENTO([,, ])

ATRIBUIO DE VALORES ([,, ]) =

Exemplo 1:Sub Pases()

Dim Pases(3) As String

Pases (0) = "Portugal"Pases(1) = "Brasil"Pases(2) = "Moambique"

MsgBox "Pases Armazenados:" & Chr(13) & Pases(0) & Chr(13) & Pases(1) &_ Chr(13) & Pases(2)

End Sub

Aps a atribuio de valores a cada elemento do array, este passa a ter o contedo seguinte:Pases

Portugal 0Brasil 1Moambique 2

Valor estes que sero exibidos atravs da MsgBox.

Exemplo 2:Option Base 1Sub Utilizacao_Array()

Dim Lotaria(3) As Integer

Lotaria(1)=int(10000*Rnd())Lotaria(2)=int(10000*Rnd())Lotaria(3)=int(10000*Rnd())MsgBox Nmeros da lotaria: & Lotaria(1) & , & Lotaria(2) & , &_ Lotaria(3)

End Sub

Option Base e Array Bounds

A indexao de um array por defeito tem inicio em 0, sendo que os respectivos ndices vo de 0 a dimenso-1. Para alterar a base de indexao por forma a ter inicio em 1 basta colocar no inicio do mdulo Option Base 1

Contudo se pretender que um array comece noutro nmero que no seja 0 ou 1, necessrio especificar os limites inferior e superior do ndice aquando da declarao do array.

Exemplo:Sub Utilizacao_Array()

Dim Lotaria(4 To 5) As Integer

Lotaria(4)=int(10000*Rnd())Lotaria(5)=int(10000*Rnd())MsgBox Nmeros da lotaria: & Lotaria(4) & , & Lotaria(5)

End Sub

ConstantesConstantes

O QUE SO CONSTANTES ?Constantes so valores que no alteram durante a execuo de uma rotina. So declaradas da mesma forma que as variveis, a nica diferena reside no facto da atribuio ser feita na mesma instruo da declarao, e s poder ser feita uma nica vez.

Const As = Const As =

Figura 23 Manuseamento de Constantes

InputBox e MsgBoxInputBox e MsgBox

O QUE SO ?Para haver interaco entre o utilizador e uma macro ou programa necessrio que exista um interface de comunicao. Este poder ser mais ou menos complexo e completo, contudo existem dois elementos bsicos para estabelecer esta ligao: InputBox e MsgBox.

Neste contexto a InputBox uma funo que permite ao utilizador introduzir dados no programa portanto um mecanismo de input. O MsgBox um mecanismo de Output e permite ao utilizador visualizar os dados produzidos pelo programa.

INPUTBOX

O que faz

1. Exibe no cran uma janela com uma caixa text box para a insero de dados.

2. Espera que o utilizador introduza os dados e/ou accione um dos botes.

3. Como uma funo produz um valor final. Este consiste nos dados inseridos pelo utilizador na forma textual - String.

Sintaxe

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

Numa primeira avaliao da funo, pode-se dizer que a mesma possui diversos parmetros, mas somente o primeiro obrigatrio, sendo que todos os outros quando ignorados assumem valores atribudos por defeito.

ParmetrosParmetro Comentrio

Prompt(Obrigatrio )

Expresso textual exibida como mensagem na janela de input.A dimenso mxima de 1024 caracteres.Se se pretender construir uma mensagem com mais do que uma linha poder utilizar o caractere Enter - Chr(13). A juno dos elementos que constituem a mensagem realizada atravs do operador &.

Exemplo:"A Soma de 3 com 5 :" & Chr(13) & " 8 "

Title (Facultativo)

Titulo da janela de input. Se este for omitido, aparecer por defeito o nome da aplicao.

Default(Facultativo)

Expresso inserida por defeito na caixa de insero de dados e constituir a resposta por defeito se o utilizador no introduzir outra.Se este parmetro for omitido aparecer uma text box vazia.

Xpos(Facultativo)

Nmero que identifica a distncia horizontal entre o lado esquerdo do cran e a janela de input. Se este valor for omitido a janela aparecer centrada horizontalmente.

Ypos(Facultativo)

Nmero que identifica a distncia vertical entre o lado superior do cran e a janela de input. Se este valor for omitido a janela ficar posicionada a 1/3 da parte inferior do cran

HelpFile(Facultativo)

Nome do ficheiro de Help que ser utilizado para dar apoio ao preenchimento desta janela. Se for indicado este parmetro o seguinte obrigatrio.

Context(Facultativo)

Nmero do ndice do tpico de Help constante no ficheiro HelpFile, e que corresponde janela em questo.

Ateno: Se pretender enviar mais que um parmetro optativo respeite a ordem atravs de , (virgulas)

Exemplo:InputBox(Introduza o Nome da Aplicao:, , Excel)

Na janela de input ser exibida a mensagem Introduza o Nome da Aplicao:, o ttulo da caixa ser o definido por defeito e o valor na caixa de insero ser Excel.

MSGBOX

O QUE FAZ1. Exibe no cran uma janela com uma mensagem.

2. Espera que o utilizador accione um dos botes.

3. Como uma funo produz um valor final. Devolve um nmero inteiro indicando o boto que foi clicado.

Sintaxe

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

semelhana da InputBox , pode-se dizer que a mesma possui diversos parmetros, mas somente o primeiro obrigatrio, sendo que todos os outros quando ignorados assumem valores atribudos por defeito.

Parmetros

Parmetro Comentrio

Prompt(Obrigatrio )

Expresso textual exibida como mensagem na janela de input.A dimenso mxima de 1024 caracteres.Se se pretender construir uma mensagem com mais do que uma linha poder utilizar o caractere Enter Chr(13)

Exemplo:"A Soma de 3 com 5 :" & Chr(13) & " 8 "

Buttons (Facultativo)

Nmero que identifica o tipo de botes que se pretende visualizar na janela de output. Ver tabela seguinte.Se for omitido assumir o valor 0 por defeito.

Title (Facultativo)

Titulo da janela de input. Se este for omitido, aparecer por defeito o nome da aplicao.

HelpFile(Facultativo)

Nome do ficheiro de Help que ser utilizado para dar apoio ao preenchimento desta janela. Se for indicado este parmetro o seguinte obrigatrio.

Context(Facultativo)

Nmero do ndice do tpico de Help constante no ficheiro HelpFile, e que corresponde janela em questo.

Ateno: Se pretender enviar mais que um parmetro optativo respeite a ordem atravs de , (virgulas)

Exemplo:MsgBox(Erro de Sintaxe !!!, , Mensagem de Erro)

Na janela de output ser exibida a mensagem Erro de Sintaxe, o boto exibido ser o de OK (por defeito) e o titulo da janela ser Mensagem de Erro.

Constante de VBA Valor Descrio

VbOKOnly 0 Exibe somente o boto de OK.VbOKCancel 1 Exibe os botes OK e Cancel.VbAbortRetryIgnore 2 Exibe os botes Abort, Retry, e Ignore.VbYesNoCancel 3 Exibe os botes Yes, No, e Cancel .VbYesNo 4 Exibe os botes Yes e No.VbRetryCancel 5 Exibe os botes Retry e Cancel.VbCritical 16 Exibe o cone de Critical Message. VbQuestion 32 Exibe o cone de Warning Query.VbExclamation 48 Exibe o cone de Warning Message.VbInformation 64 Exibe o cone de Information Message.VbDefaultButton1 0 O primeiro boto o seleccionado por defeito.VbDefaultButton2 256 O segundo boto o seleccionado por defeito.VbDefaultButton3 512 O terceiro boto o seleccionado por defeito.VbDefaultButton4 768 O quarto boto o seleccionado por defeito.VbApplicationModal 0 Application modal o utilizador s depois de responder

MsgBox que poder dar continuidade ao trabalho na aplicao corrente.

VbSystemModal 4096 System modal - o utilizador s depois de responder MsgBox que poder dar continuidade ao trabalho em qualquer aplicao em curso no sistema.

Pela anlise desta tabela poder constatar que existem diferentes agrupamentos de cdigos: para definir o tipo de botes (0-5), para definir o tipo de cones (16,32,48,64), para definir o boto seleccionado por defeito (0,256,512,768) e para indicar o modo de execuo (0 e 4096). Poder adicionar os cdigos e assim fazer combinaes entre diversas opes destes 4 grupos, contudo nunca dever adicionar mais do que um cdigo por agrupamento.

Exemplos:

Para a instruo:

MsgBox "Erro de Sintaxe!!!", 2 + 48 + 512 + 4096, "Mensagem de Erro"

exibida a seguinte janela:

Figura 24 MsgBox

Para a instruo:

MsgBox "Erro de Sintaxe!!!", 5 + 64 + 256 + 4096, "Mensagem de Erro"

exibida a seguinte janela:

Figura 25 MsgBox

Valores Produzidos

Como j foi referido, a funo MsgBox produz um valor em funo do boto accionado, assim produzir como output um dos valores constantes da tabela seguinte:

Constante de VBA Valor Boto Accionado

vbOK 1 OKvbCancel 2 CancelvbAbort 3 AbortvbRetry 4 RetryvbIgnore 5 IgnorevbYes 6 YesvbNo 7 No

Domnio dasDomnio das variveis, constantesvariveis, constantes

e rotinase rotinas

O QUE O DOMINIO?Scope ou domnio de um elemento refere-se rea na aplicao na qual esse mesmo elemento pode ser acedvel e utilizado, ou seja onde que o elemento reconhecido.

DOMNIO DAS VARIVEISRefere-se rea onde a varivel permanece activa, mantendo o valor que lhe vai sendo atribudo.

Existem 3 nveis de domnio para as variveis:

mbito do Procedimento ou Procedimental mbito do Modulo ou Modular mbito do Projecto

As declaraes de tipos User Defined que so escritas no Declarations do mdulo tm domnio de Projecto.

mbito do Procedimento

Estas variveis so declaradas no corpo do procedimento com recurso palavra chave Dim.

So variveis criadas aquando da execuo do procedimento e automaticamente destrudas quando o procedimento termina, sendo que s so reconhecidas no seio do procedimento que as declarou. Assim sendo, qualquer tentativa realizada por um procedimento no sentido de trabalhar com variveis definidas no corpo de um outro procedimento no ter xito.

Exemplo

Sub Ambito_Procedimento()Dim Var_1 As IntegerVar_1 = InputBox (Introduza um nmero Inteiro)MsgBox Foi este o nmero que introduziu: & Var_1Ambito_Procedimento_2

End Sub

Sub Ambito_Procedimento_2()MsgBox Foi este o nmero que introduziu: & Var_1

End Sub

A execuo destas rotinas resultar no seguinte:

A primeira mensagem (MsgBox no Procedimento Ambito_Procedimento)exibir o nmero introduzido pelo utilizador que fora armazenado na varivel Var_1.

A segunda mensagem, oriunda da instruo MsgBox do Procedimento Ambito_Procedimento_2 no exibir o valor introduzido, porque a varivel Var_1 nele referida considerada como uma varivel interna do processo, e portanto criada dentro do procedimento Ambito_Procedimento_2. Como tal, embora possua o mesmo nome que a varivel da rotina Ambito_Procedimento_1 no existe qualquer ligao entre elas, so duas variveis distintas.

Neste caso se se pretendesse que o valor da primeira varivel fosse reconhecido no procedimento chamado, ter-se-ia de o passar por parmetro.

mbito do Mdulo

Uma varivel como mbito do Mdulo pode ser acedida por todas as rotinas existentes no mdulo onde a varivel declarada.

Para declarar uma varivel do nvel modular, dever declar-la com a palavra chave Dim na seco Declarations do respectivo mdulo VBA. Neste caso qualquer varivel a declarada ser considerada de nvel modular por defeito, para tornar esse facto mais explicito poder-se- utilizar a palavra chave Private na declarao:

Ex: Private Var_2 As String

Exemplo:

Dim Var_1 As Integer ou Private Var_1 As Integer

Sub Ambito_Modulo()Var_1 = InputBox (Introduza um nmero Inteiro)Ambito_Modulo_2

End Sub

Sub Ambito_Modulo_2()MsgBox Foi este o nmero que introduziu: & Var_1

End Sub

Neste caso como a varivel reconhecida no mdulo por qualquer rotina nele existente, desde que seja referida sempre pelo mesmo nome, o procedimento Ambito_Modulo_2 ir exibir o valor introduzido pelo utilizador no procedimento Ambito_Modulo.

mbito do ProjectoAs variveis assim definidas tm o mbito correspondente a todo o projecto, isto podem ser acedidas e alteradas em todos e quaisquer mdulos. Para declarar variveis deste tipo dever faz-lo na seco Declarations de qualquer mdulo, para tal dever utilizar a palavra chave Public.

Exemplo:

No Module_1 tem-se:

Public Var_1 As Integer

Sub Ambito_Projecto()Var_1 = InputBox (Introduza um nmero Inteiro)Ambito_Projecto _2

End Sub

No Module_2 tem-se:

Sub Ambito_Projecto _2()MsgBox Foi este o nmero que introduziu: & Var_1

End Sub

A execuo do procedimento Ambito_Projecto no Module_1 mandou executar o procedimento Ambito_Projecto do Module_2, e o valor atribudo varivel Var_1 foi acedido posteriormente noutro procedimento de outro mdulo, dado tratar-se de uma varivel global.

DOMNIO DAS CONSTANTES semelhana das variveis tambm as constantes tm 3 nveis de domnio:

mbito do Procedimento ou Procedimental mbito do Modulo ou Modular mbito do Projecto

mbito do Procedimento

Estas constantes so declaradas no corpo do procedimento com recurso palavra chave Const. S tm existncia dentro do procedimento onde so declaradas.

Exemplo:

Sub Ambito_Procedimento()

Const Taxa_Desc As Single = 0.05Dim Desconto As Double

Desconto = InputBox (Introduza o montante das Compras) * Taxa_DescMsgBox O desconto de : & Desconto

End Sub

mbito do Mdulo

Uma constante com mbito do Mdulo pode ser utilizada por todas as rotinas existentes no mdulo onde definida.

Para declarar uma constante a nvel modular, dever declar-la com a palavra chave Const na seco Declarations do respectivo mdulo VBA. Neste caso qualquer constante a declarada ser considerada de nvel modular por defeito, para tornar esse facto mais explicito poder-se- utilizar a palavra chave Private na declarao:

Ex:Private Const Const_1 As String

mbito do Projecto

As constantes assim definidas tm o mbito correspondente a todo o projecto, isto podem ser utilizadas em todos e qualquer mdulo. Para definir constantes deste tipo dever faz-lo na seco Declarations de qualquer mdulo, para tal dever utilizar a palavra chave Public.

Ex:Public Const Const_1 As String

DOMNIO DE SUBROTINAS E FUNESEstas s tm dois nveis de Scope: o nvel do projecto e o nvel do mdulo.

Por defeito as rotinas so de mbito do projecto sem qualquer indicao adicional. Contudo poder tornar este facto mais explicito pela introduo da Palavra-Chave Public, que em termos operacionais no adicionar qualquer funcionalidade, mas em termos de leitura dar uma maior percepo.

Exemplo:

Public Sub Ambito_Procedimento()Const Taxa_Desc As Single = 0.05Dim Desconto As Double

Desconto = InputBox (Introduza o montante das Compras) * Taxa_DescMsgBox O desconto de : & Desconto

End Sub

Para que uma rotina tenha o mbito do mdulo onde est definida, dever ser antecedida pela palavra chave Private.

Estruturas deEstruturas de Controlo Controlo

O QUE SO ESTRUTURAS DE CONTROLO?

O VBA disponibiliza algumas estruturas que pode utilizar para controlar o decurso da execuo da rotina. Estas estruturas do ao programador um poder enorme para construir rotinas bastante complexas e flexveis.

QUAIS AS ESTRUTURAS

VBA Control

If -Then - Else Testa uma condio e executa um determinado conjunto de instrues consoante o resultado dessa avaliao

For Next Executa uma determinada tarefa um determinado nmero de vezes.

While-Wend Executa uma determinada tarefa enquanto que uma determinada condio permanea verdadeira, i.e., com o valor True.

Do Loop Executa uma determinada tarefa enquanto que a avaliao de uma condio permanea True ou ento at que seja True.

Select - Case Selecciona um dos segmentos de cdigo a processar mediante a avaliao consecutiva de condies.

For Each Next Realiza uma determinada tarefa repetitiva em cada objecto de uma coleco ou em cada item de um array.

IF-THEN-ELSE

Funo IF do Excel

Recorrendo funo IF do Excel, recorde:

=IF( , , )

A funo IF tinha o seguinte comportamento:

1. Avalia a condio, que dever ser uma expresso booleana colocada como primeiro parmetro;

2. Se a condio for verdadeira, ento (then) realiza as operaes colocadas no segundo parmetro;

3. Caso contrrio (else), realiza as operaes que formam o terceiro parmetro

A estrutura IF do VBA tem o mesmo tipo de funcionamento, o que difere a sintaxe.

Sintaxe da Estrutura If-Then-Else

If Then

[ Else ]

End If

A palavra Else opcional num If-Then-Else Statement, sendo que no caso de ser omitida, a avaliao negativa da condio implica uma sada automtica da Instruo If.

Aplicao Prtica

Figura 26 Aplicao Prtica com um IF

A rotina Aposta recebe uma aposta do utilizador e mediante o Sorteio a realizar pela respectiva funo, verifica se o jogador ganhou ou no a aposta, comunicando-lhe esse facto.

Para uma maior clarificao do funcionamento do IF, atenda ao quadro seguinte:

If Palavra chave que indica o inicio de uma instruo If-Then-Else

Nsorteio = NAposta A condio a testar. Serve para determinar a sequncia a dar execuo da rotina. Da avaliao desta condio pode-se obter um de dois valores True ou False, sendo que depende deste resultado o caminho a prosseguir. Se for True executar as instrues que seguirem a palavra-chave Then at encontrar a palavra chave Else, no executando mais nada dentro do IF, caso contrrio executar o cdigo que se seguir palavra chave Else at ao End If.

Then Palavra chave que determina o fim da condio teste. Todas as instrues que tm inicio nesta palavra-chave at palavra-chave Else sero executadas se a condio for verdadeira.

MsgBox Parabns!! Acertou em cheio! O nmero sorteado foi o &NSorteio

Instrues a executar se a condio for verdadeira.

Else Palavra-chave que determina o terminus de execuo das instrues quando o resultado da avaliao for True, e que determina o inicio das instrues a executar se o resultado da condio for False.

MsgBox Continue a Tentar!! O nmero sorteado foi o &NSorteio

Instrues a executar se a condio for falsa.

End If Palavra-chave que indica o fim do controlo de If-Then-Else e como tal onde se deve retomar as instrues para prosseguir a execuo do procedimento.

A instruo adicional ElseIf

Esta instruo prope uma condio alternativa se o teste da condio anterior tiver tido um resultado negativo.

APLICAO PRTICAPretende-se criar uma macro que classifique etariamente um indivduo em funo da sua idade. A classificao pretendida a seguinte:

Idade Classe EtriaMenos de 3 anos BebDos 3 aos 12 CrianaDos 13 aos 17 AdolescenteDos 18 aos 25 JovemDos 26 aos 65 AdultoMais de 65 Idoso

Figura 27 Aplicao Prtica com ElseIf

FOR NEXTPermite a execuo de uma tarefa durante um determinado nmero de vezes.

Sintaxe

For To [ Step ]

Next

Aplicao Prtica

Pretende-se criar uma rotina que recebendo a base e a potncia calcule o valor respectivo.

Figura 28 Procedimento que calcula a potncia de um nmero

A instruo For-Next tem como funo calcular a potncia. O mesmo efeito poderia ser obtido recorrendo expresso Resultado = Base ^ Potncia, contudo para fins de demonstrao de funcionamento este exemplo bastante simples.

A FUNO DAS VARIVEIS:Varivel Funo

Base Elemento a elevar.Potncia Nmero de vezes a multiplicar a base.Contador Conta o nmero de vezes que a base j foi multiplicada, uma

varivel que ser automaticamente incrementada em cada looping do ciclo.

Resultado Varivel que armazena o resultado sucessivo por cada vez que se multiplica.

CONSTRUO DO CICLO:For Palavra-chave que indica o inicio do ciclo For-Next

Contador = 1 To Potncia Expresso que contm a inicializao do contador, indicando o valor de inicio e de fim. Assim, o nmero de vezes que o ciclo executado ser: Valor_Fim Valor_Inicio +1.

A palavra To utilizada para separar o valor do contador no momento inicial do valor no momento final. (Traduo: O contador iniciar-se- a um e atingir o valor mximo traduzido pela varivel Potncia)

Step 1 Palavra chave utilizada para especificar o valor a incrementar ou decrementar ao contador do ciclo por cada vez que o loop concretizado. Normalmente o valor a incrementar um, contudo qualquer outro valor pode ser utilizado, desde nmeros decimais, a nmeros negativos (Provocando assim a decrementao). A palavra-chave Step opcional, sempre que for omitida assumido 1 como o valor a incrementar por defeito.

Resultado = Resultado * Base

Instruo a realizar de cada vez que o ciclo for executado. Neste caso a instruo nica, contudo poder-se-o adicionar outras instrues.

Next Palavra Chave que indica o fim de um ciclo For-Next . Sempre que a execuo do ciclo chega instruo Next incrementa a varivel contador e volta ao inicio do ciclo.

TRADUO INTEGRAL

For Contador = 1 To Potncia Step 1Resultado = Resultado * Base

Next

Para o nmero de vezes, a iniciar em 1 at que atinja, o valor Potncia, pela incrementao de 1 na execuo de cada ciclo, dever multiplicar sucessivamente o resultado acumulado, pela base.

Funcionamento do Ciclo:

A primeira execuo do ciclo distingue-se das restantes por a ela estar associada a inicializao do contador, sendo o restante procedimento semelhante a qualquer outra execuo.

No inicio de cada execuo do ciclo, a varivel contador comparada com o valor final de execuo. Se o Step for um valor positivo (incrementar) e o valor do contador for superior ao valor final significa que o ciclo j foi realizado o nmero de vezes pretendido, e ento o cdigo acabar a execuo da instruo For-Next e seguir na linha de cdigo que esteja situada imediatamente a seguir, caso contrrio executa uma vez mais o ciclo e incrementa a varivel contador. Por outro lado, se o Step contiver valor negativo (decrementar) e o valor do contador for inferior ao valor final significa que o ciclo j foi realizado o nmero de vezes pretendido, e ento o cdigo acabar a execuo da instruo For-Next e seguir na linha de cdigo que esteja situada imediatamente a seguir, caso contrrio executa uma vez mais o ciclo e decrementa a varivel contador.

Perigos associados utilizao do ciclo For-Next:

No definir o limite de execuo (no atribuir valor varivel que o define) Definir erroneamente o Step, por forma a que nunca seja obtido o valor que determina o fim da

execuo estas condies implicaro que o ciclo no tenha fim Ciclos Infinitos

Outra Aplicao

Pretende-se criar uma rotina para calcular um factorial.

Figura 29 Procedimento que calcula o factorial

WHILE-WEND

A estrutura While-Wend tem um funcionamento similar ao For-Next. Realiza um looping um determinado nmero de vezes, at que uma determinada condio seja verdadeira.

Sintaxe

While

Wend

Aplicao Prtica

Figura 30 Procedimento Lotaria Viciada

A instruo While-Wend tem como funo gerar nmeros aleatrios entre 1 e 10 por forma a encontrar o nmero da aposta, e saber qual o nmero de lanamentos necessrios para que aquele valor fosse obtido.

A FUNO DAS VARIVEIS:Varivel Funo

Num_Lotaria Nmero sorteado. Este ser inicializado a 0 por forma a que no corresponda a nenhum valor introduzido pelo utilizador e assim possa realizar o primeiro sorteio.

Aposta Nmero em que o utilizador pretende apostar.

Num_Lanc Nmero de lanamentos realizados at obter o resultado da aposta. Este valor tem de ser incrementado cada vez que realizado um sorteio.

CONSTRUO DO CICLO:While Palavra-chave que indica o inicio do ciclo While-

Wend

Num_Lotaria Aposta Condio teste utilizada para determinar o terminus da realizao do ciclo. Se esta condio for Verdadeira executa as instrues que esto dentro do While-Wend, se for Falsa a execuo do ciclo terminada tendo o programa sequncia nas instrues que seguem a palavra chave Wend.

Num_Lotaria = Int ( 9 * Rnd() + 1 ) Instruo a realizar de cada vez que o ciclo executado. Tem como funo gerar nmeros aleatrios entre 1 e 10.

Num_Lanc = Num_Lanc +1 Instruo a realizar de cada vez que o ciclo executado. Tem como funo fazer a contagem de quantos lanamentos foram realizados at se obter o valor da aposta.

Beep Instruo a realizar de cada vez que o ciclo executado. Tem como funo apitar em cada sorteio.

Wend Palavra Chave que indica o fim de um ciclo While-Wend.

TRADUO INTEGRALWhile Num_Lotaria Aposta

Num_Lotaria = Int ( 9 * Rnd() + 1 )Num_Lanc = Num_Lanc +1Beep

Wend

Enquanto o nmero sorteado no for igual ao valor da aposta, o sorteio continua, o que implica sortear um nmero contabilizar o nmero de sorteios realizados e apitar para que o utilizador tenha a percepo do que est a ser realizado.

Funcionamento do Ciclo

Existe uma fase de inicializao das variveis envolvidas na condio Teste para garantir o correcto funcionamento do ciclo.

Avalia a condio teste e se for verdadeira executa todas as instrues at palavra-chave Wend voltando de novo avaliao da condio, se for falsa prossegue a execuo da rotina nas instrues que se localizam depois da palavra-chave Wend.

Perigos associados utilizao do ciclo While-Wend

M ou inexistncia de inicializao das variveis envolvidas na condio-teste. Garantir que as variveis envolvidas na condio teste podero ter valores diferentes por cada vez

que o ciclo seja executado. Garantir que em algum momento a condio teste falsa e o ciclo termina a sua execuo.

A no verificao destas condies implicar que o ciclo no tenha fim Ciclos Infinitos

Outra Aplicao

Pretende-se realizar um jogo de geografia. Tente compreender o seu funcionamento.

Figura 31 Corpo do jogo

Figura 32 Funo Auxiliar

DO LOOPEsta estrutura similar estrutura do While-Wend. Contudo fornece duas possibilidades que esto limitadas quela estrutura:

Do Loop permite posicionar a condio teste no inicio ou fim do loop, a condio no fim do Loop evita uma inicializao prvia do valor das variveis envolvidas na condio teste, dado que essa inicializao pode ser feita no decurso do ciclo com valores reais.

Do Loop permite ainda especificar se o loop se vai realizar enquanto (while) uma expresso for verdadeira ou at que (until) a condio seja verdadeira (facilidade conseguida atravs do operador Not)

Sintaxe

Poder ser:

Do [{While | Until} ]

Loop

Ou ento:

Do

Loop[{While | Until} ]

Aplicaes Prticas

Utilizando a condio teste no inicio do Loop e com a palavra While

Figura 33 Condio teste no inicio com While

Utilizando a condio teste no inicio do Loop e com a palavra Until

Figura 34 Condio teste no inicio com Until

Utilizando a condio teste no fim do Loop e com a palavra Until

Figura 35 Condio teste no fim com Until

Utilizando a condio teste no fim do Loop e com a palavra While

Figura 36 Condio teste no fim com While

SELECT CASEPermite a escolha de um percurso mediante a avaliao de n condies. de extrema utilidade para evitar os Ifs encadeados, dando um maior grau de legibilidade e simplicidade ao cdigo construdo.

Sintaxe

Select Case

[Case [Instrues a realizar]]

...[Case Else

[Instrues a realizar na situao residual]]

End Select

Aplicao Prtica

Recordem o processo resolvido com recurso a If Then Else ElseIf (figura 23)Mais facilmente seria resolvido com recurso estrutura Select Case

Figura 37 Aplicao da estrutura Select Case rotina Classe_Etaria

CONSTRUO DA ESTRUTURASelect Case Palavras-Chave que indicam o inicio de um controlo

Select Case

Idade Expresso sujeita a teste, i.e., varivel cujo contedo est a ser avaliado. Esta varivel vai ser comparada sucessivamente pelos valores alternativos apresentados nas instrues Case , se encontrar o valor nalguma dessas opes Case executar as linhas de cdigo que a tero inicio at opo de Case seguinte. Caso o valor da varivel a ser comparada no corresponda a nenhum valor apresentado nas opes Case, existe uma opo Case especial - Case Select - para os restantes valores, neste caso sero executadas todas as instrues que se localizem entre o Case Else e o Case Select.

Case Is