1
Introdução
Este livro de programação avançada completa a trilogia de Excel para Economia & Gestão, que tem em vista a promoção das folhas de cálculo como instrumentos poderosos a actuarem na formulação, experimentação e automatização de soluções para questões de Economia e de Gestão. O primeiro livro, Exercícios Resolvidos com Excel para Economia & Gestão, fomenta a utilização das folhas de cálculo, ilustrando as facilidades do Microsoft Office 2007, através da resolução de exercícios de aplicação variada nas áreas da Economia e da Gestão e disciplinas auxiliares. A prática subjacente à resolução destes exercícios conduz, naturalmente, o utilizador à procura de meios de automatização de tarefas morosas e à definição de funções que satisfaçam cálculos específicos. O segundo livro, Programação com Excel para Economia & Gestão Volume I, potencia a utilização do Excel através da programação em Visual Basic for Applications. O VBA, linguagem de programação embutida naquela aplicação da Microsoft, aliada à metodologia Top-down e à algoritmia, possibilita a automatização e a extensão das funcionalidades do Excel. O paradigma da programação estruturada, que assenta naquelas metodologias, apresenta-se ao utilizador como um desafio ao desenvolvimento de programas que especializem as funcionalidades genéricas do Excel com vista à resolução eficiente e eficaz de problemas concretos. O terceiro livro, Programação com Excel para Economia & Gestão Volume II, combina os três paradigmas de programação: programação estruturada, programação orientada por objectos e programação guiada por eventos – que o VBA suporta para progredir na automatização e extensão das funcionalidades do Excel. O VBA não é uma linguagem de programação inteiramente orientada por objectos, nem inteiramente guiada por eventos. Porém, o VBA permite a manipulação do modelo de objectos embutido no Excel, a definição de novas classes de objectos e o desenvolvimento de interacções entre estes dois modelos, constituindo uma poderosa ferramenta de desenvolvimento de soluções de informática. Os eventos são também objectos, o que alarga o espectro de actuação desta ferramenta. Por outro lado, a tecnologia de Automation que o VBA serve, permite que o Excel use as funcionalidades de outras aplicações como se fossem genuinamente suas. O Programação com o Excel para Economia & Gestão Volume II visa, assim, explicar o desenvolvimento de interacções entre o modelo de objectos do Excel com as classes de objectos definidas pelo utilizador e com os modelos de objectos © FCA - Editora de Informática
1
Programação com Excel para Economia & Gestão Volume II de outras aplicações da Microsoft. Caminhamos, por conseguinte, para a personalização do Excel no sentido de especializarmos esta poderosa aplicação genérica no desenvolvimento de problemas concretos de Economia e de Gestão. O estudo do Programação com Excel para Economia & Gestão Volume II consiste em dez capítulos organizados como mostra Fig. 1.1. Conclusões e lições para o futuro
10. Reflexões sobre a Programação com o Excel 8. Programação de Interfaces Gráficas
Programação para o Excel
6. Interfaces Gráficas
9. Integração do Excel com Outras Aplicações 7. Programação de Componentes Projectos
5. Programação para Objectos e Eventos 4. Programação Guiada por Eventos Paradigmas de Programação
3. Programação Orientada por Objectos 2. Programação Estruturada
Programação para Economia & Gestão
1. Introdução
Fig. 1.1: Estrutura do Programação com Excel para Economia & Gestão Volume II
O estudo remanescente do Programação Volume II desenvolve-se nos seguintes capítulos que sumariamos sucintamente: Os capítulos 2, 3 e 4 caracterizam os paradigmas de programação que fornecem os métodos e as ferramentas para a automatização e a extensão das funcionalidades do Microsoft Excel 2007. O Capítulo 2 revê as figuras fundamentais da programação estruturada e a sua implementação em VBA para o Excel. Explica concisamente os diversos tipos de dados, as operações de que podem ser operandos, as estruturas de controlo de execução, a programação modular e as estruturas lineares de dados. Cria, por conseguinte, a infra-estrutura de conceitos que sustenta a subsequente exploração dos paradigmas de programação orientada por objectos e de programação guiada por eventos. O Capítulo 3 explica os conceitos de classe e de objecto, e os princípios fundamentais da Programação Orientada por Objectos. Explica a abstracção, a encapsulação, a herança e o polimorfismo, e discute e ilustra a sua implementação em VBA para o Excel. 2
© FCA – Editora de Informática
Introdução O Capítulo 4 explica os conceitos de eventos e de resposta a eventos, e as figuras de publicação, notificação e subscrição de eventos. Ilustra a sua implementação em VBA para o Excel, elaborando respostas de execução automática para várias categorias de eventos, nomeadamente eventos predefinidos para o modelo de objectos do Excel, eventos temporais, erros e eventos definidos pelo utilizador. Com esta infra-estrutura de conhecimento, os capítulos 5 e seguintes, até ao 9, demonstram a manipulação programática do modelo de objectos do Excel e dos objectos instanciados de classes definidas pelo utilizador. Objectos, eventos, componentes dos projectos de VBA e a sua integração com modelos de objectos de outras aplicações da Microsoft são programados com vista à automatização crescente e expansão das funcionalidades do Excel. O Capítulo 5 combina a programação orientada por objectos com a programação guiada por eventos para explicar a funcionalidade de vários objectos do modelo de classes e subclasses do Excel, nomeadamente livros, folhas de cálculo e ranges. Cria novas classes que interagem entre elas e com o modelo de objectos do Excel, promovendo a encapsulação e a reutilização de código de VBA. O Capítulo 6 apresenta as interfaces gráficas e os controlos gráficos que nelas podem ser colocados para leitura e afixação de dados. Insiste na manipulação das propriedades e dos métodos que as interfaces e os controlos gráficos expõem, e estende as suas funcionalidades através da elaboração de procedimentos de resposta aos eventos predefinidos. O Capítulo 7 apresenta uma visão parcial e simplificada da biblioteca de objectos VBIDE que nos permite manipular, em tempo de execução, as componentes dos programas de VBA, nomeadamente os projectos e os módulos standard, módulos de classe e os módulos de código associados aos livros e folhas de cálculo. Propõe procedimentos que listam as propriedades das componentes internas e externas que determinado projecto referencia, procedimentos que adicionam e removem essas referências, e procedimentos que geram e alteram linhas de código de VBA. O Capítulo 8 instancia e manipula UserForms e controlos gráficos em tempo de execução, recorrendo à programação das componentes dos projectos de VBA e à programação de objectos e eventos. Apresenta vários exemplos para demonstrar a efectuação das operações principais com UserForms e controlos em tempo de execução. O Capítulo 9 expande as capacidades do Excel, a jusante e a montante da efectuação de cálculos, integrando, por referenciação e aplicação do paradigma da programação orientada por objectos, outros pacotes da Microsoft que se baseiam na tecnologia Automation. Ilustra esta integração com vários exemplos de © FCA - Editora de Informática
3
Programação com Excel para Economia & Gestão Volume II processamento em que o Excel usa o Word, o PowerPoint e o Visio do Microsoft Office para escrever textos, apresentar slides e desenhar diagramas. Finalmente, o Capítulo 10 sumaria a aprendizagem da programação com o Excel e reflecte sobre a integração orientada por objectos de várias aplicações. O Excel surge como componente de soluções de software para problemas específicos, relegando para planos inferiores as suas características gerais de pacote que serve todos os problemas.
4
© FCA – Editora de Informática
6
Interfaces Gráficas Definidas pelo Utilizador
[…]
Botão de interruptor Um botão de interruptor – Toggle Button – tem dois estados possíveis, verdadeiro e falso, que alternam entre escolhas sucessivas. A Fig. 6.7 mostra os estados possíveis de um botão de interruptor: •
botão, inicialmente no estado de desligado ou falso, passa ao estado de ligado ou verdadeiro se for premido;
•
estado alterna quando o botão é premido sucessivamente.
Neste exemplo, a mudança de estado do botão de interruptor altera a designação inscrita no botão e a cor do fundo do UserForm.
Private Sub ToggleButton1_Click() Rem Instruções de resposta ao clique do botão End Sub
Fig. 6.7: UserForm com um botão de interruptor que responde ao clique do botão.
Botão giratório O botão giratório – SpinButton – é composto por duas setas, em direcções opostas, que permitem incrementar ou decrementar um valor. A Fig. 6.8 mostra a incrementação sucessiva de um valor por acção de um botão giratório.
Private Sub SpinButton2_Change() © FCA - Editora de Informática
117
Programação com Excel para Economia & Gestão Volume II Rem Instruções de resposta à alteração do valor End Sub
Fig. 6.8: UserForm com um botão giratório que responde à incrementação e decrementação de um valor
Programas de aplicação 1. Inquérito sobre grupos etários Desenhe a seguinte interface gráfica:
Criação de um UserForm com as seguintes propriedades: Name
Caption
UFidades
Inquérito
Width
Height
170
160
UserForm
Colocação, neste UserForm, de um caixilho com seis botões de opção e um botão de interruptor com as seguintes propriedades: Control
118
Name
Caption
Group Name
Tab Index
Width
Height
144
84
Frame1
FRidade
Idade
OptionButton
OP1
<20
Idade
1
38
18
OptionButton
OP2
20-35
Idade
2
38
18
OptionButton
OP3
36-45
Idade
3
38
18
OptionButton
OP4
46-59
Idade
4
38
18
OptionButton
OP5
60-70
Idade
5
38
18
© FCA – Editora de Informática
Interfaces Gráficas Definidas pelo Utilizador OptionButton
OP6
>70
ToggleButton
TB1
Menos
Idade
6
38
18
33
52
Colocação, neste UserForm, de três botões de comando com as seguintes propriedades: Control
Name
CommandButton
CBgrav
CommandButton CommandButton
Caption
Group Name
Tab Index
Width
Height
Gravar
30
24
CBprox
Próximo
36
24
CBfim
Fim
24
24
2. Funcionalidade do botão de interruptor Relativamente à interface gráfica desenhada no exercício anterior, atribua ao botão de interruptor a seguinte funcionalidade: •
Premir o botão com a inscrição Menos diminui o número de escalões etários, estreitando o UserForm e o caixilho de opções. O botão passa a oferecer a opção de aumento;
•
Premir o botão com a inscrição Mais aumenta o número de escalões etários, alargando o UserForm e o caixilho de opções. O botão passa a oferecer a opção de diminuição.
O procedimento TB1_Click, residente no módulo de código de UFidades, diminui e aumenta, alternadamente, a largura do userform e do caixilho de opções. Private Sub TB1_Click() If TB1.Caption = "Mais" Then TB1.Caption = "Menos" Me.Width = 170 FRidade.Width = 144 Else TB1.Caption = "Mais" Me.Width = 110 FRidade.Width = 95 End If End Sub
© FCA - Editora de Informática
119
7
Programação de Componentes de Projectos de VBA
[…]
7.3.4. MANIPULAÇÃO PROGRAMÁTICA DE CÓDIGO DE VBA O modelo de objectos da VBIDE contém classes que permitem criar, substituir e apagar linhas de código de VBA em tempo de execução. Demonstramos estas operações através de pequenos programas que referenciam módulos standard, módulos de classe e módulos de código, associados a folhas de cálculo e a interfaces gráficas.
Geração de código de VBA VarModulo.AddFromString Arg1 Arg1 – variável alfanumérica
adiciona as instruções de VBA guardadas numa variável alfanumérica ao final do módulo. O procedimento GerarCodigo cria, no módulo standard NovoCodigo, o procedimento Mensagem. Sub GerarCodigo() Dim CM As CodeModule, Prog As String Set CM=Application.VBE.ActiveVBProject. VBComponents("NovoCodigo").CodeModule Prog = "Public Sub Mensagem" + chr(13) Prog = Prog + "Msgbox ""Ola, boa tarde""" + Chr(13) Prog = Prog + "End Sub" CM.AddFromString Prog End Sub
Este procedimento gera, em tempo de execução, o seguinte procedimento no módulo NovoCodigo do projecto activo: Public Sub Mensagem() MsgBox "Olá, boa tarde!" End Sub
© FCA - Editora de Informática
169
9
Integração do Excel com outras Aplicações da Microsoft
O Excel pode expandir as suas capacidades, integrando as funcionalidades das outras aplicações do Microsoft Office. Pode, por exemplo, entrelaçar as suas capacidades de cálculo com as capacidades do Word, do PowerPoint ou do Visio para ler dados registados em textos, slides ou desenhos gráficos, e também para apresentar o resultado dos seus processamentos. Assim, o Excel pode ler dados de um documento do Word, processá-los e afixar os resultados do processamento em slides do PowerPoint, em diagramas do Visio ou mesmo devolvê-los ao Word. O Excel pode, pois, adquirir capacidades a montante e a jusante, e manipulá-las como se fossem suas, beneficiando das faculdades específicas de outras aplicações. Esta integração de funcionalidades é possível entre aplicações que suportem a tecnologia Automation da Microsoft, e obedece aos princípios da Programação Orientada por Objectos.
9.1. MANIPULAÇÃO DE OBJECTOS DE OUTRAS APLICAÇÕES O Excel pode expandir as suas capacidades, integrando e manipulando como se fossem suas as funcionalidades das outras aplicações da Microsoft, nomeadamente as aplicações do Microsoft Office. O Excel pode, por conseguinte, alargar as suas capacidades a jusante para afixar os resultados dos seus cálculos em textos, slides, diagramas, etc. Pode também expandir as suas capacidades a montante, integrando as capacidades específicas de outras aplicações para ler dados registados em textos, bases de dados, slides, diagramas, etc. A Fig. 9.1 ilustra a expansão do Excel, a montante e a jusante, por integração com o Visio. Neste exemplo, o Excel acede aos coeficientes de uma equação de 2º. grau que estão gravados num diagrama do Visio, calcula as raízes da equação e devolve os resultados ao mesmo diagrama do Visio. Este processo de leitura de dados gravados no Visio, o seu processamento no Excel e a afixação de resultados, novamente no Visio, processa-se automaticamente sem que o utilizador seja chamado a intervir, sem duplicação de código ou de dados e sem ficheiros intermédios. À vista do utilizador tudo se processa como se o Visio fizesse parte integrante do Excel.
© FCA - Editora de Informática
241
Programação com Excel para Economia & Gestão Volume II
Fig. 9.1: O Excel instancia o diagrama do Visio, lê os coeficientes da equação de 2º. grau, calcula as raízes e imprime-as no mesmo diagrama.
Esta integração de funcionalidades é possível entre aplicações que suportem a tecnologia Automation da Microsoft, e obedece aos princípios da Programação Orientada por Objectos: •
Cada aplicação expõe-se, perante as outras aplicações, como um objecto com propriedades e métodos que pode ser instanciado, referenciado e manipulado;
•
A aplicação constituiu-se como o objecto raiz que dá acesso a todo o seu modelo hierárquico de objectos;
•
O modelo hierárquico de objectos da aplicação pode ser instanciado e manipulado por outras aplicações através das propriedades e métodos que expõe.
Assim, programas escritos em linguagens, tais como o VBA, permitem ao Excel instanciar outras aplicações e operar os seus modelos de objectos como se fossem genuinamente seus. O Excel pode, por exemplo, instanciar o Visio, formatar uma das suas figuras geométricas invocando os respectivos métodos e atribuir à propriedade Text dessa figura o valor de um dos seus ranges. O procedimento CalculoMedia, escrito em VBA, permite ao Excel inscrever num rectângulo do Visio, o valor da média aritmética do range A1:A4. O Excel instancia o Visio, desenha um rectângulo no documento activo do Visio e atribui à sua propriedade Text o valor da média. Sub CalculoMedia() Dim R As Range, Media As Double Set R = Sheets(1).Range("a1:a4") Media = WorksheetFunction.Average(R) Call ImpressaoNoVisio(Media): End Sub 242
© FCA – Editora de Informática