Baixe o app para aproveitar ainda mais
Prévia do material em texto
COD.: TE 1625/1_WEB Excel VBA - Módulo II Excel VBA - Módulo II Créditos Excel VBA - Módulo II Copyright © TechnoEdition Editora Ltda. Todos os direitos autorais reservados. Este manual não pode ser copiado, fotocopiado, reproduzido, traduzido ou convertido em qualquer forma eletrônica, ou legível por qualquer meio, em parte ou no todo, sem a aprovação prévia, por escrito, da TechnoEdition Editora Ltda., estando o contrafator sujeito a responder por crime de Violação de Direito Autoral, conforme o art.184 do Código Penal Brasileiro, além de responder por Perdas e Danos. Todos os logotipos e marcas utilizados neste material pertencem às suas respectivas empresas. “As marcas registradas e os nomes comerciais citados nesta obra, mesmo que não sejam assim identificados, pertencem aos seus respectivos proprietários nos termos das leis, convenções e diretrizes nacionais e internacionais.” Coordenação Geral Marcia M. Rosa Coordenação Editorial Henrique Thomaz Bruscagin Supervisão Editorial Simone Rocha Araújo Pereira Este material constitui uma nova obra e é uma derivação da seguinte obra original, produzida por TechnoEdition Editora Ltda. em Mai/2011: Excel 2010 VBA – Módulo II Autoria: Hildebrando Rodrigues da Mota Atualização Beatriz Silva Ramos Diagramação Bruno de Oliveira Santos Edição nº 1 | Cód.: 1625/1_WEB outubro/ 2013 Sumário Informações sobre o curso ..................................................................................................... 07 Capítulo 1 - A linguagem SQL ................................................................................................ 09 1.1. Introdução ...........................................................................................10 1.2. Visão Geral da Linguagem SQL ..............................................................11 1.3. Conceitos do SQL ..................................................................................12 1.3.1. Tabela ...................................................................................................12 1.3.2. Campo ..................................................................................................13 1.3.3. Registro ................................................................................................13 1.3.4. Banco de dados .....................................................................................14 1.3.5. Base de Dados ......................................................................................15 1.3.6. Sistema de gerenciamento de banco de dados ......................................15 Pontos principais ........................................................................................................................ 16 Teste seus conhecimentos...................................................................................................... 17 Capítulo 2 - Consultas SQL ..................................................................................................... 23 2.1. Introdução ............................................................................................24 2.2. O que é uma consulta SQL ....................................................................24 2.3. A cláusula SELECT .................................................................................24 2.4. A cláusula FROM ...................................................................................25 2.5. A cláusula WHERE ..................................................................................26 2.5.1. Trabalhando com critérios ....................................................................27 2.5.2. Operadores na cláusula WHERE .............................................................28 2.5.2.1. Operador BETWEEN ...............................................................................29 2.5.2.2. Operador LIKE e os curingas .................................................................29 2.5.2.3. Operador IN ..........................................................................................30 2.6. A cláusula ORDER BY .............................................................................30 2.6.1. A palavra-chave DESC ............................................................................31 2.6.2. A instrução TOP ....................................................................................32 Pontos principais ........................................................................................................................ 34 Teste seus conhecimentos...................................................................................................... 35 Capítulo 3 - DAO – Data Access Object ............................................................................. 39 3.1. Introdução ............................................................................................40 3.2. Modelo de objetos DAO ........................................................................41 3.3. Importando dados de uma base Access .................................................43 3.3.1. Configurações iniciais ...........................................................................43 3.3.2. Construindo o código VBA ....................................................................45 Pontos principais ........................................................................................................................ 52 Mãos à obra! .................................................................................................................................. 53 6 Excel VBA - Módulo II Capítulo 4 - ADO - ActiveX Data Objects .......................................................................... 55 4.1. Introdução ............................................................................................56 4.2. O objeto Connection ADO .....................................................................56 4.2.1. Especificando um provedor OLE DB e uma string de conexão ................56 4.3. Importando dados de uma base Access .................................................58 4.3.1. Configurações iniciais ...........................................................................58 4.3.2. Código VBA – String de conexão ...........................................................60 4.3.2.1. Código VBA – Objeto Recordset .............................................................61 Pontos principais ........................................................................................................................ 67 Mãos à obra! .................................................................................................................................. 69 Capítulo 5 - Importando dados de um arquivo TXT .................................................... 71 5.1. Introdução ...........................................................................................72 5.2. Preparando o ambiente .........................................................................72 5.3. Construindo a rotina .............................................................................73 5.4. Atribuindo a rotina a um controle de formulário ...................................77 Pontos principais ........................................................................................................................ 80 Mãos à obra! .................................................................................................................................. 81 Capítulo 6 - Importando dados de um arquivo XLS ..................................................... 83 6.1. Introdução ...........................................................................................84 6.2. Preparando o ambiente .........................................................................84 6.3. Construindo a Rotina ............................................................................86 Pontos principais ........................................................................................................................89 Mãos à obra! .................................................................................................................................. 91 Capítulo 7 - Inserindo gráficos em formulários ............................................................ 93 7.1. Introdução ...........................................................................................94 7.2. Preparando o gráfico .............................................................................94 7.3. O formulário de controle .......................................................................95 7.4. O formulário Gráfico .............................................................................99 Pontos principais ........................................................................................................................ 104 Mãos à obra! .................................................................................................................................. 105 Capítulo 8 - Criando e manipulando classes .................................................................. 107 8.1. Programação orientada a objeto ............................................................108 8.2. Conceito de classe de objetos ...............................................................109 8.2.1. Classe ...................................................................................................109 8.2.2. Objeto ..................................................................................................110 8.2.3. Coleções ...............................................................................................111 8.2.4. Parent e Child .......................................................................................111 8.2.5. Propriedades, métodos e eventos ..........................................................112 8.3. Criando uma propriedade .....................................................................112 Pontos principais ........................................................................................................................ 116 Mãos à obra! .................................................................................................................................. 117 Informações sobre o curso Excel VBA - Módulo II 7 Informações sobre o curso Para que os alunos possam obter um bom aproveitamento deste curso de Excel VBA - Módulo II, é imprescindível que eles tenham participado do nosso curso de Excel VBA - Módulo I, ou possuam conhecimentos equivalentes. 1 9 Visão geral da linguagem SQL; 9 Conceitos do SQL. A linguagem SQL 10 Excel VBA - Módulo II 1. A linguagem SQL 1.1. Introdução Ao criar um projeto em Excel + VBA, podem surgir necessidades específicas em que o uso de banco de dados é funcional; por exemplo, quando devem existir tabelas e, dada a quantidade de dados, devem ser realizadas consultas nelas. Mas, e agora, será que vamos precisar usar outro software? Não necessariamente, pois esse procedimento pode ser feito dentro do VBA, especificamente por meio da linguagem SQL, que será a grande responsável por fazer esse “trabalho” para nós. Antes de tudo, vamos entender como funciona a linguagem SQL. SQL significa Linguagem Estruturada de Consulta ou, em inglês, Structured Query Language e sua finalidade, como o próprio nome sugere, é facilitar o acesso a informações (por meio de consultas, atualizações e manipulações de dados) armazenadas em bancos de dados do tipo relacional. Bancos de dados relacionais são aqueles que armazenam os dados e informações em tabelas, as quais são formadas por linhas e colunas. As colunas representam os campos da tabela, como Nome, Endereço, Telefone, etc. As linhas representam os registros, que são os dados de uma tabela, por exemplo, Simone Alves, Rua Patriota 35, 5454-5454. A linguagem de consulta estruturada SQL teve sua origem nos laboratórios da IBM, em meados da década de 70, com a linguagem SEQUEL, desenvolvida por Donald Chamberlin e sua equipe. Essa linguagem evoluiu até o mês de novembro de 1976, no qual a IBM apresentou oficialmente a linguagem SQL. Na época de seu desenvolvimento, a IBM era considerada a maior empresa de computadores e, devido ao seu peso no mercado, a linguagem SQL tornou-se padrão mundial. Porém, a grande aceitação dessa linguagem pelo mercado gerou um problema: cada empresa passou a incorporar comandos próprios à linguagem SQL, tornando-a despadronizada em relação à sua forma original. Para solucionar este problema, em 1982, o instituto ANSI (American National Standards Institute), por intermédio do Comitê para Banco de Dados X3H2, passou a estabelecer normas e critérios técnicos para definir os padrões para a linguagem de consulta SQL, denominada, então, ANSI/SQL. Concluídos os trabalhos de padronização em 1986, criou-se o padrão oficial para linguagem de consulta estruturada SQL, denominada SQL/86 em alusão ao ano de sua padronização. 11 A linguagem SQL 1 No ano seguinte, o instituto ANSI, juntamente com a organização ISO (Internacional Standards Organizations), trabalhou para determinar uma extensão ao padrão da linguagem dessa consulta, gerando um segundo padrão denominado SQL/89 (em referência ao ano de conclusão). Os comitês ISO e ANSI continuaram seus trabalhos para determinar novas expansões, agregando as informações passadas pelo mercado. Assim, em 1992, apresentaram um novo padrão denominado SQL2 (SQL/92), sendo o terceiro padrão para a linguagem de consulta estruturada SQL. Por fim, em 1999, surge oficialmente o quarto padrão da linguagem SQL, denominado SQL3 ou SQL/99. 1.2. Visão Geral da Linguagem SQL A linguagem SQL é composta por dois grupos de instruções para gerenciar os processos de administração e controle de bancos de dados. São elas: DDL e DML. A DDL (Data Definition Language ou Linguagem de Definição de Dados) engloba as instruções que permitem efetuar a criação das estruturas de tabelas, de índices e de bancos de dados em geral, além de possibilitar alterações nas estruturas criadas e a remoção das estruturas existentes. Nesse grupo, encontramos as instruções CREATE TABLE, DROP TABLE, ALTER TABLE, CREATE INDEX e DROP INDEX. As instruções tipo DML (Data Manipulation Language ou Linguagem de Manipulação de Dados) possibilitam executar a manipulação dos dados que estejam armazenados nas tabelas de um determinado banco de dados. Sendo assim, é possível cadastrar, alterar e excluir registros existentes. Nesse grupo encontram-se as instruções INSERT, SELECT, UPDATE e DELETE. Os comandos DML são acompanhados de uma gama de cláusulas que os tornam muito flexíveis. São elas: FROM, WHERE, GROUP BY, HAVING e ORDER BY, as quais possibilitam efetuar a aplicação de condições que alteram a forma de funcionamento das consultas. Não são muitos os comandos existentes na linguagem SQL. Porém, entre eles, o SELECT é o mais importante e o que mais vezes será citado neste treinamento, pois é com ele que se obtém a extração de registros de bases de dados. 12 Excel VBA - Módulo II Neste treinamento, abordaremos apenas as instruções do tipo DML, pois nosso foco é a consulta e extração de registros de bases de dados e não a criação, edição ou exclusão de tabelas, realizadas por meio das instruções DDL. 1.3. Conceitos do SQL Para que se possa assimilar adequadamente o funcionamento da linguagem SQL, é de suma importância entender os conceitos que norteiam a utilização de ferramentas baseadas em sistemas de gerenciamento de bancos de dados relacionais. Entre tais conceitos, é fundamental saber o que é campo, registro, tabela, banco de dados, base de dados e sistema de gerenciamento de banco de dados. Tais conceitos são descritos nos subtópicos adiante. 1.3.1. Tabela Denomina-se tabela o conjunto de dados organizados em linhas e colunas. Nas tabelas de bancos de dados, as colunas são denominadas Campos e as linhas são denominadas Registros. A seguinte imagem ilustraum exemplo de tabela: Tabela 13 A linguagem SQL 1 1.3.2. Campo Campo está relacionado à menor unidade de informação a ser armazenada em uma tabela (ou arquivo). Um campo pode armazenar apenas um tipo de informação que esteja baseado em um único tipo de dado. Cada campo possui um nome de identificação, a especificação de um tipo de dado, o tamanho de armazenamento, entre outras informações que sejam necessárias. A seguir, a imagem ilustra os campos contidos em uma tabela: 1.3.3. Registro Registro é um conjunto de campos existentes em uma tabela, que representa uma entidade do mundo real, por exemplo a ficha cadastral de uma pessoa. A seguir, a imagem ilustra os registros contidos em uma tabela: Registros Campos 14 Excel VBA - Módulo II 1.3.4. Banco de dados Ao conjunto de tabelas denominamos banco de dados. Como exemplo, podemos imaginar um banco de dados de uma determinada loja, o qual possui a tabela de Clientes, a tabela de Produtos, a tabela de Vendas, a tabela de Pedidos e tantas outras quanto forem necessárias para acomodar os dados gerados no dia a dia. A imagem a seguir ilustra esse exemplo: BANCO DE DADOS CLIENTES VENDAS PRODUTOS PEDIDOS 15 A linguagem SQL 1 1.3.5. Base de Dados Geralmente confundida com o banco de dados, a base de dados é o conjunto de banco de dados de uma determinada empresa ou instituição. Na base de dados, os bancos de dados são relacionados entre si, o que possibilita efetuar o controle de um determinado tema, como são atualmente os sistemas de ERP (Enterprise Research Planning), utilizados em várias empresas. 1.3.6. Sistema de gerenciamento de banco de dados O Sistema de Gerenciamento de Banco de Dados (SGBD) consiste em um software que possibilita facilitar o gerenciamento, as funções de edição, a consulta, o controle e a remoção de registros ou de tabelas de um banco de dados. Como exemplo, temos o Access, o SQL Server, o Oracle, etc. 16 Excel VBA - Módulo II Pontos principais Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois representam os pontos mais importantes do capítulo. • SQL significa Linguagem Estruturada de Consulta ou, em inglês, Structured Query Language. Como o próprio nome sugere, consiste em um conjunto de instruções que possibilita a busca e o tratamento de dados de um banco de dados; • A linguagem SQL é composta por dois grupos de instruções para gerenciar os processos de administração e controle de bancos de dados. São elas: DDL e DML; • O grupo DDL engloba as instruções CREATE TABLE, DROP TABLE, ALTER TABLE, CREATE INDEX e DROP INDEX; • O grupo DML engloba as instruções INSERT, SELECT, UPDATE e DELETE. 1 A Linguagem SQL Teste seus conhecimentos 18 Excel VBA - Módulo II 1. Qual das alternativas a seguir melhor define a linguagem SQL? 2. Com relação à linguagem SQL, qual das alternativas a seguir está correta? ☐ a) É uma linguagem de programação utilizada para mesclar dados de uma base de um banco relacional. ☐ b) É uma linguagem estruturada para tratamento de códigos de programação VB ou VBA. ☐ c) É uma linguagem utilizada para facilitar o acesso a informações (por meio de consultas, atualizações e manipulações de dados) armazenadas em bancos de dados do tipo relacional. ☐ d) É uma linguagem de programação utilizada para armazenar dados e informações em tabelas. ☐ e) Nenhuma das alternativas anteriores está correta. ☐ a) A linguagem SQL é composta por dois grupos de códigos para gerenciar os processos de administração e controle de bancos de dados. São elas: VB e VBA. ☐ b) A linguagem SQL é composta por dois grupos de instruções para gerenciar os processos de administração e controle de bancos de dados. São elas: DDL e DML. ☐ c) A linguagem SQL é composta apenas por dois grupos de instruções para gerenciar os processos de administração e controle de bancos de dados. São elas: DTS e DML. ☐ d) A linguagem SQL é composta apenas por dois grupos de instruções para gerenciar os processos de administração e controle de bancos de dados. São elas: DTS e DDL. ☐ e) Nenhuma das alternativas anteriores está correta. 19 A Linguagem SQL 1 3. Sobre as instruções da linguagem SQL, qual das alternativas a seguir está correta? ☐ a) A DML (Data Definition Language ou Linguagem de Definição de Dados) engloba as instruções que permitem efetuar a criação das estruturas de tabelas, de índices e de bancos de dados em geral, além de possibilitar alterações nas estruturas criadas e a remoção das estruturas existentes. ☐ b) As instruções tipo DML possibilitam executar a manipulação dos dados que estejam armazenados nas tabelas de um determinado banco de dados. Sendo assim, é possível cadastrar, alterar e excluir registros existentes. ☐ c) A DDL engloba as instruções que permitem efetuar a criação das estruturas de tabelas, de índices e de bancos de dados em geral, além de possibilitar alterações nas estruturas criadas e a remoção das estruturas existentes. Nesse grupo encontram-se as instruções INSERT, SELECT, UPDATE e DELETE. ☐ d) Os comandos DDL são acompanhados de uma gama de cláusulas que os tornam muito flexíveis. São elas: FROM, WHERE, GROUP BY, HAVING e ORDER BY, as quais possibilitam efetuar a aplicação de condições que alteram a forma de funcionamento das consultas. ☐ e) Nenhuma das alternativas anteriores está correta. 20 Excel VBA - Módulo II 4. Com relação aos comandos DML, qual das alternativas a seguir está correta? ☐ a) Os comandos DML são acompanhados de uma gama de cláusulas que os tornam muito flexíveis. São elas: FROM, WHERE, GROUP BY, HAVING e ORDER BY, as quais possibilitam efetuar a aplicação de condições que alteram a forma de funcionamento das consultas. ☐ b) Os comandos DML são acompanhados de uma gama de cláusulas que os tornam muito flexíveis. São elas: INSERT, SELECT, UPDATE e DELETE, as quais possibilitam efetuar a aplicação de condições que alteram a forma de funcionamento das consultas. ☐ c) Os comandos DML são acompanhados de uma gama de cláusulas que os tornam muito flexíveis. São elas: CREATE TABLE, DROP TABLE, ALTER TABLE, CREATE INDEXe DROP INDEX, as quais possibilitam efetuar a aplicação de condições que alteram a forma de funcionamento das consultas. ☐ d) As alternativas A e B estão corretas. ☐ e) Nenhuma das alternativas anteriores está correta. 21 A Linguagem SQL 1 5. Qual das alternativas a seguir está correta? ☐ a) Denomina-se tabela o conjunto de dados organizados em linhas e colunas. Nas tabelas de bancos de dados, as colunas são denominadas Campos e as linhas são denominadas Registros. ☐ b) O Sistema de Gerenciamento de Banco de Dados consiste em um software que possibilita facilitar o gerenciamento, as funções de edição, a consulta, o controle e a remoção de registros ou de tabelas de um banco de dados. Como exemplo, temos o Access, o SQL, o Oracle, etc. ☐ c) Base de dados é o conjunto de tabelas de dados relacionados entre si, que possibilita efetuar o controle de um determinado tema, como são atualmente os sistemas de ERP (Enterprise Research Planning), utilizados em várias empresas. Bases de Dados também são conhecidas como Banco de Dados. ☐ d) Tabelas são um conjunto de dados organizados em linhas e colunas. A um conjunto de tabelas denominamos banco de dados. Nas tabelas de bancos de dados, as colunas são denominadas Campos e as linhas são denominadas Registros. ☐ e) As alternativas A, B e D estão corretas. 2 9 O que é uma consulta SQL; 9 A cláusula SELECT; 9 A cláusula FROM; 9 A cláusula WHERE; 9 A cláusula ORDER BY. Consultas SQL 24 Excel VBA - Módulo II 2.1. Introdução Neste capítulo, vamos introduzir conceitualmente as consultas SQL. Para isso, abordaremos com mais detalhes os comandos, as instruções e as cláusulas utilizadas nelas, em especial SELECT, FROM, WHERE e ORDER BY. Também apresentaremos alguns critérios de consulta por meio de operadores. E, por fim,para fixar os conceitos, mas ainda sem testar os códigos, vamos demonstrar, em planilhas, como seria o retorno visual de uma tabela quando usássemos cada instrução. 2.2. O que é uma consulta SQL Consultas SQL são comandos que possibilitam a recuperação, edição e inserção de dados em uma tabela de banco de dados. Através delas, o usuário poderá recuperar dados de uma base de dados utilizando critérios de filtragem, bem como inserir e alterar dados individualmente ou em grupos de dados. Para manipular os dados das bases de dados utilizados neste treinamento, utilizaremos as instruções SELECT, INSERT, UPDATE e DELETE. 2.3. A cláusula SELECT Em consultas SQL, a cláusula SELECT é o centro de toda consulta capaz de recuperar dados, pois informa ao motor do banco de dados quais campos deverão ser retornados na consulta. Para selecionarmos os registros da tabela a serem exibidos, precisamos especificar, logo após a palavra SELECT, os campos dos registros que devem ser retornados. No exemplo adiante, a cláusula é seguida de um asterisco: SELECT * Esta instrução significa selecionar tudo, ou seja, retornar todos os dados. Essa forma de comando é utilizada quando não há a necessidade de retornar campos específicos ou grupos de registros que obedeçam a algum tipo de critério. Porém, para completá-la, será necessário informar a localidade a partir da qual queremos retornar os dados. 25 Consultas SQL 2 2.4. A cláusula FROM O objetivo da cláusula FROM é especificar a origem dos dados selecionados pela cláusula SELECT. Ao informarmos, por meio da cláusula SELECT, que queremos recuperar todos os dados, conforme demonstrado no item anterior, é necessário determinar a localidade partir da qual queremos recuperar esses dados, isto é, de qual tabela será feita a recuperação dos dados. Através da cláusula FROM, é possível informar de qual ou quais tabelas a consulta irá recuperar os registros. Imaginemos que temos uma tabela tblFuncionarios e temos de fazer várias consultas nela. Ainda sem usar os códigos fisicamente, demonstraremos como seria o resultado e o funcionamento de cada consulta em planilhas do Excel. Por exemplo, para recuperar todos os registros na tblFuncionarios, a seguinte instrução SQL deveria ser utilizada: SELECT * FROM tblFuncionarios A consulta dessa instrução trará todos os dados da tabela de funcionários, incluindo todos os campos e registros, conforme demonstrado na imagem a seguir: 26 Excel VBA - Módulo II Porém, desejamos que a consulta retorne apenas o nome e o ramal de cada funcionário. Sendo assim, podemos melhorar a consulta inserindo os nomes dos campos na instrução SELECT. Para isso, devemos utilizar a instrução a seguir: SELECT NOME, RAMAL FROM tblFuncionarios Esta consulta retorna apenas os dados dos campos informados, desprezando os demais campos da tabela tblFuncionarios, conforme demonstrado na imagem adiante: Esta técnica apresentada é mais eficiente para retornar dados de uma tabela. A consulta ficará mais rápida evitando retrabalho, de modo que o usuário não precisará eliminar manualmente os dados indesejados. 2.5. A cláusula WHERE O objetivo da cláusula WHERE é limitar o retorno dos dados. Podemos imaginar que o usuário necessite apenas de uma listagem dos funcionários do RH da empresa. Nesta listagem, ele deseja relacionar o nome, o sobrenome e o ramal de cada funcionário do RH. A cláusula WHERE possibilita esse tipo de filtragem, por meio da consulta a seguir: SELECT NOME, SOBRENOME, RAMAL FROM tblFuncionarios WHERE DEPARTAMENTO = ‘RH’ 27 Consultas SQL 2 A consulta anterior irá retornar os registros da tabela tblFuncionarios, porém, serão listados apenas os dados dos campos NOME, SOBRENOME e RAMAL dos funcionários do departamento RH. Vejamos a tabela que seria retornada a seguir: Devemos observar que a instrução utilizada na cláusula WHERE foi uma string de texto. Isto é, utilizou-se a informação DEPARTAMENTO = ’RH’ para filtrar a consulta. Nesse caso, como se trata de uma string de texto, o delimitador utilizado deve ser aspas simples (‘). 2.5.1. Trabalhando com critérios Podemos melhorar a consulta inserindo critérios na cláusula WHERE. Imaginemos que se queira retornar dados, não apenas dos funcionários do RH, mas o relatório terá que listar os funcionários do RH e do TI. Para gerar esse tipo de relatório, podemos adicionar as instruções lógicas AND e OR. Nesse exemplo, utilizaremos a instrução OR, conforme a consulta modificada a seguir: SELECT NOME, SOBRENOME, RAMAL FROM tblFuncionarios WHERE DEPARTAMENTO = ‘RH’ OR DEPARTAMENTO = ‘TI’ 28 Excel VBA - Módulo II A consulta irá retornar o nome, o sobrenome e o ramal dos funcionários dos departamentos RH e TI, conforme ilustrado na tabela a seguir: 2.5.2. Operadores na cláusula WHERE Na abordagem anterior da clausula WHERE, utilizamos o operador de igualdade, cujo símbolo é o sinal de igual (=). Porém, nesta cláusula, além do operador de igualdade, existe a possibilidade de utilização de vários tipos de operadores. Vejamos, na tabela a seguir, os operadores que podem ser utilizados com a cláusula WHERE: Operador Descrição < Menor que <= Menor ou igual a > Maior que >= Maior ou igual a <> Diferente de BETWEEN Dentro de uma faixa de valores LIKE Coincidir com um padrão IN Contido em uma lista de valores Todos esses operadores funcionam da mesma maneira que o operador de igualdade. 29 Consultas SQL 2 2.5.2.1. Operador BETWEEN O operador BETWEEN retorna todos os registros que estão entre os limites especificados. Como exemplo, utilizaremos SELECT para retornar todos os dados de todos os funcionários que ganham entre R$ 1.000,00 e R$ 3.000,00. Vejamos a instrução a seguir: SELECT * FROM tblFuncionarios WHERE SALARIO BETWEEN 1000 AND 3000 A consulta retornará a seguinte tabela: 2.5.2.2. Operador LIKE e os curingas O operador LIKE retorna os registros coincidentes com os parâmetros especificados pela instrução SELECT. Esse padrão geralmente é identificado pelo caractere curinga (%), que indica o “restante de”. Por exemplo, se desejarmos retornar os registros de todos os funcionários cujo primeiro nome inicia com a letra V, basta montar uma instrução SELECT, conforme o exemplo a seguir: SELECT * FROM tblFuncionarios WHERE NOME LIKE ‘v%’ A consulta irá retornar os registros desejados, conforme a tabela adiante: 30 Excel VBA - Módulo II 2.5.2.3. Operador IN O operador IN é utilizado para retornar uma lista de registros que coincidem com os parâmetros especificados por este operador. Para listar todos os dados dos funcionários de RH e TI, por exemplo, basta realizar a seguinte consulta: SELECT * FROM tblFuncionarios WHERE DEPARTAMENTO IN (‘RH’,‘TI’) A consulta retornará os registros conforme a tabela a seguir: 2.6. A cláusula ORDER BY A cláusula ORDER BY tem como finalidade classificar os registros de uma tabela especificada em ordem crescente ou decrescente por um ou mais campos, de acordo com o que foi informado na instrução SELECT. Para especificar uma ordem de classificação, a cláusula ORDER BY deverá ser incluída no final da consulta SELECT e seguida do campo ou dos campos aos quais devemos aplicar a ordem de classificação. Para montar uma consulta que retorne uma tabela com todos os dados dos funcionários classificados primeiro por filial e em seguida por salário, criamos a instrução SELECT demonstrada a seguir: SELECT * FROM tblFuncionarios ORDER BY FILIAL, SALARIO 31 Consultas SQL 2 A consulta retornará a tabela a seguir: 2.6.1. A palavra-chave DESC Ao aplicar a cláusula ORDER BY a um ou mais campos de uma tabela, os registros dos campos indicados na cláusula serão classificados naturalmente em ordem crescente. Porém, existe uma maneira de classificar um campo numérico em ordem decrescente, isto é, do maior para o menor valor. Para isso, basta acrescentar a palavra DESC à cláusula ORDER BY. A consulta a seguir retornará os campos NOME e SALÁRIO em ordem decrescentede salário: SELECT NOME, SALARIO FROM tblFuncionarios ORDER BY SALARIO DESC 32 Excel VBA - Módulo II A instrução SELECT deverá produzir o resultado demonstrado a seguir: 2.6.2. A instrução TOP A instrução TOP possibilita exibir os primeiros ou os últimos registros de uma tabela. Podemos, por exemplo, exibir apenas os cinco primeiros registros ou os três últimos registros de uma tabela. A instrução TOP é inserida junto à cláusula SELECT. Para exibir os registros de cinco funcionários, do maior salário para o menor, basta criar a instrução SELECT demonstrada a seguir: SELECT TOP 5 NOME, SALARIO FROM tblFuncionarios ORDER BY SALARIO DESC 33 Consultas SQL 2 A instrução deverá produzir a seguinte tabela: Devemos observar que a instrução foi configurada para exibir os salários em ordem decrescente, ou seja, do maior para o menor valor, e listar apenas os cinco primeiros. A linguagem SQL não possui uma instrução BOTTOM. Porém, como visto na instrução do exemplo, podemos simular a listagem dos últimos registros de uma tabela classificando-os em ordem decrescente e, em seguida, extraindo a quantidade de registros desejada. 34 Excel VBA - Módulo II Pontos principais Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois representam os pontos mais importantes do capítulo. • Em consultas SQL, a cláusula SELECT é o centro de toda consulta capaz de recuperar dados, pois informa ao motor do banco de dados quais campos deverão ser retornados na consulta; • O objetivo da cláusula FROM é especificar a origem dos dados selecionados pela cláusula SELECT; • O objetivo da cláusula WHERE é limitar o retorno dos dados; • A cláusula ORDER BY tem como finalidade classificar os registros de uma tabela especificada em ordem crescente ou decrescente por um ou mais campos informados na instrução SELECT. 2 Consultas SQL Teste seus conhecimentos 36 Excel VBA - Módulo II 1. Qual das alternativas a seguir melhor define a cláusula SELECT? 2. Qual das alternativas a seguir melhor define a cláusula FROM? ☐ a) Em consultas SQL, a cláusula SELECT é o centro de toda consulta que recupera dados. Ela informa ao motor do banco de dados quais campos deverão ser retornados na consulta. ☐ b) Em consultas SQL, a cláusula SELECT é o centro de toda consulta que insere dados. Ela informa ao motor do banco de dados quais campos deverão ser inseridos nas tabelas. ☐ c) Em consultas SQL, a cláusula SELECT é o centro de toda consulta que elimina dados. Ela informa ao motor do banco de dados quais campos deverão ser apagados na consulta. ☐ d) Em consultas SQL, a cláusula SELECT é o centro de toda consulta que retorna dados. Ela informa ao motor do banco de dados quais campos deverão ser selecionados na consulta. ☐ e) Nenhuma das alternativas anteriores está correta. ☐ a) O objetivo da cláusula FROM é especificar o destino dos dados selecionados pela cláusula SELECT. ☐ b) O objetivo da cláusula FROM é ordenar os dados selecionados pela cláusula SELECT. ☐ c) O objetivo da cláusula FROM é especificar a origem dos dados selecionados pela cláusula SELECT. ☐ d) O objetivo da cláusula FROM é limitar o retorno dos dados selecionados pela cláusula SELECT. ☐ e) Nenhuma das alternativas anteriores está correta. 37 Consultas SQL 2 3. Qual das consultas a seguir permite retornar todos os dados da tabela tblFuncionarios? 4. Qual das alternativas a seguir melhor define a cláusula WHERE? ☐ a) FROM * SELECT tblFuncionarios ☐ b) SELECT tblFuncionarios FROM * ☐ c) SELECT * FROM tblFuncionarios ☐ d) WHERE * SELECT tblFuncionarios ☐ e) Nenhuma das alternativas anteriores está correta. ☐ a) O objetivo da cláusula WHERE é ordenar os dados da tabela. ☐ b) O objetivo da cláusula WHERE é eliminar os dados de uma tabela. ☐ c) O objetivo da cláusula WHERE é limitar o retorno dos dados. ☐ d) O objetivo da cláusula WHERE é especificar a origem dos dados. ☐ e) Nenhuma das alternativas anteriores está correta. 38 Excel VBA - Módulo II 5. Qual das consultas a seguir permite retornar, de todos os dados da tabela tblFuncionarios, apenas os dados dos funcionários registrados como ANALISTA ou PROGRAMADOR no campo CARGO? ☐ a) SELECT CARGO FROM tblFuncionarios WHERE CARGO IN (‘ANALISTA’,’PROGRAMADOR’) ☐ b) SELECT ANALISTA, PROGRAMADOR FROM tblFuncionarios WHERE CARGO IN (‘ANALISTA’,’PROGRAMADOR’) ☐ c) SELECT * FROM tblFuncionarios WHERE CARGO IN (‘ANALISTA’,’PROGRAMADOR’) ☐ d) SELECT * FROM tblFuncionarios WHERE (‘ANALISTA’, ‘PROGRAMADOR’) ☐ e) Nenhuma das alternativas anteriores está correta. 3 9 Modelo de objetos DAO; 9 Conceitos do SQL; 9 Importação de dados de uma base Access. DAO – Data Access Object 40 Excel VBA - Módulo II 3.1. Introdução No decorrer deste capítulo, conheceremos o Objeto DAO e aprenderemos como importar uma tabela de um banco de dados externo para o Excel 2013, isto por meio da referência de acesso a dados. O objeto DAO (Data Access Object ou Objeto de Acesso a Dados) permite executar consultas, atualizar valores nas tabelas do banco de dados e criar a estrutura dos bancos de dados, inclusive tabelas, consultas armazenadas e relações entre tabelas. O DAO era usado pelos desenvolvedores VB para obter acesso à área de trabalho e seus bancos de dados cliente/servidor. Mas, com o advento do ADO, é agora adequado para ser usado, principalmente, com os bancos de dados Jet. Em um capítulo posterior, iremos abordar o objeto ADO. Nosso objetivo nesse treinamento é executar consultas para retorno de dados de tabelas Access e .txt para planilhas do Excel. As consultas que permitirão as ações de retorno de dados serão escritas em linguagem SQL. 41 DAO – Data Access Object 3 DBEngine Objeto Workspace Database TableDef User Group Error Field Field Field FieldField Field User Field Index Parameter QueryDef RecordSet Container Objeto e Coleção Relation 3.2. Modelo de objetos DAO O modelo de objetos DAO é bem complexo. Ele possui vários tipos de elementos e coleções, as quais possuem diversos objetos, cada qual com sua propriedade, método e objetos subordinados próprios. A imagem a seguir demonstra o modelo DAO: 42 Excel VBA - Módulo II Neste capítulo, abordaremos o objeto Database e sua coleção de objetos, mais especificamente, o RecordSet. As coleções do objeto Database são representadas pela imagem a seguir: Objeto Database Objeto Database Coleção Properties Coleção QueryDefs Coleção RecordSets Coleção Relations Coleção TableDefs PROPRIEDADES MÉTODOS Colating Order Close Connect CreateProperty Objeto Connection CreateQueryDef Containers CreateRelation DesignerMasterID Create TableDef Name Execute QueryDefs MakeReplica Query Timeout NewPassword Records Affected OpenRecordset Recordsets PopulatePartial ReplicaID Synchronize Relations TableDefs Transactions Updatable Version 43 DAO – Data Access Object 3 3.3. Importando dados de uma base Access Neste tópico, importaremos dados de tabelas do banco de dados NorthWind Trade do gerenciador de banco de dados Access. Os dados serão transportados de uma tabela desta base de dados para uma planilha do Excel. O banco de dados NorthWind, assim como outros, é disponibilizado pela Microsoft como bancos de dados de exemplo. Eles são usados para testes dos desenvolvedores e geralmente vêm instalado junto com alguns softwares da Microsoft, como Visual Studio, Access ou SQL Server. Como precisaremos de um banco pronto para consultas, vamos usá-lo dentro do VBA. 3.3.1. Configurações iniciais Para iniciar as configurações, o arquivo banco de dados Northwind.mdb, que acompanha este material, deverá ser instalado na em um diretório. Para isso, crie uma pasta chamada temp em um diretório de sua preferência e, então, insira o banco de dados Northwind nele. No exemplo a seguir, inserimos o Northwind no diretório Documentos, na pasta temp, conforme a imagem aseguir: 44 Excel VBA - Módulo II Após instalarmos o arquivo Northwind na pasta temp, devemos preparar o VBA do Excel para trabalhar com DAO. Para isso, seguir os passos adiante: 1. Abra uma pasta de trabalho Excel e salve-a na mesma pasta temp em que foi salvo o banco de dados Northwind. Este procedimento facilitará a construção do código VBA. Em vez de indicar a pasta que contém o banco de dados, podemos utilizar o método Path de ActiveworkBook posteriormente, que informará o endereço da pasta de trabalho atual. Esse atalho evita que o programador tenha que informar o endereço em que se encontra o arquivo de banco de dados. 2. Após salvar a pasta de trabalho e abrir o VBE, vamos criar um módulo e habilitar a referência DAO no VBA. Faça de acordo com as imagens a seguir: Após inserir o módulo, ative o menu Ferramentas e clique sobre a opção Referências. Em seguida, clique sobre o botão OK para confirmar a referência. 45 DAO – Data Access Object 3 3.3.2. Construindo o código VBA Concluídas as configurações iniciais, devemos construir o código que irá trazer os registros da tabela Customers do banco de dados Northwind. Para isso, seguir os passos adiante: 1. Crie uma rotina ImportTbl e declare as seguintes variáveis: • Para definir o banco de dados: Dim Db as Database Clicar no botão OK para registrar o atalho. Desça o menu da janela de diálogo e clique sobre a referência Microsoft DAO 3.6 Object Library. 46 Excel VBA - Módulo II • Para o objeto Recordset (os registros da tabela): Dim Rs as Recordset • Para receber o objeto planilha: Dim Ws as Object • Para a variável do loop For: Dim i as Integer O script a seguir demonstra como a rotina deverá ficar após a declaração das variáveis: 2. Alimente a variável de objeto Ws, que receberá o objeto Plan1. Esta variável foi criada apenas para facilitar as referências que faremos à planilha durante a codificação e o elemento é meramente opcional. Observemos a imagem a seguir: 3. Após definir o objeto banco de dados e o objeto planilha, a variável Db receberá o banco de dados. O código a seguir define a variável. Observemos que a instrução OpenDatabase recebe o endereço e o nome do banco de dados. O endereço está contido na instrução ThisWorkbook, a qual informa que o endereço será o mesmo da pasta de trabalho do código VBA. Essa instrução está concatenada (&) com o nome do banco de dados entre aspas para completar o endereço. 47 DAO – Data Access Object 3 4. Defina o objeto Recordset. Este objeto representa um conjunto de registros de uma determinada tabela ou um conjunto de registros resultantes de uma consulta SQL. Nesse caso, o Recordset retornará todos os dados da tabela Customers do banco de dados Northwind. Uma vez definido o banco de dados e o conjunto de registros desta base de dados que traremos para a planilha, devemos configurá-la para receber estes dados. Para que o usuário tenha a garantia de que sempre que carregar os dados da tabela Access, estes sejam únicos e não se misturem com os dados anteriores, é conveniente limpar os dados da tabela para que possa receber dados novos. 5. Limpe os dados da planilha para que possa receber os novos dados. O objeto Cells se refere a todas as células da planilha ativa. O método ClearContents apaga o conteúdo das células indicadas; 6. Com a planilha limpa, descarregue os dados. O loop a seguir monta o cabeçalho da tabela. Este código também é opcional, pois o usuário poderá ter uma planilha com cabeçalho próprio, necessitando, apenas, dos dados que são atualizados periodicamente; 7. Formate o cabeçalho. O código a seguir aplica negrito ao cabeçalho da tabela: 48 Excel VBA - Módulo II 8. Com o cabeçalho da tabela inserido e formatado, descarregue os dados a partir da célula A2 da planilha. O código a seguir insere todos os registros da tabela Customers a partir desta célula através da instrução Recordset: Geralmente, quando importamos dados de outra fonte de dados, estes entram truncados nas colunas. Invariavelmente, é necessário ajustá-las à largura do maior registro de cada coluna. É comum, nestas ocasiões, aplicarmos um duplo clique na divisa entre duas colunas para que esta se ajuste automaticamente à largura do maior registro. Este procedimento poderá ser efetuado através de código VBA, inserindo a instrução AutoFit a todas as células da tabela. 9. Utilize o comando AutoFit para efetuar o ajuste automático. Como é utilizado o objeto Cells, ele efetua o ajuste automático a todas as células da planilha. Como essa planilha possui apenas a tabela de dados, isso não acarretará problema algum. O script a seguir demonstra como esse comando é utilizado: 10. Com a importação dos dados concluída, assim como a formatação da tabela, encerre os trabalhos (o código) fechando o banco de dados e o objeto RecordSet, através dos comandos demonstrados na imagem a seguir: 49 DAO – Data Access Object 3 Após inserir este código, a nossa rotina está pronta. E deve estar assim: 11. Para ativá-la, vamos criar um atalho de teclado CTRL+ SHIFT+ H. Primeiro, devemos nos certificar de que a tecla CAPS LOCK do teclado esteja inativa, ou seja, o teclado não esteja no modo maiúsculo. Em seguida, faça o seguinte: 11.1 Retorne à pasta de trabalho do Excel e, na guia Exibição, clique no botão Macros, conforme a imagem adiante: 50 Excel VBA - Módulo II 11.2 Na janela Macro, clique no botão Opções; 11.3 Posicione o cursor do mouse no campo destacado na imagem, mantenha a tecla SHIFT pressionada e, então, pressione a tecla da letra H; 51 DAO – Data Access Object 3 11.4 Conclua as configurações clicando em OK; 11.5 Na janela Macro, clique em Cancelar. 12. Agora vamos finalmente executar todo o código que escrevemos que traz os dados da tabela Customers da base Northwind. Para isso, posicione a pasta de trabalho na Plan1 e utilize o atalho de teclado CTRL+ SHIFT+H. Observemos o resultado final na imagem a seguir: O campo informará o atalho de teclado. Clicar no botão OK para registrar o atalho. 52 Excel VBA - Módulo II Pontos principais Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois representam os pontos mais importantes do capítulo. • O objeto DAO (Data Access Object ou Objeto de Acesso a Dados) permite executar consultas, atualizar valores nas tabelas do banco de dados e criar a estrutura dos bancos de dados, inclusive tabelas, consultas armazenadas e relações entre tabelas; • Para utilizar o objeto DAO no Excel VBA, é necessário referenciá-lo no menu Ferramentas do VBE; • O objeto Recordset representa um conjunto de registros de uma determinada tabela ou um conjunto de registros resultantes de uma consulta SQL. 3 DAO – Data Access Object Mãos à obra! 54 Excel VBA - Módulo II Laboratório 1 Neste laboratório, vamos construir um sistema para importar os dados da tabela Products do banco de dados Northwind, utilizando o objeto DAO, de acordo com as seguintes instruções: 1. Crie uma pasta com o nome desejado e coloque o arquivo Northwind.mdb dentro dela; 2. Abra um arquivo do Excel e salve-o como xlsm dentro da mesma pasta que você acabou de criar; 3. Crie uma planilha Painel e uma Produtos; 4. Com base no que aprendeu durante o capítulo, crie uma rotina que exerça a função de transportar dos dados da tabela Products para a planilha Produtos; 5. Na planilha Painel, carregue a rotina através de um botão de controle de formulário chamado Importar Tabela de Produtos. Ao final da importação, o sistema deverá apresentará a seguinte mensagem: O número de registros é uma variável. Confira o resultado no arquivo Cap3 –ExercicioProductsLab. xlsm que acompanha este material. 4 9 O objeto Connection ADO; 9 Conceitos do SQL; 9 Importando dados de uma base Access. ADO - ActiveX Data Objects 56 Excel VBA - Módulo II 4.1. Introdução O ADO, ou ActiveX Data Objects, criado pela Microsoft, é consideradouma técnica para acessar bancos de dados a partir de uma página Web. Como o ADO é fornecido na forma de uma biblioteca ActiveX Server (como são o DAO e o RDO), esta técnica poderá ser usada em aplicações VB, sem problemas. Muitas vezes, podemos pensar que é muito mais fácil ter um banco de dados cliente/ servidor usando o ADO do que a alternativa DAO, descrita no capítulo anterior. Porém, embora a tecnologia ADO seja mais recente e mais rápida que a DAO, a segunda é mais eficiente no tratamento de dados com VBA. 4.2. O objeto Connection ADO Nos objetos ADO, podemos usar o objeto Connection para estabelecer uma conexão com uma fonte de dados. Para informar ao ADO sobre como obter a fonte de dados, devemos fornecer informações na forma de uma string de conexão idêntica à string de conexão ODBC. A propriedade ConnectionString do objeto Connection será utilizada para fazer isso. Também haverá a opção de escolher qual provedor usar, definindo a propriedade Provider do objeto Connection. 4.2.1. Especificando um provedor OLE DB e uma string de conexão Devemos especificar um provedor OLE DB usando a propriedade Provider do objeto Connection ADO. Caso não seja especificado um provedor ou se não for utilizado um objeto Connection, será considerado o provedor padrão, que é o provedor ODBC para OLE DB, também conhecido como MSDASQL. A propriedade Provider do objeto Connection é uma string de texto que informa à conexão qual provedor OLE DB usar para executar os comandos no servidor. Para utilizar o provedor ODBC para OLE DB, não será necessário especificar um provedor, já que ele é o provedor padrão. Contudo, se desejar, poderá especificá-lo para maior clareza. Uma string de conexão no ADO será utilizada para fornecer informações sobre como conectar o servidor do banco de dados. Quando utilizarmos o provedor ODBC para OLE DB, a string de conexão será igual a uma string de conexão ODBC. Isso significa que as informações exatas esperadas pelo driver ODBC poderão variar entre as implementações. Para os outros provedores, a string de conexão poderá ter uma sintaxe totalmente diferente. 57 ADO - ActiveX Data Objects 4 Quando utilizarmos o provedor ODBC, a propriedade ConnectionString poderá ser um Data Source Name (DSN ou Nome da Fonte de Dados) ou poderá ser uma conexão sem DSN. A seguir, temos um exemplo de conexão com um banco de dados que usa o provedor ODBC com um DSN: Cn.Provider = “MSDASQL” Cn.ConnectionString = “DSN=Novelty;” A posição do objeto Connection ADO no modelo de objetos ADO, assim como suas propriedades e métodos, é mostrada na imagem a seguir: Objeto Connection Coleção Errors Objeto Error Objeto Properties Objeto Command Objeto Recordset Coleção Properties PROPRIEDADES MÉTODOS EVENTOS Atributos BeginTrans BeginTransComplete CommandTimeout Cancel CommitTransComplete ConnectionString Close ConnectComplete ConnectionTimeout CommitTrans Disconnect CursorLocation Execute ExecuteComplete DefaultDatabase Open InfoMessage Coleção Errors OpenSchema RollbackTransComplete IsolationLevel RollbackTrans WillConnect Mode WillExecute Coleção Properties Provider State Version 58 Excel VBA - Módulo II 4.3. Importando dados de uma base Access Assim como fizemos no DAO, neste tópico importaremos dados de tabelas do banco de dados NorthWind Trade do gerenciador de banco de dados Access. Os dados serão transportados de uma tabela desta base de dados para uma planilha do Excel. Os dados da planilha mostrarão o valor total de compras e a quantidade realizada por cada cliente será vista mais adiante. 4.3.1. Configurações iniciais Para iniciar as configurações, o arquivo banco de dados Northwind.mdb, que acompanha este material, deverá ser instalado em um diretório. Crie uma pasta chamada temp em um diretório de sua preferência e insira o banco de dados Northwind nele. No exemplo a seguir, inserimos o Northwind no diretório Documentos, na pasta temp, conforme a imagem adiante: Após instalarmos o arquivo Northwind na pasta temp, devemos preparar o VBA do Excel para trabalhar com ADO. Para isso, seguir os passos adiante: Objeto Recordset 59 ADO - ActiveX Data Objects 4 1. Abra uma pasta de trabalho Excel e salve-a na mesma pasta temp em que foi salvo o banco de dados Northwind; Este procedimento facilitará a construção do código VBA. Assim como fizemos no capítulo sobre DAO, em vez de indicar a pasta em que está o banco de dados, podemos utilizar o método Path de ActiveworkBook, que informa o endereço da pasta de trabalho atual. 2. Após salvar a pasta de trabalho, abra o VBE e insira um módulo, igual fizemos no capítulo anterior. Menu Inserir/ Módulo. Após inserir um módulo, devemos indicar a referência ADO. Atualmente, a referência Microsoft ADO está em sua sexta versão. Porém, se o objetivo for desenvolver uma rotina que rode sem preocupações em várias versões do Excel, situação comum em várias empresas, o melhor a fazer é indicar a referência Microsoft ADO 2.1. Esta versão é comum a todas as versões do Excel. 3. Para indicar a referência ADO, vamos fazer o mesmo que fizemos no capítulo anterior para ativar a referência DAO. Siga os passos: 3.1. Clique no menu Ferramentas e escolha a opção Referências; 3.2. Na janela Referências, localize o Microsoft Activex Data Object 2.1 Library, marque a caixa de seleção e depois em Ok. 60 Excel VBA - Módulo II 4.3.2. Código VBA – String de conexão Concluídas as configurações iniciais, devemos construir o código que trará os registros da tabela Customers do banco de dados Northwind. Para isso, abrir a rotina ImportTable e declarar as seguintes variáveis: Dim Sql As String Dim Cn As ADODB.Connection Dim Rs As ADODB.Recordset Dim i As Integer A imagem a seguir demonstra como a rotina deverá ficar após a declaração das variáveis: Após declarar as variáveis, devemos estabelecer a conexão com a base de dados Northwind, conforme o código a seguir: 61 ADO - ActiveX Data Objects 4 Observe que, assim como no capítulo anterior, usamos o ActiveWorkBook. Path para não precisarmos colocar o caminho do arquivo mdb. Exatamente por isso, colocamos o arquivo Excel e o banco de dados na mesma pasta (temp). Isso é útil porque, caso precisemos carregar o projeto em um dispositivo de armazenamento removível, não precisaremos especificar o caminho novamente, apenas colocar os arquivos vinculados na mesma pasta. 4.3.2.1. Código VBA – Objeto Recordset A definição do objeto Recordset ADO é parecida com a do objeto DAO. Este objeto é uma maneira de acessar as informações recuperadas do provedor de dados e, por possuir muitas das propriedades e métodos do conjunto de registros do modelo DAO, podemos trabalhar com ele igualmente. A posição do objeto RecordSet ADO no modelo de objetos ADO, assim como suas propriedades, é demonstrada na imagem a seguir: 62 Excel VBA - Módulo II PROPRIEDADES MÉTODOS EVENTOS AbsolutePage AddNew EndOfRecordset AbsolutePosition Cancel FetchComplete ActiveCommand CancelBatch FetchProgress ActiveConnection CancelUpdate FieldChangComplete BOF Clone MoveComplete Bookmark CompareBookmarks RecordChangeComplete CacheSize Delete RecordsetChangeComplete CursorLocation Find WillCangeField CursorType GetRows WillChangeRecord DataMember GetString WillChangeRecordset DataSource Move WillMove EditMode MoveFirst EOF MoveLast Coleção Fields MoveNext Filter MovePrevius LockType NextRecordset MarshalOptions Open MaxRecords Requery PageCount Resync PageSize Save Coleção Properties Supports RecordCount Update Sort UpdateBatch Source State Status StayInSync Objeto Recordset Coleção Fields Objeto Field Objeto Property Coleção Properties 63 ADO - ActiveX Data Objects 4 No objeto ADO, é possível criar um objeto RecordSet que não requer implícito um objeto Connection. É diferente de ter um conjunto de registros desconectado, pois, a conexão existe, apenas não há variável do objeto para representá-la. Continuando a construção do sistemade importação de dados da tabela Customers do banco de dados Northwind, devemos escrever o código com a instruções SQL que resgata os dados das tabelas do banco de dados: Como podemos observar, a variável Sql recebe a instrução SELECT para retornar dados das tabelas Customers ,Orders e Order Details, e quando utiliza a instrução INNER JOIN, ela faz comparação entre os “campos ID’s” das tabelas, podendo assim extrair dados do relacionamento entre elas (tabelas). Da tabela Customers desse banco de dados, utilizamos o campo CustomerID. Esse campo já está relacionado com a tabela Orders (para conseguir identificar qual pedido é de qual cliente). Então, temos de ver a quantidade de cada pedido na tabela Order Details, referenciando o Order ID dele com o ID da tabela Orders. Após montar a instrução SQL na variável, é definida a instrução Recordset e os dados são registrados na planilha ativa, conforme a imagem a seguir: 64 Excel VBA - Módulo II A parte mais importante, que é a importação dos dados, foi concluída. Agora, podemos finalizar o procedimento, formatando as células do cabeçalho e ajustando sua largura, pois até o presente momento o resultado está assim: Este trecho fecha a conexão com o banco. Este trecho cria o cabeçalho da tabela na planilha ativa. Este trecho registra os dados linha a linha na planilha. 65 ADO - ActiveX Data Objects 4 Então, insira o código a seguir e execute-o: 66 Excel VBA - Módulo II O código completo deverá estar assim: 67 ADO - ActiveX Data Objects 4 Pontos principais Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois representam os pontos mais importantes do capítulo. • A tecnologia ADO é mais recente e mais rápida que a DAO; • Um provedor OLE DB deve ser especificado usando a propriedade Provider do objeto Connection ADO. 4 ADO - ActiveX Data Objects Mãos à obra! 70 Excel VBA - Módulo II Laboratório 1 Neste laboratório, vamos construir um sistema para importar os dados da tabela Products, do banco de dados NorthWind, utilizando o objeto ADO, de acordo com as seguintes instruções: 1. Assim como fizemos no capítulo deste laboratório, importe o campo Customer ID da tabela Customers (que já tem relacionamento com a tabela Orders por causa da sua identificação), referenciando pelo INNER JOIN a relação do ID de cada customer com a quantidade e o preço na tabela Order Details (Unit Price e Quantity). Se houver dúvida com os nomes de campos e como eles funcionam, abra o arquivo Northwind.mdb no Access e verifique as tabelas, campos e relacionamentos; 2. Depois, registre todos os dados em uma planilha, com os nomes Código, Quantidade e Valor Unitário; 3. Selecione todas as células preenchidas e dê um nome, por exemplo reg_ dados. E referencie-o na propriedade Row Source de um List box em um formulário fmr_Orders. Ele deve se parecer mais ou menos assim: Confira o resultado no arquivo Cap4 –ExercicioOrdersLab.xlsm que acompanha este material. 5 9 Preparando o ambiente; 9 Construindo a rotina; 9 Atribuindo a rotina a um controle de formulário. Importando dados de um arquivo TXT 72 Excel VBA - Módulo II 5.1. Introdução Nos capítulos anteriores, observamos a importação de arquivos de tabelas de uma base de dados Access. Este procedimento é comum em empresas que utilizam esse gerenciador de banco de dados como ponte entre uma base SQL ou Oracle e as planilhas dos usuários. Porém, em algumas situações, o usuário poderá obter dados diretamente da base SQL ou Oracle, através do Excel. Nesse caso, o usuário solicitará os dados ao administrador da base, o qual irá gerar os dados em arquivo .txt. Quando o usuário solicita dados diretamente ao responsável pela base, sem a necessidade de utilização do Access como ponte entre a base e as planilhas, é o próprio responsável pela base que criará as consultas dentro do SQL ou Oracle, as quais retornarão exatamente o que o usuário necessita da base corporativa. Nesse caso, o usuário deverá, apenas, transferir os dados para a planilha. Neste capítulo, vamos acompanhar o desenvolvimento de uma rotina para capturar arquivos .txt para uma planilha Excel. 5.2. Preparando o ambiente O arquivo TabMedic.txt, que utilizaremos neste capítulo, é uma tabela de vendas de medicamentos de uma fictícia indústria farmacêutica, e deve ser instalado na mesma pasta temp que você criou e usou nos dois capítulos anteriores. No mesmo local, vamos criar uma nova pasta de trabalho, denominada BDTesteTxt, contendo apenas uma planilha. Após salvar o arquivo no endereço recomendado, devemos alternar para o VBE e inserir um novo módulo. Neste módulo, devemos inserir as seguintes variáveis, demonstradas na imagem adiante: 73 Importando dados de um arquivo TXT 5 Em que: • A variável Caminho receberá apenas o caminho da pasta em que está o arquivo .txt (temp). Esta variável será concatenada com a variável do nome do arquivo .txt para formar o caminho completo do arquivo; • A variável NomeArq receberá apenas o nome do arquivo .txt instalado na pasta (TabMedic.txt). Esta variável será concatenada com a variável de endereço para formar o caminho completo do arquivo; • A variável CamiArq receberá o caminho completo do arquivo .txt. Isto é, o endereço da pasta (temp) e o nome do arquivo TabMedic.txt. Esta variável será utilizada no comando que abrirá o arquivo .txt; • A variável Arq receberá o nome do arquivo principal, BDTesteTxt.xlsm. Ela será necessária para facilitar a ativação do arquivo principal em um determinado momento da rotina; • A variável App receberá o objeto Application. Este procedimento facilitará a escrita da rotina, pois, para obter uma propriedade ou método de Application, não haverá a necessidade de digitar o nome completo do objeto, bastará digitar “App.” e selecionar a propriedade, método ou objeto desejado. 5.3. Construindo a rotina Devemos iniciar a construção da rotina alimentando a variável de objeto App. Dessa maneira, a digitação dos códigos será simplificada. Observemos a imagem a seguir: 74 Excel VBA - Módulo II Em seguida, devemos alimentar as variáveis de endereço Arq, Caminho, NomeArq e CamiArq, de acordo com a imagem a seguir: Observemos que a variável Arq recebe a instrução ActiveWorkbook.Name. Esta instrução captura o nome da workbook (pasta de trabalho) ativa. Como a rotina é iniciada na pasta de trabalho BDTesteTxt, a variável receberá o nome desta pasta. Na variável Caminho, veja também que utilizamos a instrução ThisWorkBook. Path, que captura o caminho de acordo com a pasta do arquivo atual. A variável, então, recebe o caminho referente à localização do arquivo, seja ela qual for. Outra questão a observar é a alimentação da variável CamiArq. Após alimentar as variáveis Caminho com o endereço do arquivo .txt e NomArq com o nome do arquivo .txt, a variável CamiArq recebe a variável Caminho concatenada com a barra e a variável NomeArq. Sendo assim, essa variável agregará o caminho completo do arquivo .txt. Após alimentar as variáveis de endereço, devemos ajustar a pasta de trabalho. A parte da rotina a seguir verifica a quantidade de planilhas existentes na pasta: A variável n recebe o número de planilhas da pasta de trabalho. 75 Importando dados de um arquivo TXT 5 Em seguida, através do loop demonstrado na imagem adiante, a rotina elimina as planilhas excedentes (se houverem), deixando apenas uma: Após configurar a pasta de trabalho, a próxima instrução da rotina irá abrir o arquivo .txt e transformá-lo em uma nova planilha na pasta de trabalho ativa. O comando utilizado é similar à ação de ativar a guia Arquivo na pasta de trabalho, selecionar o comando Abrir e indicar o local, nome e tipo de arquivo a ser aberto. O comando OpenText informa que o arquivo aberto será tipo texto. Vejamos as instruções a seguir: A instrução anterior abrirá o arquivo .txt em forma de nova planilha, incluindo todos os dados.O resultado obtido é o mesmo quando abrimos um arquivo .txt através da pasta de trabalho. Por padrão, o Excel cria uma nova pasta de trabalho com apenas uma planilha contendo os dados do arquivo .txt. O loop rodará até que n seja igual a 1. Exclui a planilha número n. Define o tipo de campo como delimitado, ou seja, caracteres como vírgula ou tabulação separam cada campo. Nome e endereço completo do arquivo .txt. O método OpenText informa que o tipo de arquivo a abrir será arquivo texto. Decrementa 1 ao número n a cada loop. Define que o qualificador de textos será aspas. Informa que o caractere separador de campo será TAB (tabulação) e desabilita os demais (ponto e vírgula, vírgula e espaço). 76 Excel VBA - Módulo II Na próxima etapa, devemos transferir essa planilha para a pasta de trabalho BDTesteTxt. A instrução da imagem adiante transfere a planilha (única) para a workbook principal e a instala após a primeira planilha: O comando da instrução anterior fecha automaticamente a pasta de trabalho da planilha que foi transferida. Isso ocorre porque ela possui apenas uma planilha (a do arquivo ). Normalmente, esse procedimento gera uma mensagem informando o ocorrido, porém, no início da rotina, desabilitamos os avisos do sistema através da instrução . Observemos a instrução a seguir que mostra o início da rotina: Após instalar a planilha com os dados do arquivo texto na pasta de trabalho atual, o próximo passo é configurar os dados da pasta. Como são muitos dados e de vários tamanhos, eles aparecem truncados nas colunas. A instrução a seguir apenas aplicará o ajuste automático às colunas: As próximas instruções devolverão ao estado normal a atualização de tela e os avisos do sistema: Define que a movimentação deve ser para o lado direito (depois) da primeira planilha da pasta de trabalho BDTesteTxt. Move a planilha ativa da workbook. Desabilita os avisos do sistema. 77 Importando dados de um arquivo TXT 5 5.4. Atribuindo a rotina a um controle de formulário Para finalizar, devemos inserir um controle de formulário na primeira planilha e atribuir a rotina a esse controle. Assim, quando o usuário desejar importar o arquivo .txt, bastará clicar sobre o botão de controle. Vejamos as instruções a seguir: 1. Na guia Desenvolvedor, grupo Controles, clique no botão Inserir e escolha a ferramenta botão na área de Controles de Formulário, conforme a imagem adiante: 2. Clique em algum lugar da planilha para inserir o botão. Depois, clique no nome da macro que o botão deverá executar (Import_Arq_Texto) e depois em OK; 78 Excel VBA - Módulo II 3. Utilize as alças de redimensionamento para alterar o tamanho do botão; 4. Selecione o texto do botão enquanto este apresentar as alças de redimensionamento; 5. Digite o novo texto e, em seguida, clique em qualquer célula da planilha para sair do modo edição e torná-lo funcional. 79 Importando dados de um arquivo TXT 5 Após esse procedimento, o arquivo .txt poderá ser importado, bastando para isso um clique simples sobre o botão da planilha. O resultado deve ser o seguinte: 80 Excel VBA - Módulo II Pontos principais Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois representam os pontos mais importantes do capítulo. • Em muitas situações, o usuário poderá receber dados diretamente de uma base SQL, Oracle ou outra base, sem a necessidade de filtrá-los no Access. Nestes casos, o administrador da base de dados criará as consultas para selecionar os dados necessários na base e exportá-los para um arquivo .txt; • Para preparar o ambiente, após salvar o arquivo .txt no endereço recomendado, devemos alternar para o VBE e inserir um novo módulo. Neste módulo, serão inseridas diversas variáveis. Entre elas, a variável App, que receberá o objeto Application; • Após configurar a pasta de trabalho, a próxima instrução da rotina deve abrir o arquivo .txt e transformá-lo em uma nova planilha na pasta de trabalho ativa. É o comando OpenText que informa que o arquivo aberto será tipo texto; • Quando inserimos um controle de formulário na primeira planilha e atribuímos a rotina a esse controle, o usuário pode importar o arquivo .txt, somente clicando sobre o botão de controle. 5 Importando dados de um arquivo TXT Mãos à obra! 82 Excel VBA - Módulo II Confira o resultado no arquivo Cap4 –ExercicioOrdersLab. xlsm que acompanha este material. Os arquivos TabMedic.txt e Customers.txt também estão disponíveis para o exercício no Kit Apostila. Laboratório 1 Neste laboratório, vamos construir um sistema para importar os dados do arquivo indicado na tabela, conforme demonstrado na imagem. É importante considerar as instruções adiante: • A planilha deverá estar protegida; • O usuário poderá selecionar apenas as células B2 e B3; • Aoclicar sobre o botão Importar TXT, o sistema importará os dados do arquivo .txtda célula selecionada para a segunda planilha. 6 9 Preparando o ambiente; 9 Construindo a rotina. Importando dados de um arquivo XLS 84 Excel VBA - Módulo II 6.1. Introdução A partir da versão 2007, uma planilha do Excel passou a ter 1.048.576 linhas por 16.384 colunas. Com espaço maior para armazenar registros, utilizar um arquivo Excel como banco de dados se tornou tarefa comum em algumas empresas. Porém, para utilizá-lo dessa forma, vale considerar algumas recomendações. Primeiro, ao armazenar os dados, estes devem ser apenas registrados na planilha; não há a necessidade de formatá-los. Isso porque o usuário analisará esses dados em sua planilha principal, provavelmente, em formulários VBA ou outro recurso, os quais tem sua própria formatação. Formatar os dados da base, além de ser tarefa desnecessária, torna o arquivo mais pesado, principalmente, se a tabela tiver muitos registros. Segundo, a planilha base de dados poderá ser instalada em uma pasta da rede onde todos possam acessá-la e não conterá nenhuma fórmula ou funções. Novamente, essa tarefa ficará a cargo da pasta de trabalho do usuário que efetuará a consulta. Concluindo, a pasta de trabalho banco de dados abrigará apenas dados sem quaisquer formatações, fórmulas ou funções. 6.2. Preparando o ambiente O arquivo que utilizaremos neste capítulo é uma tabela de vendas de medicamentos de uma fictícia indústria farmacêutica e deve estar instalado em uma pasta. Nesse mesmo local, criaremos uma nova pasta de trabalho, denominada BDTesteXLS, contendo apenas uma planilha. Após salvar o arquivo no endereço recomendado, devemos alternar para o VBE e inserir um novo módulo. Para importar os dados da planilha, vamos utilizar recursos de DAO, portanto, antes de iniciarmos a rotina, temos de fazer a referência a esse objeto no VBA, como fizemos nos capítulos anteriores, até chegar na janela Referências, demonstrada a seguir: 85 Importando dados de um arquivo XLS 6 Após determinar a referência e inserir um módulo, devemos iniciar a rotina RecallBD e criar as variáveis, conforme demonstrado na instrução a seguir: Em que: • A variável MeuBD receberá o objeto Database; • A variável MinhaTabela receberá o objeto Recordset para recuperar os dados do arquivo .xls; Selecionar a referência Microsoft DAO 3.6 e clicar no botão OK. 86 Excel VBA - Módulo II • A variável Ssql receberá a string SQL que conterá as instruções de recuperação dos dados do arquivo .xls; • A variável ThisPath receberá o caminho da pasta em que está o arquivo .xls. Esta variável será concatenada com a variável do nome do arquivo .xls para formar o caminho completo do arquivo; • A variável MeuArq receberá o nome do arquivo .xls. Ela será concatenada com a variável que agrega o endereço do arquivo para compor o comando que abrirá o arquivo .xls. 6.3. Construindo a Rotina Após definir as variáveis, devemos alimentar, inicialmente, as variáveis de endereço ThisPath e MeuArq, conforme demonstrado na instrução a seguir:Após alimentar as variáveis de endereço, devemos definir a variável MeuBD, informando o banco de dados a ser aberto. Nesse caso, utilizaremos a pasta de trabalho Medicamentos.xls que acompanha este material. O próximo passo será criar a string SQL que informará quais dados iremos recuperar da tabela de medicamentos. Neste exercício, vamos recuperar a tabela inteira. Portanto, a instrução SQL que iremos inserir na variável será a seguinte: SELECT * FROM [Dados$] WHERE MEDICAMENTO is Not Null Vejamos a instrução completa a seguir: 87 Importando dados de um arquivo XLS 6 Vale ressaltar que iniciamos a alimentação da variável que receberá a instrução SQL com a variável Empty, a qual indica que nenhum valor inicial foi atribuído ainda. É uma forma de garantir que ela iniciará vazia, sem nenhum valor residual. Podemos observar também que, ao final de cada linha, é inserida a constante vbCr, a qual atribui uma quebra de parágrafo ou retorno de carro ao código. Esta constante equivale ao caractere chr(13) utilizado comumente para quebrar texto dentro de MsgBox. Definida a variável Ssql, devemos definir agora a variável de objeto Recordset, informando a instrução SQL inserida na variável. A variável do objeto Recordset, denominada MinhaTabela, informará ao banco de dados quais valores deverão ser retornados. Observemos as instruções adiante: Para finalizar a rotina, devemos distribuir na planilha os dados capturados pela instrução Recordset. Estes dados serão inseridos a partir da segunda linha da planilha (célula A2). Antes de inseri-los, a rotina criará o cabeçalho da tabela, conforme a instrução a seguir: Insere os dados a partir da célula A2. Fecha a conexão com o banco de dados. Apaga todos os registros da planilha ativa. Ajusta automaticamente as colunas. Cria o cabeçalho da tabela. 88 Excel VBA - Módulo II Ao rodar a rotina, a planilha ativa, que estava em branco, receberá todos os dados da base .xls com um cabeçalho próprio criado pela rotina, conforme a imagem a seguir: 89 Importando dados de um arquivo XLS 6 Pontos principais Atente para os tópicos a seguir. Eles devem ser estudados com muita atenção, pois representam os pontos mais importantes do capítulo. • O Excel poderá ser utilizado como banco de dados, principalmente após a versão 2007, na qual o número de linhas e de colunas foi expandido consideravelmente. Sendo assim, podemos utilizar rotina VBA para recuperar dados de bases .xls com o recurso DAO; • Para utilizar um arquivo Excel como banco de dados, entretanto, devemos considerar algumas recomendações: os dados devem ser apenas registrados na planilha; não há a necessidade de formatá-los e a planilha pode ser instalada em uma pasta da rede onde todos possam acessá-la e não conterá nenhuma fórmula ou funções; • Para preparar o ambiente, após salvar o arquivo no endereço recomendado, devemos alternar para o VBE e inserir um novo módulo. Para importar os dados da planilha, vamos utilizar recursos de DAO, portanto, antes de iniciarmos a rotina, devemos fazer a referência a este objeto no VBA. 6 Importando dados de um arquivo XLS Mãos à obra! 92 Excel VBA - Módulo II Confira o resultado no arquivo Cap6 –Exercicio Medicamentos. xlsm que acompanha este material. Laboratório 1 Neste laboratório, vamos construir um sistema para importar os dados do arquivo Medicamentos.xls, de acordo com as seguintes instruções: 1. Importe os dados somente dos campos MEDICAMENTO e QTDE; 2. Importe os registros em que a quantidade seja maior que 50. 7 9 Preparando o gráfico; 9 O formulário de controle; 9 O formulário Gráfico. Inserindo gráficos em formulários 94 Excel VBA - Módulo II 7.1. Introdução Imagens valem muito mais que mil palavras. Este é um ditado antigo e muito bem aplicado em apresentações. As massas de dados armazenadas em bancos de dados podem ser analisadas por meio de gráficos que as representem. Até o momento, tratamos de apresentação de massas de dados em planilhas ou formulários VBA, cujos dados foram importados de tabelas Access, Planilhas do Excel ou arquivos .txt. Neste capítulo, abordaremos a apresentação destes dados em formulários VBA através de gráficos. A inserção de gráficos em formulários VBA é relativamente simples. Primeiro, devemos gerar um gráfico em uma planilha e, depois, criar uma rotina para exportá-lo no formato imagem (gif, jpeg, etc.). Em seguida, devemos importar esta imagem para um objeto imagem de um formulário. 7.2. Preparando o gráfico Antes de escrever a rotina, devemos construir o gráfico que será apresentado no formulário. Para isso, abrir uma pasta de trabalho e inserir um gráfico de barras, como o da imagem a seguir: O gráfico deverá ser instalado na primeira planilha e a tabela que o alimenta deverá ser instalada na mesma posição da ilustração, ou seja, a partir da célula A1. 95 Inserindo gráficos em formulários 7 7.3. O formulário de controle Com o formulário montado na planilha, devemos abrir o editor de VBA (VBE) e inserir dois formulários: um receberá o gráfico da planilha e outro carregará os controles do gráfico. O primeiro formulário que iremos criar será o de controle, o qual controlará a inserção de valores nos campos que alimentam o gráfico, além de carregar o formulário do gráfico. Vejamos as instruções a seguir: Insira dois textboxes, dois rótulos, dois spinbuttons e dois commandbuttons. 96 Excel VBA - Módulo II Nomear, posicionar e redimensionar os objetos, de modo que o formulário fique com a aparência a seguir: ufm_Controlespb_VrSul cmb_Grafico tbx_VrSul tbx_VrNortel spb_Vr|Norte cmb_Sair Aplique um duplo-clique sobre o objeto spinbutton. Inserir esta rotina no evento Change do objeto: 97 Inserindo gráficos em formulários 7 Nas propriedades do spinbutton: Na imagem anterior, a rotina construída no evento Change do spinbutton fará com que, ao clicar sobre qualquer das setas (para cima ou para baixo) desta ferramenta, o valor do spinbutton seja inserido no Textboxtbx_VrSul e na célula B1. Pelo fato de as propriedades Max, Min e SmallChange terem sido alteradas, a cada clique nas setas, o valor do spinbutton será alterado de dez em dez, sendo o mínimo dez e o máximo cem. Nomear o formulário como ufm_Controle e abri-lo novamente: Aplique um duplo-clique sobre o objeto spinbutton. Altere a propriedade SmallChange para 10. Altere a propriedade Max para 100. Altere a propriedade Min para 10. 98 Excel VBA - Módulo II Em seguida, inserir esta rotina no evento Change do objeto: Nas propriedades do spinbutton: Na ilustração anterior, a rotina construída no evento Change do spinbutton fará com que, ao clicar sobre qualquer das setas (para cima ou para baixo) desta ferramenta, o valor do spinbutton seja inserido no Textboxtbx_VrNorte e na célula B1. Assim como na rotina anterior, pelo fato de as propriedades Max, Min e SmallChange terem sido alteradas, a cada clique nas setas, o valor do spinbutton será alterado de dez em dez, considerando o valor mínimo de dez e máximo de cem. Altere a propriedade SmallChange para 10. Altere a propriedade Max para 100. Altere a propriedade Min para 10. 99 Inserindo gráficos em formulários 7 Retorne ao formulário e aplique um duplo-clique sobre o botão Exibir Gráfico: Em seguida, inserir esta rotina no evento Click do objeto cmb_Grafico: A rotina inserida no evento Click do objeto cmb_Grafico desliga o formulário ufm_Controle e abre o formulário ufm_Chart. Para finalizar, retornar para o formulário e atribuir o comando unloadme ao objeto cmb_Sair para que, ao clicar sobre este botão, o usuário possa fechar o formulário. 7.4. O formulário Gráfico Este formulário é o objeto principal deste capítulo. Ele reproduzirá o gráfico que montamos na planilha e possuirá apenas dois objetos: um frame de imagem e um botão para fechá-lo. 100 Excel VBA - Módulo II 1. Insira os objetos indicados no formulário: 2. Redimensione,
Compartilhar