Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

MICROSOFT VISUAL BASIC 
DESVENDANDO A LINGUAGEM DE PROGRAMAÇÃO 
MAIS POPULAR DO MUNDO 
 
 
 
 
 
 
Autor: William Costa Rodrigues 
Copyright© 2004, W.C. Rodrigues (Lizaro Soft) 
 
 
 
 
 
 
 
 
 
Sumário 
1. INTRODUÇÃO .............................................................................................................1 
2. CONCEITOS BÁSICO DO VISUAL BASIC.....................................................................3 
2.1. INTERFACE DO VISUAL BASIC .................................................................................................3 
2.2. CONTROLE BÁSICO ...............................................................................................................4 
2.3. CONTROLES PERSONALIZADOS................................................................................................5 
2.4. TIPOS DE PROJETOS..............................................................................................................5 
2.5. TIPO DE VARIÁVEIS ..............................................................................................................6 
2.6. DECLARANDO VARIÁVEIS NO VISUAL BASIC ..............................................................................6 
2.7. CONVERTENDO DADOS ..........................................................................................................7 
2.8. EXERCÍCIOS.........................................................................................................................8 
3. ESTRUTURA DE UMA APLICAÇÃO ..............................................................................9 
3.1. ESTRUTURAS DE PROGRAMAÇÃO DO VISUAL BASIC...................................................................10 
3.1.1. Tipos de Estruturas de Linguagem......................................................................................10 
3.1.1.1. Estrutura de Tomada de Decisão:................................................................................10 
3.1.1.1.1 IF... Then... Else ....................................................................................................10 
3.1.1.1.2 IIF ........................................................................................................................11 
3.1.1.1.3 Select Case............................................................................................................11 
3.1.1.2. Estrutura de Loop ......................................................................................................11 
3.1.1.2.1 For... Next .............................................................................................................11 
3.1.1.2.2 Do... Loop .............................................................................................................12 
3.1.1.2.3 Do While... Loop ....................................................................................................12 
3.1.1.2.4 Do Until... Loop......................................................................................................12 
3.1.1.2.5 While... Wend ........................................................................................................13 
3.1.1.2.6 For Each... Next .....................................................................................................13 
3.1.1.2.7 With... End With.....................................................................................................13 
3.1.1.3. Saindo das Estruturas de Loop....................................................................................14 
3.2. FORMULÁRIOS E CONTROLES ................................................................................................14 
3.3. MÓDULOS (MODULE) E MÓDULOS CLASSE (CLASS MODULE)......................................................17 
3.3.1. Módulos (Module) .............................................................................................................17 
3.3.2. Módulos Classe (Class Module)...........................................................................................18 
3.4. MENU EDITOR....................................................................................................................20 
3.5. EXERCÍCIOS.......................................................................................................................21 
4. CONTROLES PERSONALIZADOS (PROPRIEDADES E EVENTOS)..............................25 
4.1. MICROSOFT WINDOWS COMMON CONTROL 6.0.......................................................................26 
4.1.1. ImageList (Lista de Imagens).............................................................................................26 
4.1.1.1. Carregando uma Imagem da Coleção. .........................................................................26 
4.1.2. Controle ListView (Lista de Visualização) .............................................................................28 
4.1.3. Controle ProgressBar (Barra de Progresso)..........................................................................30 
4.1.4. Controle StatusBar (Barra de Status) ..................................................................................31 
4.1.5. Controle ToolBar (Barra de Ferramentas) ............................................................................32 
4.1.6. Controle TreeView (Árvore de Visualização).........................................................................34 
4.1.7. Controle Slider ..................................................................................................................37 
4.2. EXERCÍCIOS.......................................................................................................................37 
5. FUNÇÕES DATA E HORA ...........................................................................................39 
5.1. DATE ................................................................................................................................39 
5.2. DATAVALUE.......................................................................................................................39 
5.3. FORMAT ............................................................................................................................39 
5.4. PROJETO COMENTADO .........................................................................................................39 
6. CONTROLANDO AS VERSÕES E INFORMAÇÕES DO SEU APLICATIVO ....................41 
Microsoft Visual Basic – Sumário III 
7. TRABALHANDO COM FUNÇÕES NUMÉRICAS E FINANCEIRAS ................................45 
7.1. FUNÇÕES NUMÉRICAS .........................................................................................................45 
7.2. FUNÇÕES FINANCEIRAS .......................................................................................................45 
7.2.1. Função Pmt (Pagamento de Anuidade Baseado num Período) ...............................................45 
7.2.2. Função FV (Valor Futuro de Anuidade)................................................................................46 
7.2.3. Função IPmt (Taxa de Juros para Durante um Período)........................................................46 
7.2.4. Função NPer (Número de Períodos para Atingir uma Anuidade) ............................................46 
7.2.5. Função PV (Presente Valor Presente Baseado num Período)..................................................46 
7.2.6. Função NPV (Valor Presente Líquido) ..................................................................................46 
7.2.7. Função Rate (Taxa por Período) .........................................................................................46 
8. INICIANDO COM A SQL (STRUCTURED QUERY LANGUAGE)...................................47 
8.1. CRIANDO TABELAS VIA SQL. ................................................................................................48 
8.2. ÍNDICES E TABELAS - CRIAR, ALTERAR E EXCLUIR....................................................................498.2.1. Excluindo Tabelas .............................................................................................................49 
8.2.2. Alterando Tabelas .............................................................................................................49 
8.2.3. Criando Índices.................................................................................................................50 
8.2.4. Excluindo Índices ..............................................................................................................50 
8.3. TESTANDO AS INSTRUÇÕES SQL ...........................................................................................50 
8.4. SQL - CRIANDO CONSULTAS PARAMETRIZADAS .......................................................................50 
8.4.1. Métodos de QueryDef........................................................................................................51 
9. TRABALHANDO COM BANCO DE DADOS ACCESS ....................................................53 
9.1. CRIANDO UM BANCO DE DADOS ............................................................................................53 
9.2. O MODELO DAO (DATA ACCESS OBJECT) ...............................................................................54 
9.3. ABRINDO UM BANCO DE DADOS ............................................................................................55 
9.3.1. Recordset.........................................................................................................................55 
9.3.1.1. dbOpenTable.............................................................................................................55 
9.3.1.2. dbOpenDynaset .........................................................................................................55 
9.3.1.3. dbOpenSnapshot .......................................................................................................56 
9.3.1.4. dbOpenFowardOnly ...................................................................................................56 
9.3.1.5. dbAppendOnly...........................................................................................................57 
9.3.1.6. dbReadOnly ..............................................................................................................57 
9.3.1.7. dbSeeChanges...........................................................................................................57 
9.3.2. Utilizando o Motor do Banco de Dados DBEngine .................................................................57 
9.3.3. Utilizando o Controle DataControl .......................................................................................58 
9.4. ACESSANDO DADOS DE UMA TABELA ......................................................................................58 
9.4.1. Acesso à Dados de uma Tabela Utilizando o DataControl ......................................................58 
9.4.2. Acesso à Dados de uma Tabela Utilizando Instrução SQL .....................................................58 
9.5. ADICIONANDO, LOCALIZANDO, EDITANDO E EXCLUINDO DADOS DE UMA TABELA...........................59 
9.5.1. Adicionado Dados .............................................................................................................59 
9.5.2. Localizando Dados ............................................................................................................60 
9.5.2.1. Exemplo de como Localizar Dados...............................................................................61 
9.5.3. Editando Dados ................................................................................................................63 
9.6. COMPACTANDO E RECUPERANDO UM BANCO DE DADOS .............................................................63 
9.6.1. Compactando Banco de Dados ...........................................................................................63 
9.6.2. Recuperando Banco de Dados............................................................................................64 
9.7. SALVANDO E RECUPERAR FIGURAS NUM BANCO DE DADOS EM CAMPO OLE ..................................64 
9.8. ACESSANDO OUTROS BANCOS DE DADOS ................................................................................66 
9.8.1. Banco de Dados dBase ......................................................................................................66 
10. TRABALHANDO COM O CONTROLE MSCHART NO VISUAL BASIC ...........................69 
10.1. CRIANDO UM GRÁFICO MANUALMENTE...................................................................................70 
10.2. ACESSANDO DADOS DE UM BANCO DE DADOS PARA PLOTAR UM GRÁFICO.....................................73 
11. TRATANDO ERROS EM SUA APLICAÇÃO ..................................................................75 
11.1. OS OBJETO ERR E ERROR DO VISUAL BASIC ............................................................................75 
 IV 
11.1.1. Propriedades dos ObjetosErr e Error ...............................................................................75 
11.1.1.1. Propriedade Description .............................................................................................75 
11.1.1.2. Propriedades HelpFile/HelpContext ..............................................................................75 
11.1.1.3. Propriedades Number.................................................................................................75 
11.1.1.4. Propriedades Source ..................................................................................................75 
11.1.1.5. Propriedades LastDLLError..........................................................................................75 
11.1.2. Métodos do Objeto Err...................................................................................................75 
11.1.2.1. Método Clear.............................................................................................................75 
11.1.2.2. Método Raise ............................................................................................................76 
11.2. ERROS RELACIONADO A BANCO DE DADOS..............................................................................76 
11.3. ERROS RELACIONADO A ARQUIVO .........................................................................................77 
11.4. ROTINA PARA TRATAMENTO DE ERROS ...................................................................................77 
12. DISTRIBUINDO SUA APLICAÇÃO.............................................................................81 
12.1. COMPILANDO O PROJETO .....................................................................................................81 
12.2. SETUP WIZARD (VISUAL BASIC 5.0)......................................................................................81 
12.3. PACKAGE AND DEPLOYMENT WIZARD (VISUAL BASIC 6.0)........................................................81 
12.4. INNO SETUP COMPILER .......................................................................................................82 
12.4.1. Dicas para Visual Basic ..................................................................................................82 
12.4.1.1. Gerando as Mensagens de Instalação em Português. ....................................................82 
12.4.1.2. Instalando Arquivos OCX. ...........................................................................................82 
12.4.1.3. Instalando Arquivos do Visual Basic.............................................................................83 
12.4.1.4. Usando o SETUP.LST Gerado pelo P & D Wizard...........................................................83 
12.4.1.5. Instalando ADO, DCOM e MDAC..................................................................................84 
12.5. ISTOOL.............................................................................................................................8413. TRABALHANDO COM API'S ......................................................................................87 
13.1. ABRINDO ARQUIVO DE AJUDA ATRAVÉS DE API........................................................................87 
13.2. ABRINDO O BROWSER OU EDITOR DE E-MAIL PADRÃO...............................................................88 
13.3. ENCONTRANDO O DIRETÓRIO DE INSTALAÇÃO DO WINDOWS E DE SISTEMA ..................................88 
13.4. DRIVE DO CD ....................................................................................................................89 
13.5. ECREVENDO E OBTENDO INFORMAÇÕES DE UM ARQUIVO INI.....................................................90 
14. CRIANDO ARQUIVOS DE AJUDA BASEDO EM ARQUIVOS HTML .............................93 
14.1. CRIANDO UM ARQUIVO DE AJUDA..........................................................................................93 
14.1.1. Arquivo de Conteúdo .....................................................................................................95 
14.1.2. Arquivo de Índice ..........................................................................................................97 
14.1.3. Aparência da Janela do Arquivo de Ajuda ........................................................................97 
14.1.4. Configurar Sensibilidade ao Contexto ..............................................................................97 
14.1.5. Compilando o Projeto da Ajuda.......................................................................................99 
14.1.6. Nota Final .....................................................................................................................99 
14.2. ACESSANDO O ARQUIVO CHM, ATRAVÉS DO VISUAL BASIC .......................................................99 
15. GERANDO RELATÓRIOS COM O CRYSTAL REPORTS .............................................101 
15.1. INICIALIZANDO O CRYSTAL REPORTS...................................................................................101 
15.2. CRIANDO UM NOVO RELATÓRIO ..........................................................................................101 
15.3. INSERINDO NOVOS CAMPOS A PARTIR DA TABELA. ..................................................................105 
15.4. FORMATANDO CAMPOS, INSERINDO FIGURAS, LINHAS E CAIXAS ................................................105 
15.4.1. Formatando Campos.................................................................................................... 105 
15.4.2. Inserindo Figuras, Linhas e Caixas ................................................................................ 106 
15.5. TRABAHANDO COM FÓRMULAS ............................................................................................107 
15.5.1.1. Especificando o valor de uma fórmula através do Visual Basic...................................... 108 
15.6. IMPRIMINDO, VISUALIZANDO E EXPORTANDO UM RELATÓRIO A PARTIR DO VISUAL BASIC............108 
15.6.1. Imprimindo................................................................................................................. 108 
15.6.2. Visualizando................................................................................................................ 108 
15.6.3. Exportando (para arquivo e por e-mail) ......................................................................... 109 
15.6.3.1. Exportando para arquivo formato do Word................................................................. 109 
Microsoft Visual Basic – Sumário V 
15.6.3.2. Enviando um relatório em anexo por e-mail ............................................................... 110 
15.7. OUTROS CÓDIGOS ÚTEIS PARA TRABALHAR COM RELATÓTIOS....................................................111 
15.7.1. Abrindo um relatório, cujo banco de dados possuui senha............................................... 111 
15.7.2. Alterar via código o caminho da base de dados do relatório ............................................ 111 
15.7.3. Como direcionar a impressão do Crystal para a porta LPT2?............................................ 111 
15.7.4. Fazendo com que a janela de impressão do Crystal Reports fique como filha (MDIChild) de 
um MDI? ................................................................................................................................. 111 
15.7.5. Inserir uma quebra de página no Crystal Reports? ......................................................... 111 
15.7.6. Modificar as margens de um relatório em modo de execução?......................................... 111 
15.7.7. Outra forma de especificar a senha do banco de dados utilizado pelo relatório.................. 112 
16. CRIANDO UM ACTIVEX ..........................................................................................113 
17. BIBLIOGRAFIA CONSULTADA................................................................................115 
 
 VI 
Microsoft Visual Basic – Índices de figuras VII 
Índice de Figuras 
FIGURA 1. INTERFACE MDI (MUTIPLE DOCUMENT INTERFACE) DO VISUAL BASIC 6.0 .................................................3 
FIGURA 2. INTERFACE SDI (SINGLE DOCUMENT INTERFACE) DO VISUAL BASIC 6.0 ....................................................3 
FIGURA 3. TELA DE SELEÇÃO DE UM NOVO PROJETO, COM OS DIVERSOS MODELOS.......................................................6 
FIGURA 4. ORGANOGRAMA SIMPLIFICADO DE UMA APLICAÇÃO. ............................................................................17 
FIGURA 5. JANELA DE PROPRIEDADES DO VISUAL BASIC. ...................................................................................17 
FIGURA 6. MENU EDITOR DO MICROSOFT® VISUAL BASIC. ...............................................................................21 
FIGURA 7. CAIXA DE CONTROLES ACTIVEX PERSONALIZADOS, LOCALIZADOS NO SISTEMA. ...........................................25 
FIGURA 8.MICROSOFT WINDOWS COMMON CONTROL 6.0 .................................................................................26 
FIGURA 9. A- CONFIGURAÇÕES DO TAMANHO DAS IMAGENS; B- COLEÇÃO DE IMAGENS INSERIDAS NO IMAGELIST. .............28 
FIGURA 10. CONTROLE LISTVIEW, EXIBINDO ÍCONES PEQUENOS..........................................................................29 
FIGURA 11. CONTROLES PROGRESSBAR'S EXIBINDO OS DOIS VALORES DA PROPRIEDADES SCROLLING (0 – 
CCSCROLLINGSTANDARD E 1- CCSCROLLINGSMOOTH) ...............................................................................30 
FIGURA 12. CONTROLE STATUSBAR, EXIBINDO VÁRIAS INFORMAÇÕES ADICIONAIS....................................................31 
FIGURA 13. CONTROLE STATUSBAR DO PROCESSADOR DE TEXTOS MICROSOFT® WORD............................................31 
FIGURA 14. CONTROLES TOOLBAR'S ALINHADOS NO TOPO DA JANELA E EM BAIXO E COM A PROPRIEDADE STYLE 1 – TBRFLAT E 
0 – TBRSTANDARD, RESPECTIVAMENTE..................................................................................................32 
FIGURA 15. CAIXA DE PROPRIEDADES GERAL DE UMA BARRA DE FERRAMENTAS (ABA GENERAL).....................................34 
FIGURA 16. CAIXA DE PROPRIEDADES DOS BOTÕES DE UMA BARRA DE FERRAMENTAS (ABA BUTTONS). ...........................34 
FIGURA 17. CAIXA DE PROPRIEDADES DOS BOTÕES DE UM CONTROLE TREEVIEW (ABA GENERAL). .................................35 
FIGURA 18. EXEMPLO DE UM CONTROLE TREEVIEW, COM UM NODE PAI (ÍCONES) E 4 NODES FILHOS. LINESTYLE IGUAL A 1– 
TVWROOTLINE. ..............................................................................................................................36 
FIGURA 19. CONTROLE SLIDER ..................................................................................................................37 
FIGURA 20. INTERFACE DA CALCULADORA DE IDADE .........................................................................................40 
FIGURA 21. CAIXA DE DIÁLOGO DE CONTROLE VERSÕES E INFORMAÇÕES DO APLICATIVO. ...........................................41FIGURA 22. TELA DE INFORMAÇÕES DE UM PROJETO.........................................................................................43 
FIGURA 23. ESTRUTURA DO BANCO DE DADOS COM QUATRO TABELAS....................................................................48 
FIGURA 24. ORGANOGRAMA SIMPLES DE UM BANCO DE DADOS. AS LINHAS PONTILHADAS INDICAM O RELACIONAMENTO ENTRE 
AS TABELAS....................................................................................................................................53 
FIGURA 25. HIERARQUIA DE CLASSES DAO ...................................................................................................54 
FIGURA 26. LAYOUT PARA PESQUISA DE DADOS DO PROGRAMA LIZARO VISUAL BASIC DICAS V3.0 ................................63 
FIGURA 27. CONTROLE MICROSOFT CHART 5.0 ..............................................................................................69 
FIGURA 28. GRÁFICO DE RECEITAS/DESPESAS DE ABRIL A JUNHO APRESENTANDO A MÉDIA DE CADA MÊS. ........................71 
FIGURA 29. GRÁFICO CRIADO COM DADOS DE ENTRADA MANUAL, EXIBINDO AS ESTATÍSTICAS. .....................................72 
FIGURA 30. GRÁFICO PLOTADO A PARTIR DOS DADOS DE UM BANCO DE DADOS ACCESS 97 .........................................74 
FIGURA 31. TELA INICIAL DO SETUP WIZARD QUE ACOMPANHA O VISUAL BASIC 5.0. ................................................81 
FIGURA 32. TELA INICIAL DO PACKAGE AND DEPLOYMENT WIZARD QUE ACOMPANHA O VISUAL BASIC 5.0 ......................82 
FIGURA 33. FIGURA DO EDITOR DE SCRIPT DO INNO SETUP COMPILER V3.0. ..........................................................84 
FIGURA 34. INTERFACE DO PROGRAMA ISTOOL 3.0 EM PORTUGUÊS (BR) ..............................................................85 
FIGURA 35.JANELA PARA INICIAR UM NOVO ARQUIVO........................................................................................93 
FIGURA 36. TELA DO WIZARD PARA ESPECIFICAR O CAMINHO E O NOME DO PROJETO. ...............................................94 
FIGURA 37. LISTAGEM DE ARQUIVOS HTML, QUE IRÃO FAZER PARTE DO ARQUIVO DE AJUDA. ......................................94 
FIGURA 38. JANELA DO PROJETO RECÉM CRIADO, COM AS OPÇÕES E LISTAGEM DE ARQUIVOS CRIADOS. ..........................95 
FIGURA 39. JANELA DE OPÇÃO PARA CRIAÇÃO OU ABERTURA DE UMA RQUIVO DE CONTEÚDO. .......................................95 
FIGURA 40. JANELA DE ADIÇÃO DE TÓPICOS E DE LIGAMENTO (LINK) COM O ARQUIVO CORRESPONDENTE. .......................96 
FIGURA 41. JANELA DE "LINKAGEM" DE ARQUIVO AO TÓPICO DO CONTEÚDO. A LISTAGEM É EXIBIDA POR TÍTULO DO ARQUIVO.
..................................................................................................................................................96 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 
 
VIII 
FIGURA 42. ABA DE CONTENTS, COM SUA APARÊNCIA FINAL LISTANDO TODOS OS TÓPICOS CRIADOS..............................97 
FIGURA 43. JANELA HTMLHELP API INFORMATION COM A ADIÇÃO DO ARQUIVO DE CABEÇALHO INSECTA.H. ...................98 
FIGURA 44. JANELA DE LIGAÇÃO DA DEFINIÇÃO (IDH_MAIN), COMO O ARQUIVO HTML (INSECTA.HTM). .......................98 
FIGURA 45. ÍCONE DO CRYSTAL REPORTS V4.6. ........................................................................................... 101 
FIGURA 46. JANELA PARA CRIAÇÃO DE UM RELATÓRIO NOVO NO CRYSTAL REPORTS................................................. 101 
FIGURA 47. JANELA CREATE REPORT EXPERT, COM A OPÇÃO O PASSO 1: SELEÇÃO DE TABELAS NO CRYSTAL REPORTS ...... 102 
FIGURA 48. PASSO 3: SELEÇÃO DE CAMPOS A SEREM EXIBIDOS NO RELATÓRIO DO CRYSTAL REPORTS. ......................... 103 
FIGURA 49. PASSO 4: SELEÇÃO DOS CAMPO DE ORDENAÇÃO DO RELATÓRIO E TIPO DE ORDENAÇÃO NO CRYSTAL REPORTS. 103 
FIGURA 50. PASSO 8: ESPECIFICAÇÃO DE TÍTULO E SELEÇÃO SE ESTILO DO RELATÓRIO NO CRYSTAL REPORTS................ 104 
FIGURA 51. JANELA DO MODO DE DESENHO DO CRYSTAL REPORT. ..................................................................... 104 
FIGURA 52. JANELA PAR INSERÇÃO DE NOVO(S) CAMPO(S) AO RELATÓRIO NO CRYSTAL REPORTS................................ 105 
FIGURA 53. BARRA DE FERRAMENTAS DE FORMATAÇÃO DO TEXTO DOS CAMPOS NO CRYSTAL REPORTS. ........................ 105 
FIGURA 54. MENU SUSPENSO PARA FORMATAÇÃO DO CAMPO (FONTE, FORMATO, BORDAS, ETC.) NO CRYSTAL REPORTS .... 106 
FIGURA 55. JANELA DE ALTERAÇÃO DO FORMATO DO CAMPO NO CRYSTAL REPORTS. ............................................... 106 
FIGURA 56. ALTERAÇÃO DE BORDA E CORES DE BORDA E TEXTO DO CAMPO DO CRYSTAL REPORTS. ............................. 106 
FIGURA 57. BARRA DE FERRAMENTAS PARA INSERÇÃO DE FIGURA, LINHA E CAIXA (RESPECTIVAMENTE) DO CRYSTAL REPORTS.
................................................................................................................................................ 107 
FIGURA 58. JANELA DE EDIÇÃO DE FÓRMULA DO CRYSTAL REPORTS.................................................................... 107 
FIGURA 59. BARRA DE FERRAMENTAS NA JANELA DE VISUALIZAÇÃO DO CRYSTAL REPORTS. ....................................... 109 
FIGURA 60.JANELA DE VISUALIZAÇÃO DE UM RELATÓRIO PELO CRYSTALREPORT ACTIVEX CONTROL............................. 109 
FIGURA 61. CONTROLE ACTIVEX EM DESIGN-TIME. ....................................................................................... 113 
 
Microsoft Visual Basic – Índices de códigos IX 
Índice de Códigos 
CÓDIGO 1. EXEMPLO DE DECLARAÇÃO DE VARIÁVEIS NO VISUAL BASIC....................................................................7 
CÓDIGO 2. PROCEDIMENTO PARA EXIBIÇÃO DO FORMULÁRIO FRMMAIN....................................................................9 
CÓDIGO 3. CÓDIGO EXTENSOS PARA ALTERAR A PROPRIEDADE CAPTION E BACKCOLOR, DO FORM2 E EXIBI-LO. ................18 
CÓDIGO 4. CÓDIGO MAIS PRÁTICOS ATRAVÉS DA FUNÇÃO SHOWFORM PARA ALTERAR A PROPRIEDADE CAPTION E BACKCOLOR, 
DO FORM2 E EXIBI-LO. .....................................................................................................................18 
CÓDIGO 5. ESTE EXEMPLO CARREGA VÁRIOS BITMAPS EM UM CONTROLE IMAGELIST. QUANDO O FORM É CLICADO UM UMA 
IMAGEM DA LISTA É SUBSTITUÍDA POR OUTRA IMAGEM. ESTE EXEMPLO NECESSITA DE UM CONTROLE IMAGELIST E UM 
CONTROLE PICTUREBOX. ...................................................................................................................28 
CÓDIGO 6. LINHA DE COMANDO PARA RETORNAR A SEGUNDA IMAGEM DA COLEÇÃO DA IMAGELIST1 PARA O CONTROLE 
PICTURE1. ....................................................................................................................................28 
CÓDIGO 7, LINHA DE COMANDO PARA RETORNAR A SEGUNDA IMAGEM (ÍCONE) DA COLEÇÃO DA IMAGELIST1 PARA O CONTROLE 
PICTURE1. ....................................................................................................................................28 
CÓDIGO 8. ROTINA SIMPLES PARA EXIBIR O PROGRESSO DE UM CONTROLE PROGRESSBAR...........................................30 
CÓDIGO 9. LINHA DE COMANDO PARA EXTRAIR A IMAGEM DE INDEX 1 CONTIDA NUM CONTROLE IMAGELIST E RETORNA-LO 
PARA O PAINEL A PROPRIEDADE PICTURE DA BARRA DE STATUS COM O INDEX 1. ...............................................31 
CÓDIGO 10. CONTROLE STATUSBAR. ATRIBUINDO UM TEXTO AO PAINEL 1 E ADICIONANDO PAINÉIS E FIGURAS. ...............32 
CÓDIGO 11. ADIÇÃO DE NODES NUM CONTROLE TREEVIEW................................................................................37 
CÓDIGO 12. REMOVENDO UM NODE DO CONTROLE TREEVIEW. ...........................................................................37 
CÓDIGO 13. PROJETO CALCULADORA DE DIAS, MESES E ANOS VIVIDOS..................................................................40 
CÓDIGO 14. PROJETO PARA EXIBIR AS INFORMAÇÕES DE UM APLICATIVO................................................................42 
CÓDIGO 15. ROTINA PARA ACESSO A DADOS DE UMA TABELA UTILIZANDO A INSTRUÇÃO DBOPENTABLE..........................55 
CÓDIGO 16. ROTINA PARA ACESSO A DADOS DE UMA TABELA UTILIZANDO A INSTRUÇÃO DBOPENDYNASET, UTILIZANDO 
INSTRUÇÕES SQL............................................................................................................................55 
CÓDIGO 17. PREENCHENDO UMA CAIXA DE LISTAGEM COM DADOS DE UMA TABELA UTILIZANDO O RECORDESET DO TIPO 
FOWARD-ONLY. ..............................................................................................................................57 
CÓDIGO 18. ROTINA PARA ABERTURA DE UMA BASE DE DADOS MS ACCESS.............................................................58 
CÓDIGO 19. ROTINA PARA ABERTURA DE UMA BASE DE DADOS MS ACCESS COM SENHA..............................................58 
CÓDIGO 20. ROTINA PARA ACESSO A UM BANCO DE DADOS DO TIPO MS ACCESS. .....................................................58 
CÓDIGO 21. ROTINA PARA ACESSO A DADOS DE UMA TABELA VIA INSTRUÇÃO SQL....................................................59 
CÓDIGO 22. ROTINA PARA PREPARAR UMA TABELA PARA RECEBER NOVOS DADOS (REGISTRO) ......................................59 
CÓDIGO 23. ROTINA PARA GRAVAR DADOS EM UMA TABELA DO BANCO DE DADOS. ....................................................60 
CÓDIGO 24. ROTINA PARA LOCALIZAR DADOS DENTRO DE UMA TABELA, UTILIZANDO AS INSTRUÇÕES DO DATACONTROL E 
INSTRUÇÕES SQL............................................................................................................................60 
CÓDIGO 25. ROTINA PARA FILTRAR OS DADOS DE UMA TABELA............................................................................61 
CÓDIGO 26. ROTINA PARA LOCALIZA DADOS DENTRE DE UMA TABELA, UTILIZANDO SQL E EM SEGUINDA PREENCHENDO UMA 
TREEVIEW COM OS DADOS ENCONTRADOS. .............................................................................................62 
CÓDIGO 27. ROTINA PARA EDITAR UM REGISTRO GRAVADO EM UMA TABELA DO BANCO DE DADOS. ................................63 
CÓDIGO 28. ROTINA PARA COMPACTAR UM BANCO DE DADOS SEM SENHA. ..............................................................64 
CÓDIGO 29. ROTINA PARA COMPACTAR UM BANCO DE DADOS COM SENHA. .............................................................64 
CÓDIGO 30. ROTINA PARA RECUPERAR UM BANCO DE DADOS CORROMPIDO.............................................................64 
CÓDIGO 31. ROTINA PARA SALVAR E RECUPERAR UMA FIGURA DENTRO DUM CAMPO OLE DE UM BANCO DE DADOS. ............66 
CÓDIGO 32. ROTINA PARA ACESSO À BANCO DE DADOS DBASE VERSÃO III. ............................................................66 
CÓDIGO 33. ROTINA PARA ACESSO À BANCO DE DADOS FOXPRO VERSÃO 2.5. .........................................................66 
CÓDIGO 34. ROTINA PARA ACESSO À BANCO DE DADOS EXCEL VERSÃO 4.0.............................................................67 
CÓDIGO 35. ROTINA PARA ACESSO À BANCO DE DADOS TEXTO. ...........................................................................67 
CÓDIGO 36. CÓDIGO PARA CRIAÇÃO DE UM GRÁFICO DE RECIETAS/DESPESAS E MÉDIA DUTRANTE TRÊS MESES..................70 
CÓDIGO 37. CÓDIGOS PARA CRIAÇÃO DE UM GRÁFICO MANUALMENTE E XIBIÇÃO DE ESTATÍSTICAS. ...............................72 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 
 
X 
CÓDIGO 38. CÓDIGO PARA EXTRAIR DADOS DE UM BANCO DE DADOS ACCESS 97, LISTANDO O NÚMERO DE PESQUISADORES 
POR ESTADO. .................................................................................................................................73 
CÓDIGO 39. ROTINA COMPLETA PARA INTERCEPTAÇÃO, EXIBIÇÃO E ARMAZENAMENTO DE ERRO DE UMA APLICAÇÃO............80 
CÓDIGO 40. EXEMPLO DE COMO ABRIR UM ARQUIVO DE AJUDA ATRAVÉS DE API ......................................................88 
CÓDIGO 41. EXEMPLO DE COMO ABRIR O BROWSER OU EDITOR DE E-MAIL PADRÃO ..................................................88 
CÓDIGO 42.EXEMPLO DE COMO ENCONTRAR O DIRETÓRIO DE INSTALAÇÃO DO WINDOWS E DE SISTEMA ........................89 
CÓDIGO 43. EXEMPLO DE COMO DETECTA R ALETRA DO DRIVE DO CD ...................................................................90 
CÓDIGO 44. EXEMPLO DE COMO ESCREVER E OBTER INFORMAÇÕES DE UM ARQUIVO INI.............................................91 
CÓDIGO 45. ESTRUTURA DE UMA ARQUIVO DE CABEÇALHO, CONTENDO OS TÓPICOS SENSÍVEIS AO CONTEXTO E SUA 
IDENTIFICAÇÃO NUMÉRICA. ................................................................................................................98 
CÓDIGO 46. CLASSE CLSHELPCHM, CRIADA PARA ACESSAR ATRAVÉS DE API AO ARQUIVO DE AJUDA CHM, PELO VISUAL BASIC
..................................................................................................................................................99 
CÓDIGO 47. CODÍGO PARA EXIBIR O ARQUIVO DE AJUDA ATRAVÉS DO EVENTO CLICK, DE UM COMMANDBUTTON, CHAMADO 
CMDHELP. ................................................................................................................................... 100 
CÓDIGO 48. CODÍGO PARA EXIBIR O CONTEXTO ESPECÍFCO DO ARQUIVO DE AJUDA ATRAVÉS DO EVENTO CLICK, DE UM 
COMMANDBUTTON, CHAMADO CMDHELP. ............................................................................................. 100 
CÓDIGO 49. TEXTO DA FÓRMULA "NOME" INSERIDA NO RELATÓRIO DO CRYSTAL REPORTS........................................ 107 
CÓDIGO 50. ENVIO DE VALOR PARA UMA FÓRMULA DO CRYSTALREPORT .............................................................. 108 
CÓDIGO 51. FILTRAGEM DE DADOS NO CRYSTALREPORTS ATRAVÉS DO VISUAL BASIC.............................................. 108 
CÓDIGO 52. CÓDIGO PARA IMPRESSÃO DIRETA DO RELATÓRIO SEM VISUALIZAÇÃO PRÉVIA NO CRYSTAL REPORTS. ........... 108 
CÓDIGO 53. CÓDIGO PARA VISUALIZAR UM RELATÓRIO. .................................................................................. 109 
CÓDIGO 54. CÓDIGO PARA EXPORTAR UM ARQUIVO NO FORMATO DO WORD. ........................................................ 110 
CÓDIGO 55. EXPORTANDO UM ARQUIVO PARA UMA MENSAGEM DE E-MAIL............................................................. 111 
CÓDIGO 56. CÓDIGO DO CONTROLE ACTIVEX PARA ESPECIFICAR E RETORNAR AS PROPRIEDADES. ............................... 114 
CÓDIGO 57. CÓDIGO PARA EXIBIR A ARQUIVO DE AJUDA ESPECÍFICO ATRAVÉS DA API WINHELP NO CONTROLE ACTIVEX. . 114 
 
Microsoft Visual Basic – Índices de tabelas XI 
Índice de Tabelas 
TABELA 1. CONTROLES BÁSICO E SUAS DESCRIÇÕES. ..........................................................................................4 
TABELA 2. TIPO DE VARIÁVEIS SUA CAPACIDADE DE USO. .....................................................................................6 
TABELA 3. SUGESTÃO DE PREFIXO PARA IDENTIFICAÇÃO DO TIPO DE VARIÁVEL...........................................................7 
TABELA 4. FUNÇÕES INTERNAS DO VISUAL BASIC PARA CONVERSÃO DE DADOS. .........................................................7 
TABELA 5. PREFIXOS PARA NOMES DOS OBJETOS MAIS UTILIZADOS EM APLICAÇÃO (SUGESTÃO DA MICROSOFT E DO AUTOR) 14 
TABELA 6. PRINCIPAIS PROPRIEDADES DE UM FORMULÁRIO.................................................................................16 
TABELA 7. CONSTANTES, VALORES E DESCRIÇÃO DO PROPRIEDADE VIEW DO CONTROLE LISTVIEW. ...............................28 
TABELA 8. PROPRIEDADES DO CONTROLE LISTVIEW. ........................................................................................29 
TABELA 9. CONSTANTES, VALORES E DESCRIÇÃO DA PROPRIEDADE STYLE DO CONTROLE STATUSBAR.............................31 
TABELA 10. AS CONSTANTES PARA RELATIONSHIP SÃO: ....................................................................................36 
TABELA 11. CONTROLES PARA O PROJETO IDADE. ............................................................................................39 
TABELA 12. CONTROLES PARA EXIBIR AS VERSÃO E AS INFORMAÇÕES DE UM PROJETO. ...............................................41 
TABELA 13.PRINCIPAIS FUNÇÕES NUMÉRICAS UTILIZADAS PELO VISUAL BASIC E A DESCRIÇÃO. ....................................45 
TABELA 14. TIPOS DE DADOS UPORTADOS PELO JET E PELA A SQL......................................................................49 
TABELA 15. TIPOS DE DADOS SUPORTADOS PELO BANCO DE DADOS ACCESS ............................................................53 
TABELA 16. THE OPENDATABASE METHOD SYNTAX HAS THESE PARTS....................................................................57 
TABELA 17. TIPO DE GRÁFICO A SEREM EXIBIDOS PELA PROPRIEDADE CHARTYPE, SUAS CONSTANTE E VALORES.................69 
TABELA 18. ERROS GENÉRICOS RELACIONADOS À OPERAÇÃO DE BANCO DE DADOS ....................................................76 
TABELA 19. ERROS RELACIONADOS A BLOQUEIO DE REGISTROS ...........................................................................76 
TABELA 20. ERROS RELACIONADOS A PERMISSÕES...........................................................................................77 
TABELA 21. STRINGS UTILIZADAS PELO ARQIVO SETUP.LST AS STRINGS EQUIVALNTES NO INNO SETUP COMPILER..............83 
 
 
 
 
Microsoft Visual Basic – Dedicatória e Agradecimentos XIII 
Dedicatória 
Dedico a presente obra a DEUS, pela concessão de minha 
vida, a minha mãe por aceitar está tarefa árdua, a minha 
filha pela paciência e por suportar as incansáveis e 
exageradas hora que fico na frente do computador. 
William Costa Rodrigues 
 
Agradecimentos 
A todos aqueles que direta ou indiretamente 
participaram e incentivaram-me na confecção da 
presente obra. 
Meus humildes e sinceros agradecimentos. 
William Costa Rodrigues
Microsoft Visual Basic – Introdução 1 
1. INTRODUÇÃO 
 O Microsoft™ Visual Basic é uma poderosa linguagem de programação, e tem uma grande 
vantagem em relação às outras linguagens, por ser do mesmo fabricante do sistema operacional 
Microsoft™ Windows tem uma maior integração com o mesmo. Outra vantagem e que os 
programas gerados pelo Visual Basic, para serem ser executados necessitam da biblioteca 
Msvbvm50.dll ou Msvbvm60.dll e outros arquivos de extensão de aplicativos. Na prática a 
vantagem é o seguinte, os programas têm tamanhos menores e são executados, compartilhando 
este arquivos (bibliotecas e ActiveX). 
 As interfaces de usuário gráficas, ou GUIs (pronuncia "gúis", do Inglês Graphic Interfaces 
User), revolucionaram a indústria da microinformática. Elas demonstram que a frase "Uma figura 
vale por mil palavras" é verdadeira para a maioria dos usuários de computadores. Em lugar do 
estranho prompt do DOS C:> que os usuários observavam durante muito tempo (e que assustou 
muitos deles), você é presenteado com uma área de trabalho cheia de ícones e com programas 
que utilizam mouse e menus. 
 Embora alguns programadores tenham apresentado sentimentos contraditórios a respeito 
das GUIs, os iniciantes gostam delas, e assim é de se esperar que os programas Windows sejam 
baseados no modelo GUI (e que tenham a aparência e proporcionem a sensação certa). Portanto , 
se você precisar desenvolver um programa para qualquer versão Windows, desejará Ter uma 
ferramenta para desenvolver com eficiência aplicativos fundamentados em GUIs, e o Visual Basic é 
a ferramentas mais indicada, por possui facilidade na síntese de código e interface amigável, 
próxima dos aplicativos do Windows. 
 Os exemplos e dicas aqui exibidos são de parte de exemplos de livros, do Help do Visual 
Basic, dicas da Internet (VBAccelerator.com – www.vbaccelerator.com de Steve MacMahon, 
vbbrasil.com – www.vbbrasil.com.br, VBMania – www.vbmania.com.br, José Carlos Macorati – Site 
Pessoal www.macoratti.net e etc.). 
 Uma recomendação bastante pertinente para que pretende programar é por em dia o 
Inglês, pois todos os comandos os arquivos de ajuda (Help) e a maioria da documentação para as 
linguagens de programação estão em Inglês. Outra recomendação é sempre que possui dúvidas 
acesse o arquivo de Ajuda ou o Books Online que vêm junto com o Visual Basic. 
 Para quem não possui uma versão registrada do Microsoft™ Visual Basic poderá adquirir 
gratuitamente no site da Microsoft a versão mais simplificada: Visual Basic Control Create. Apesar 
de muito básica é possível criar executáveis simples e componentes ActiveX, com a mesma 
facilidade das outras versões (Standard, Professional e Enterprise). 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 2 
Microsoft Visual Basic – Conceitos Básicos do Visual Basic 3 
2. CONCEITOS BÁSICO DO VISUAL BASIC 
 
 Se você já está familiarizado com o Visual Basic pode passar para o próximo capítulo, pois 
o capítulo atual visa fazer uma introdução do Visual Basic para os iniciantes. 
 
2.1. Interface do Visual Basic 
 
 O Visual Basic Possui uma interface amigável com o padrão MDI (Multiple Document 
Interface), porém é possível trabalhar com uma interface SDI (Single Document Interface), 
através do menu Tools > Options > Advanced. 
 
 
Figura 1. Interface MDI (Mutiple Document Interface) do Visual Basic 6.0 
 
Figura 2. Interface SDI (Single Document Interface) do Visual Basic 6.0 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 4 
2.2. Controle Básico 
 O Visual Basic ao ser carregado apresenta uma barra de ferramenta a esquerda da tela 
contendo 19 controles padrão, que fazem parte da Biblioteca do VB (MSVBVM50.dll v5.0 ou 
MSVBVM60.dll v6.0, em síntese a biblioteca significa MicroSoft Visual Basic Virtual Machine versão 
do VB, ou seja, Máquina Virtual do MicroSoft Visual Basic). Eles poderão ser utilizados e no 
momento da distribuição do aplicativo, também deverá ser distribuída à biblioteca (MSVBVMx0.dll, 
onde x é a versão do VB). A única exceção é o controle Data, que necessita da biblioteca DAO 
(Data Access Objects, ou seja, Acesso a Objetos de Dados. 
 
Tabela 1. Controles básicos e suas descrições. 
 Img Controle/Descrição 
 
Pointer – Não verdade não se trata de um Controle, mas sim uma 
ferramenta que serve para dimensionar e mover Controles. 
 PictureBox – Permite exibir figuras (bmp, ,jpg, gif, wmf, emf) e ícones. 
 
Label – Etiqueta ou rótulo, exibe um texto para identificação outros 
controles no formulário. 
 TextBox – Este controle permite ao usuário digitar texto. 
 
Frame – Moldura utilizada para agrupar controles dentro de um 
formulário. 
 
CommandButton – Controle que permite o usuário realizar uma 
operação, através de linhas de comando pré-determinadas. 
 
CheckBox – Pode assumir valores falso ou verdadeiro. Em um mesmo 
Formulário vários CheckBox's podem assumir o valor verdadeiro ao 
mesmo tempo. 
 
OptionButton – Pode também assumir valores falso/verdadeiro, mas 
em um mesmo Formulário somente um OptionButton pode assumir o 
valor verdadeiro. 
 
ComboBox – Combina caixa de texto com caixa de listagem. O usuário 
pode digitar a informação como também pode encolher da lista. 
 ListBox – Exibe uma lista de itens que o usuário pode selecionar. 
 
 
HScrollBar e VScrollBar – Permite selecionar com o mouse um 
determinado valor numa faixa de valores. 
 
Timer – Controla intervalos de tempo determinados pelo programador 
em milisegundos. 
 DriveListBox – Exibe os drivers do computador. 
 
DirListBox – Exibe as pastas (diretórios) do computador. 
 FileListBox – Exibe os arquivos de uma pasta (diretório). 
 Shape – Permite exibir várias formas geométricas num formulário. 
 Line – Permite traçar linhas dentro do formulário. 
 
Image – Permite exibir figuras (bmp, jpg, gif, wmf, emf) e ícones, ainda 
permitindo que seja dimensionado de acordo com a necessidade do 
programador. 
 
Data – Permite acessar diversas base de dados. 
 
 
OLE – permite incorporar objetos ou arquivos no formulário. 
 
Microsoft Visual Basic – Conceitos Básicos do Visual Basic 5 
2.3. Controles Personalizados 
 As versões Professional e Enterprise permitem que o programador utilize controle 
personalizados, que são os ActiveX, que possuem funções específicasde acordo com o controle. 
Alguns do mais utilizados são RichTextBox, CommomDialog, Toolbar, StatusBar, 
ProgressBar; TreeView, ListView, ImageList, Slider, MSChart, entre outros. Cada um 
possui sua função específica. Deste modo atendendo as necessidades do programador. 
 Para acessar os controle personalizados no Visual Basic, basta clicar Project > 
Components... ou pressionar "Control+T". 
 Existe uma infinidade de ActiveX no diretório do sistema (em geral C:\Windows\System) 
que poderão ser utilizados, caso o ambiente suporte tal componente ou se ela estiver registrado 
no sistema. Além disto o programador poderá adquirir componentes personalizados elaborados por 
empresas de Software ou na Internet (gratuitamente). 
 O Visual Basic permite que o usuário avançado elabore seus próprios controles, deste modo 
atendendo mais ainda as necessidades específicas do programador, maiores detalhes serão vistos 
no Capítulo 4. 
 
2.4. Tipos de Projetos 
 O Visual Basic permite nas versões Professional e Enterprise diverso tipos de projeto. A 
seguir consta a descrição de cada projeto: 
 
 Standard EXE – Este é o projeto padrão. Através do qual o programador inicia um novo 
projeto baseado na construção de um aplicativo executável comum; 
 ActiveX EXE – Este projeto permite que o aplicativo gerado possa de utilizado ou distribuído 
pela Internet; 
 ActiveX DLL – Este tipo de projeto permite a criação de executáveis do tipo DLL (Dynamic 
Link Libary, ou seja Biblioteca de Vínculo Dinâmico). Sua construção permite a utilização dos 
códigos nela construídos, em projeto futuros; 
 ActiveX Control – Permite a criação de controles personalizados de acordo com a 
necessidade de funções e controles para outros projetos, minimizando assim o excesso de 
programação; 
 VB Application Wizard – Este projeto dispara o assistente de criação de aplicativos do Visual 
Basic, permitindo a criação de formulários chaves de uma aplicação como a tela de entrada 
SplashScreen, formulário das informações do sistema, vínculo com base de dados, ente outros; 
 VB Enterprise/Professional Edition Controls – Este tipo de projeto permite que o 
programador elabore um aplicativo com base em todos os controles disponíveis para as 
versões Professional e Enterprise; 
 Addin – Permite a elaboração de Add-ins que poderão ser utilizados pelo Visual Basic, para 
automatizar tarefas repetitivas e/ou complexas; 
 ActiveX Document DLL – Permite criar DLLs do tipo ActiveX que podem ser utilizadas na 
Internet para exibir ou capturar dados; 
 ActiveX Document EXE – Permite que seja criado documentos para utilização na Internet. 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 6 
 
Figura 3. Tela de seleção de um novo projeto, com os diversos modelos. 
 
2.5. Tipo de Variáveis 
 
 O Visual Basic trabalha com 8 tipo de variáveis fixas que possuem características próprias 
de tamanho e forma de uso. Porém você poderá criar variáveis temporárias para atender suas 
necessidade. A seguinte demonstra o nome das variáveis e a capacidade de dados de cada uma. 
 
Tabela 2. Tipo de variáveis sua capacidade de uso. 
Tipo de Variável Capacidade 
Boolean True ou False 
Byte 0 a 256 
Currency -922.337.203.685.477,5808 a -922.337.203.685.477,5807 
Date Qualquer expressão de data válida. 
Double 
(Valores negativos) 
-1,79769313486232 E-308 a -4,94065645841247 E-324 
(Valores positivos) 
4,94065645841247 E-324 a 1,79769313486232 E-308 
Integer -32.768 a 32.767 
Long -2.147.483.648 a 2.417.483.647 
Single 
(Valores negativos) 
-3,402823 E-38 a -1,401298 E-45 
(Valores positivos) 
1,401298 E-45 a 3,402823 E-38 
String Qualquer tamanho 
Variant – 
 
2.6. Declarando Variáveis no Visual Basic 
 As variáveis do Visual Basic (como visto no Tópico 2.5), podem ser declaradas dentro de 
eventos ou procedimentos. Quando o programador declara uma variável com Dim, esta será 
eliminada da memória, quando o evento finalizar, entretanto se a variável for declarada como 
Public, está permanecerá na memória até que a aplicação seja finalizada. Duas outras formas de 
declarar uma variável são através dos argumentos Private (que restringe a variável a um 
Form/Module/Class) ou através de Global que possui a mesma amplitude de Public. 
Microsoft Visual Basic – Conceitos Básicos do Visual Basic 7 
 Alguns padrões poderão ser seguidos para facilitar a identificação do tipo de variável, o 
seja, antes do nome da variável o programador poderá inserir uma letra ou duas letras que 
identifique o tipo de variável. Veja uma sugestão na Tabela 3. 
 
Tabela 3. Sugestão de prefixo para identificação do tipo de variável. 
Tipo de Variável Letra/Prefixo Exemplo 
Boolean b bFinalizar 
Byte by byLetter 
Currency c cReal 
Date dt dtAniversario 
Doublé d dJuros 
Integer i iIndice 
Long l lTitulo 
Single sg sgLetra 
String s sEndereco 
Variant v vCEP 
 
Public sNome As String 'Variável pública declarada como String 
 
Private lTitle As Long 'Variável pública declarada como Long 
 
Dim vCEP as Variant 'Variável privada a um evento declarada como Variant 
 
Global sEndereco as String 'Variável global declarada como String 
Código 1. Exemplo de Declaração de variáveis no Visual Basic. 
 Se o programador não especificar o tipo de variável o Visual Basic atribuirá o tipo Variant a 
variável. 
 Para exigir que as variáveis sejam sempre declaradas, nas declarações da janela Code 
sempre insira Option Explicit. Uma forma mais fácil e acionar esta opção automaticamente, para 
que toda vez que o programador exibe a janela Code pela primeira vez seja inserida esta string. 
Para tal clique em no meu Tools > Options, na aba Editor (primeira) marque a opção Require 
Variable Declaration, clique em OK para confirmar. A vantagem desta opção é que o Visual Basic 
verifica a síntese de cada variável e impede que uma variável seja utilizada sem antes ser 
declarada. 
 
2.7. Convertendo Dados 
 O Visual Basic possui funções internas de conversão de dados, o que facilita e muito a vida 
de um programador, pois hora é necessário que uma variável possua dados longos outra hora 
dados do tipo String. Entretanto cuidado no momento de converter os dados pois fica um tanto 
quanto incoerente converter um dado string para um dado byte. A Tabela seguinte exibe a 
funções e suas respectivas descrições. 
 
Tabela 4. Funções internas do Visual Basic para conversão de dados. 
Função Descrição 
CInt Transforma uma expressão numérica em um número inteiro por arredondamento. 
CLng Transforma uma expressão numérica em um inteiro longo por arredondamento. 
CSng Transforma uma expressão numérica em precisão simples. 
CDbl Transforma uma expressão numérica em precisão dupla 
CCur Transforma uma expressão numérica em moeda. 
CStr Transforma qualquer expressão string. 
CVar Transforma uma expressão variante. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 8 
Função Descrição 
CBool Transforma uma expressão em booleana (verdadeira/falsa) 
CByte Transforma uma expressão numérica em um byte. 
CDate Transforma uma expressão compatível em uma data válida. 
 
2.8. Exercícios 
1. Quais controles abaixo são básico da biblioteca padrão do Visual Basic? 
( ) PictureBox ( ) RichTextBox ( ) ProgressBar ( ) Image ( ) OLE 
( ) Label ( ) TabStrip ( ) Timer ( ) ListBox ( ) ComboBox 
 
2. De acordo com as funções dos componentes básicos da biblioteca do VB, assinale V 
(verdadeiro) ou F (Falso), para as função especificadas abaixo: 
( ) Line - Permite traçar linhas dentro do formulário. 
( ) Shape – permite traçar linhas e caixas de texto no formulário. 
( ) Frame – Moldura utilizada para agrupar controles dentro de um formulário. 
( ) OptionButton – Pode assumir valores falso ou verdadeiro. Em um mesmo Formulário vários 
OptionButton's podem assumir o valor verdadeiro ao mesmo tempo. 
( ) CheckBox – Pode também assumir valores falso/verdadeiro, mas em um mesmo Formulário 
somente um CheckBox pode assumir o valor verdadeiro. 
() DriveListBox – Exibe os drivers do computador. 
( ) DirListBox – Exibe as pastas (diretórios) do computador. 
( ) FileListBox – Exibe os arquivos de uma pasta (diretório). 
 
3. De acordo com os tipos de projeto do Visual Basic qual dos tipos encaixa-se na descrição 
seguinte: "Permite a criação de controles personalizados de acordo com a necessidade de 
funções e controles para outros projetos, minimizando assim o excesso de programação" 
( ) StandardEXE ( ) ActiveX EXE ( ) ActiveX Control ( ) AddIn 
 
4. Defina o projeto do tipo StandardEXE. 
________________________________________________________________________________
________________________________________________________________________________ 
 
5. Qual das variáveis do Visual Basic, listadas abaixo, retorna o valor verdadeiro/false 
(True/False). 
( ) String ( ) Variant ( ) Boolean ( ) Long ( ) Integer ( ) Single 
 
6. Qual das variáveis do Visual Basic, listadas abaixo, retorna o maior valor numérico. 
( ) Byte ( ) Variant ( ) Boolean ( ) Long ( ) String ( ) Single 
 
7. Qual das variáveis do Visual Basic, listadas abaixo, retorna o menor valor numérico. 
( ) Integer ( ) Variant ( ) Byte ( ) Long ( ) String ( ) Single 
 
8. Declare uma variável publica (Public) do tipo String, atribua uma valor a esta variável e por fim 
converta esta para uma variável longa (Long) 
 
 
 
 
 
 
 
Microsoft Visual Basic – Estrutura de uma Aplicação 9 
3. ESTRUTURA DE UMA APLICAÇÃO 
 Uma aplicação em Visual Basic é um conjunto de elementos (formulários, módulos, classes, 
etc.) contendo diversas instruções que orientam o computador na realização de determinadas 
tarefas. Essas instruções encontram-se devidamente organizadas numa estrutura lógica bem 
definida, como veremos a seguir, e, quanto mais complexa for a aplicação maiores os cuidados 
devem ser tomados com essa estrutura. 
 O desenvolvimento de uma aplicação obedece a algumas etapas importantes, geralmente 
bem distintas. A primeira delas é a criação de uma interface, isto é, um conjunto de elementos 
que permitirá a comunicação do aplicativo com o usuário. Nesta etapa, deve ser definido, como o 
usuário irá interagir com a aplicação e, para isso, programador precisa criar os formulários e 
desenhar os componentes (controles) que permitirão a interação usuário-aplicação. 
 O primeiro passo ao desenvolver um aplicativo em Visual Basic é planejar o que será visto 
pelo usuário final, ou seja, projetar as telas. Quais os menus deverão conter na aplicação? Qual 
deverá ser o tamanho das janelas (formulários) a serem exibidas pelo programa? Quantas janelas 
deverá possuir o aplicativo. O usuário deverá ser capaz de redimensionara a janela? Onde deverão 
ser desenhados os controles (botões, caixas de texto, etc.)? Quais serão os controles necessários 
para que o aplicativo possa desempenhar as funções a que se propõem?. Bom, entre outras 
infinitas perguntas que poderão surgir a medida que o programador interage com a linguagem de 
programação. Na Figura 04, está um exemplo de um organograma simplificado de uma aplicação 
básica. 
 Após projetar a interface o segundo passo é escrever os códigos para ativar a interface 
visual que foi previamente elaborada. Os objetos no Visual Basic irão reconhecer eventos como 
clique do mouse. A maneira pela qual os objetos irão responder a esses eventos dependerá do 
código que o programador escreveu. O exemplo a seguir exibe o formulário frmMain a partir do 
procedimento Main, contido num módulo (Module) 
Public Sub Main() 
 frmMain.Show 
End Sub 
Código 2. Procedimento para exibição do formulário frmMain. 
 Grande parte do código de programação em Visual Basic que informa ao programa como 
responder a eventos como um clique do mouse ocorre no que o Visual Basic chama de 
procedimentos de eventos (ou procedures de eventos). Um procedimento de evento nada mais é 
que o código necessário para informar ao Visual Basic como responder a um evento. 
Essencialmente, tudo o que é executável em um programa Visual Basic é um procedimento na 
realização de sua tarefa. 
 É evidente que o terceiro e quarto passo na construção de um aplicativo, consiste em 
localizar e tratar o erros no código (depuração) e depois corrigi-los. 
 Eis um resumo dos passos que um programador poderá adotar na construção de um 
aplicativo com o Visual Basic: 
1. Personalizar as janelas que serão exibidas para o usuário; 
2. Decidir quais os eventos que os controles na janela devem reconhecer; 
3. Escrever os procedimento de eventos (procedures) para aqueles eventos e os 
prcedimentos subsidiários que fazem funcionar tais procedimentos de eventos. 
 Quando o aplicativo for executado, acontecerá o seguinte: 
1. O Visual Basic monitora as janelas e os controles em cada janela para todos os eventos 
que cada controle consegue reconhecer (movimentos do mouse, cliques, teclas, etc.); 
2. Quando o Visual Basic detecta um evento, caso não haja uma resposta intrínseca ao 
evento, o Visual Basic examina o aplicativo para ver se o programador escreveu um 
procedimento (procedure) para tal evento; 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 10 
3. Se o programador escreveu o procedimento (procedure), o Visual Basic executa o 
código que forma tal procedimento de evento e volta para o passo 1. Se o 
procedimento (procedure), não for localizada o Visual Basic, gera um erro. 
 Devemos ressaltar que existem vários padrões adotados por programadores para nomear 
os controles ou objetos que fazem parte de uma aplicação, porém é ideal que a equipe de 
programação possua um padrão de nomeação os objetos ou controles. A Tabela 5 apresenta o 
padrão de prefixos para os nomes dos objetos mais utilizados em uma aplicação. 
 Uma das informações mais importantes para o programador que está iniciando, 
é que o hábito de consultar a ajuda do Visual Basic dever ser constante, pois assim as 
dúvidas poderão ser sanadas em tempo muito curto. Outra forma de sanar estas 
dúvidas é adquirindo bibliografia a respeito do assunto (Visual Basic). Devemos 
lembrar que o programador deverá ter pelo menos uma noção de INGLÊS, pois toda 
documentação que acompanha o Visual Basic é em inglês, e a maioria da bibliografia 
do mercado, pelo menos as mais sofisticadas, estão no idioma Inglês. Felizmente com 
a popularização da linguagem vários livros e tutoriais são encontrados em português, 
no caso dos tutoriais é possível encontra-los vastamente na WEB. 
 
3.1. Estruturas de Programação do Visual Basic1 
 Aqui será apresentado às principais estruturas de programação da linguagem. Dominando 
estas estruturas, você poderá escrever programas mais simples e concisos e, muitas vezes, 
diminuir consideravelmente o número de instruções e comandos para executar a mesma tarefa e 
consequentemente o tamanho do aplicativo/componente. 
 
3.1.1. Tipos de Estruturas de Linguagem 
 As estruturas de utilizadas para se escrever códigos no Visual Basic 5 ou 6 são 
normalmente divididas em dois tipos distintos: estruturas de tomada de decisão e estrutura de 
loop (ou laço). 
 
3.1.1.1. Estrutura de Tomada de Decisão: 
 Estas estruturas são utilizadas durante o fluxo do programa para permitir a execução de 
diferentes tipos de códigos, de acordo com o contexto atual em que o usuário do seu programa se 
encontra. 
3.1.1.1.1 IF... Then... Else 
If <condição 1> = verdadeiro Then 
 Declaração 1 
ElseIf <condição 2> = verdadeiro> Then 
 Declaração 2 
Else 
 Declaração 3 
End If 
 
 Considerada a mais tradicional estrutura de linguagem (Se... Então... Senão), esta 
instrução avalia o conteúdo da <condição 1> e, se ela for verdadeira, executa as Declaração 1 
contida entre a linha If e a primeira instrução Else ou ElseIf (se houver alguma). Caso contrário, 
pula para a próxima cláusula ElseIf <condição2> Then, para avaliar a <condição 2>, caso 
ela seja verdadeira a Declaração 2, será executada (Se houver alguma), caso contrário a 
instrução executará a cláusula Else (senão) daexpressão. 
 
 
1 Baseado na obra Morgado, F. 1998. Visual Basic 5, método rápido 
Microsoft Visual Basic – Estrutura de uma Aplicação 11 
3.1.1.1.2 IIF 
Variável=IIF(<condição>, <valor true>, <valor false>) 
 
 Considerada uma variante da função anterior, também chamada de Se Imediato nas 
versões em Português do Microsoft Access e Excel, está instrução permite que o programador 
coloque uma instrução If... Then... Else End If em uma única linha de código, permitindo que 
atribua diferentes valores a variáveis ou objetos, dependendo do resultado da expressão. 
 Esta instrução avalia o valor da cláusula <condição> e se o valor for verdadeiro, retorna 
para variável o resultado da expressão contida na cláusula <valor true>. Caso o resultado de 
<condição> seja falso, <variável> é preenchida com o valor da cláusula <valor false>. 
 
3.1.1.1.3 Select Case 
Select Case <condição> 
 Case <resultado 1> 
 Declaração 1 
 Case <resultado 2> 
 Declaração 2 
 Case Else 
 Declaração 3 
End Select 
 
 Considerada uma variante à estrutura If... Then... Else, a instrução Select Case permite 
que o programador faça apenas um teste <condição> no início da instrução Select Case e 
tome várias decisões dependendo do valor retornado. 
 Esta instrução é geralmente utilizada quando existem inúmeras possibilidades de 
tratamento do valor gerado pela cláusula <condição>, como é o caso das rotinas de tratamento 
de erro em tempo de execução ou ativação de botões de uma ToolBar (Barra de Ferramentas), 
onde nesse caso a resultado é geralmente o valor Key ou o valor Index de cada botão. 
 Verifique que esta estrutura oferece uma saída caso nenhum valor retornado (resultado) 
seja verificado pelos Case's da instrução, assim o valor retornado poderá ser atribuído na 
expressão Case Else (Declaração 3). 
 
3.1.1.2. Estrutura de Loop 
 As estruturas de loop (ou laço) são utilizadas para permitir que um mesmo conjunto de 
instruções seje executado continuamente, até que uma determinada condição seja satisfeita. 
3.1.1.2.1 For... Next 
For... <contador> = <começo> To <fim> Step <passo> 
 Declaração 
Next <contador> 
 
 Esta estrutura de laço permite que você execute todas as instruções contidas dentro de 
For... Next, por um número de vezes definido entre o valor <começo> e o valor <fim>, contando-
se as interações de acordo com o argumento opcional Step <passo>. O valor do contador não 
poderá ser uma variável Boolean (Boleana) ou uma array. 
 Exemplo: O laço For... Next..., abaixo, faz com que a variável IntJ sela incrementada de 1 a 
tá 100, de 5 em 5 unidades (forçando a execução do laço por 20 vezes consecutivas): 
Dim IntJ as Integer 
For IntJ = 1 To 100 Step 5 
 <executar as instruções> 
Next IntJ 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 12 
 A especificação do nome da variável contadora dentro da cláusula Next ( como Next IntJ é 
opcional) é opcional – basta escrever Next para fechar o laço. No entanto, ela melhora 
significativamente a compreensão do código e, portanto, é amplamente recomendada. 
 
3.1.1.2.2 Do... Loop 
Do 
 Declaração 
Loop 
 
 A instrução Do... Loop convencional é executada continuamente. Você deve colocar uma 
condição de teste no interior do laço, através de uma instrução If... Then... Else, para fazer com 
que ela termine sua execução, enviando uma instrução do tipo Exit Do. 
 Exemplo: No exemplo a seguir, a instrução Do... Loop é executada continuamente, ate que 
o valor da variável fCancelar seja verdadeiro. 
Do 
 DoEvents 
 If fCancelar Then 
 Exit Do 
 End If 
Loop 
 
 Muito cuidado na hora de utilizar uma instrução Do... Loop, pois se o valor que determina o 
final do laço não for alcança o laço seja executado infinitamente, fazendo com que a aplicação seja 
paralisada, provocando um Bug, consequentemente travando o computador. 
 As estruturas Do... Loop possuem diversas variantes e são utilizadas para fazer com que o 
código seja executado seguidamente, até que uma determinada condição seja verdadeira. Esta 
condição pode ser testada no início ou no fim do laço, e é normalmente utilizada com as cláusulas 
While (enquanto) ou Until (até). 
 
3.1.1.2.3 Do While... Loop 
Do While <condição> 
 Declaração 
Loop 
 
 Nesta variante, as instruções dentro do laço Do... Loop serão executadas enquanto 
(While) o valor de <condição> for verdadeiro. Isto significa que, se o valor de <condição> for 
falso antes do início do laço, as declarações contidas em seu interior não serão executadas. 
 
3.1.1.2.4 Do Until... Loop 
Do Until <condição> 
 Declaração 
Loop 
 
 Apesar desta instrução ser muito semelhante a anterior à anterior, o teste é feito em um 
momento diferente. Neste caso, o laço será executado até que o valor <condição> seja 
verdadeiro, o que inverte a situação anterior, ou seja, as declarações no interior do laço serão 
executadas apenas se o valor de <condição> for falso. 
 
Microsoft Visual Basic – Estrutura de uma Aplicação 13 
3.1.1.2.5 While... Wend 
While <condição> 
 Declaração 
Wend 
 
 Esta estrutura é bastante semelhante a estrutura Do While... Loop. A diferença entre elas 
consiste no fato de que While... Loop é menos flexível do que um laço Do... Loop convencional, 
não permitindo, por exemplo, sair prematuramente do laço em uma instrução Exit Loop. 
 Além disso, a estrutura While... Wend sempre executa o teste <condição> no início do 
laço. 
 
3.1.1.2.6 For Each... Next 
For Each <objeto> In <Colação> 
 Declaração 
Next 
 
 Esta estrutura permite que você caminhe por todos os objetos de uma coleção ou matriz 
(variável do tipo array). 
 Exemplo: No exemplo a seguir, você pode utilizar a estrutura For... Each para alterar a 
propriedade Enabled (ativado) de todos os controles do tipo TextBox (Caixa de Texto) do 
formulário frmMain, tornando-os indisponíveis. 
For Each ctl In frmMain 
 If TypeOf ctl Is TextBox Then 
 ctl.Enabled = False 
 End IF 
Next 
 
 A cláusula For... Each cria automaticamente uma variável chamada ctl (uma abreviação de 
control ou controle), e faz um laço por todos os controle do formulário frmMain, desativando todas 
as caixas de texto, sem importar quantas elas são. Verifique que o teste para saber se o controle é 
mesmo uma caixa de texto (TextBox), é realizado pela cláusula If TypeOf Is TextBox Caso o valor 
retornado seja verdadeiro o controle testado é desabilitado, ou seja, o controle é uma caixa de 
texto, se o controle for um botão (CommandButton) este não será desabilitado pois não é um 
TextBox. 
 
3.1.1.2.7 With... End With 
With <coleção> 
 Declaração 
End With 
 
 Esta estrutura permite que o programador referencie diretamente cada elemento ou 
propriedade de uma coleção (ou matriz), sem a necessidade de especificar o caminho completo 
(ou índice) para cada elemento da coleção. 
 A estrutura With... End With, é muito utilizada para permitir a alteração de diversas 
propriedades de um único controle ou formulário do Visual Basic ou Access. 
 Exemplo: para alterar diversas propriedades de uma Caixa de Texto (TextBox) chamada 
txtxValorTotal, utiliza-se a estrutura With... End With, da seguinte forma: 
With txtValorTotal 
 .Locked = False 
 .MaxLenght = 30 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 14 
 .TabStop = True 
 .Visible = True 
End With 
 
3.1.1.3. Saindo das Estruturas de Loop 
 Algumas vezes você pode precisar terminar abruptamente a execução de uma estrutura de 
laço antes de a condição testada ser verdadeira. 
 No caso da estrutura For... Next, você pode utilizar uma instrução Exit For dentro do 
laço, para que a instrução que segue a cláusula Next seja imediatamente executada. 
 Já nas estruturas Do... Loop utilize a instrução Exit Do. Isto fará com que a instrução que 
segue a cláusula Loop seja imediatamente executada. 
 Devemos lembrar que Exit Loop, não funcionara na cláusula While... Wend. 
 
3.2. Formulários e Controles 
 Cada formulário de uma aplicação é gravado em um arquivocom seções bem-definidas – 
uma seção reúne o código que define os objetos apresentados em tela e a configuração de suas 
propriedades, outra seção contém as declarações das variáveis e objetos não visuais utilizados 
pelo formulário e, finalmente, uma outra seção inclui o código das rotinas de eventos, além das 
rotinas e funções escritas pelo programador para uma determinada finalidade. 
 O formulário visualizado em uma tela possui uma interface gráfica, que é carregada pelo 
VB a partir do arquivo padrão som extensão FRM. Além da interface gráfica os formulários 
(Forms) possuem instruções (código) para execução e tarefas, pré-determinadas pelo 
programador. 
 Um formulário possui propriedades, para sua definição visual, métodos, que definem 
seu comportamento e eventos, relativos à interação como usuário. 
 As propriedades podem ser definidas na fase de desenho (Design Time) – através da janela 
de propriedades (Figura 05) – ou também durante a execução da aplicação (Run Time), porém 
existem algumas propriedades que são somente leitura (Read Only) em tempo de execução (Run 
Time). Caso alguma seqüência de código seja definida para um determinado evento, ela será 
automaticamente disparada quando este ocorrer, já os métodos são funções intrínsecas ao 
formulário e, se invocadas em determinada linha de comando (código), podem ser acessadas 
somente durante a execução da aplicação pelo disparo de algum evento. 
 
 
Tabela 5. Prefixos para nomes dos objetos mais utilizados em aplicação (Sugestão da Microsoft e 
do Autor) 
Objeto/Componente Prefixo Exemplo 
"Outline" out outChart 
Abas (TabStrip) tab tabDados 
Árvore de visualização (TreeView) tvw tvwNome 
Barra de Ferramentas (ToolBar) tlb tlbMain 
Barra de rolagem horizontal (HscroolBar) hsb hsbPicture 
Barra de rolagem plana (FlatScroolBar) fsb fsbTextBox 
Barra de rolagem vertical (VScroolBar) vsb vsbPicture 
Barra de Status stb stbMain 
Botão de comando (CommandButton) cmd cmdClose 
Botão de opção (OptionButton) opt optSend 
Caixa de Diálogo (CommonDialog) cdl cdlOpenFile 
Caixa de Listagem (ComboBox) cbo ou cmb cboName 
Caixa de listagem de Banco de dados (DBCombo) dbc dbcState 
Caixa de listagem de imagens (ImageCombo) icb ou cbi icbIconSmall 
Microsoft Visual Basic – Estrutura de uma Aplicação 15 
Objeto/Componente Prefixo Exemplo 
Caixa de Máscara (MaskEditBox) msk mskPhone 
Caixa de Texto (TextBox) txt txtName 
Caixa de texto formatado (RichTextBox) rtf rtfFile 
Caixa de Verificação (CheckBox) chk chkSaveSetting 
Contador de tempo ou temporizador (Timer) tmr tmrShowAll 
Controle de animação (Animation) ani aniAviFile 
Controle de Dados (DataControl) dat ou dtc datDBase 
Controle de gráfico (MSChart) grf grfDBase 
CoolBar clb clbMain 
DTPicker dtp dtpMonth 
Figura (PictureBox) pic piclogo 
Forma (Shape) shp shpSquare 
Formulário (Form) frm frmMain 
Formulário MDI (MDIForm) mdi mdiMain 
Grade (Grid) grd grdName 
Grade do Bando de Dados (DBGrid) dbg dbgTitle 
Imagem (Image) img imgIcon 
Legenda (Label) lbl lblTitle 
Linha (Line) lnh lnhVertical 
Lista (Listbox) lst lstEmail 
Lista de arquivos (FileListBox) flb filBitmap 
Lista de diretórios (DirListbox) drl drlSource 
Lista de Drive (DriveListBox) dvl dvlSource 
Lista de imagens (ImageList) iml imlIcons32 
Lista de visualização (ListView) lvw lvwTitles 
Listagem de Banco de dados (DBList) dbl dblAuthor 
Menu mnu ou smnu 
mnuFile ou 
smnuProperty 
Módulo (Module) mod modAPIs 
Módulo Classe (Class Module) cls clsTypeFile 
Moldura (Frame) fra fraTitles 
MothView mvw mvwCalendar 
MS Flex Grid fgd fgdAuthor 
MS Tab tab tabConfig 
OLE ole oleWord 
Página de propriedades (Property Page) ppg ppgFont 
Painel Tridimensional (3D Panel) pnl pnlGroup 
ProgressBar (Barra de progresso) pbr pbrLoadfile 
Relatório (DataReport) drp drpTitles 
Resource File res resIcons 
Slide (Slider) sld sldConfig 
UpDown upd updCopies 
User Control ctl ctlButton 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 16 
 Os formulários possuem várias propriedades como segue na Tabela 6. 
Tabela 6. Principais propriedades de um formulário. 
Propriedade Descrição Valor Padrão 
(Name) Define o nome do formulários (vide prefixos de nome de objetos Quadro 4) Form1 
Apparence Define a aparência do formulário se 0 – Flat ou 1 – 3D 1 – 3D 
BackColor Define a cor do fundo do formulário &H8000000F& 
BorderStyle Define o tipo borda que o formulário exibirá: 0 – None; 1 – Fixed Single; 2 – Sizable; 3 – Fixed Dialog 2 – Sizable 
Caption Define o texto que será exibido na barra de título do formulário Form1 
ControlBox Define se o formulário irá exibir ou não os botões de minimizar, maximizar, fechar e o ícone da janela. True 
Enabled Define se o formulário estará ativo ou não True 
Font Define a fonte que o formulário irá exibir MS Sans Serif 
Fore Color Define a cor da fonte no formulário &H80000012& 
Height Define a altura do formulário 3570 
Icon Define o ícone que o formulário exibirá 
Left Define a posição a esquerda do monitor que o formulário irá se posicionar 0 
MaxButton Exibe ou oculta o botão fechar do formulário True 
MDIChild Define se o formulário será "Child - filho" ou não de uma formulário MDIForm False 
MinButton Exibe ou oculta o botão minimizar do formulário True 
MouseIcon Exibe o cursor personalizado do formulário (None) 
MousePointer 
Exibe o cursor do formulário: 0 – Default; 1 – Arrow; 2 – 
Cross; 3 – I-Bean; 4 – Icon; 5 – Size; 6 – Size NE SW; 7 – 
Size N S; 8 – Size NW SE; 9 – Size W E; 10 – Up Arrow; 
11 – Hourglass; 12 – No Drop; 13 – Arrow or Hourglass; 
14 – Arrow and Question; 15 – Size All; 99 – Custom 
0 – Default 
Moveable Define se o formulário será móvel ou não True 
Picture Define a imagem que será exibida no fundo do formulário (None) 
StartUpPosition 
Define a posição que o formulário será exibido na tela: 0 
– Manual; 1 – CenterOwner; 2 – CenterScreen; 3 – 
Windows Default 
3 – Windows 
Default 
Top Define a posição no parte superior do monitor que o formulário irá se posicionar 0 
Visible Define se o formulário será visível ou não True 
Width Define a largura do formulário 4770 
WindowState 
Define como o formulário será exibido em run time 
(tempo de execução) 0 – Normal; 1 – Minimized; 2 – 
Maximided 
0 – Normal 
 
 Além do arquivo alfanumérico FRM, que contém as informação de propriedades, linhas de 
comando, eventos do formulário dos controles inseridos nele, o VB poderá gerar um arquivo 
binário com extensão FRX, o qual contém informações binárias de certas propriedades do form ou 
dos controles, por exemplo: ícone e figura do Form, figura do PictureBox, etc. 
 Os controles, assim como o formulário, também possui propriedades, eventos e métodos, 
porém muito variáveis, de acordo com a finalidade do controle e do fabricante. 
 
Microsoft Visual Basic – Estrutura de uma Aplicação 17 
Sistema operacional
API's
DLL's
ActiveX's
Banco de dados Impressora
Arquivo
controles
menus
frmCadastro
frmMain
controles
m enus
modMain
módulo In icial da aplicação
Módulos Classes
User Control
 
Figura 4. Organograma simplificado de uma aplicação. 
 
 
Figura 5. Janela de propriedades do Visual Basic. 
3.3. Módulos (Module) e Módulos Classe (Class Module) 
3.3.1. Módulos (Module) 
 Os módulos padrão (Module), em geral são utilizados para declarar procedimentos públicos 
(procedures) e criar funções publicas, minimizando assim o trabalho de escrita de códigos e 
reduzindo desta forma o tamanho do executável final. Em geral se utiliza os módulos padrão para 
criar procedimentos comuns a vários eventos que o Visual Basic irá utilizar. Por exemplo, se o 
programador deseja que três botões (CommandButton) exiba o mesmo formulário, porém com 
as propriedades deste forma diferente, uma função poderá substitui o exemplo do exibido no 
Código 3, ou seja, o Código 4, seria mais rápido e menos trabalhoso. 
 Sempre que possível recomenda-se ao programador que crie suas próprias funções com o 
objetivo de minimizar o trabalho árduo de declaraçãode eventos. Agilizar a escrita das linhas de 
código poderá facilitar a localização de possíveis erros que possam ser gerados pelo Visual Basic. 
Se houver erro será mais fácil encontrar dentro de uma função que serve de procedimento para 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 18 
inúmeros eventos, do que procedimentos idênticos, escritos várias vezes ao longo das linhas de 
códigos. 
 
Private Sub cmdOpcao1_Click() 
 Form2.Caption = "Exibindo a primeira opção" 
 Form2.BackColor = vbWhite 
 Form2.Show 
End Sub 
 
Private Sub cmdOpcao2_Click() 
 Form2.Caption = "Exibindo a segunda opção" 
 Form2.BackColor = vbBlack 
 Form2.Show 
End Sub 
 
Private Sub cmdOpcao3_Click() 
 Form2.Caption = "Exibindo a terceira opção" 
 Form2.BackColor = vbRed 
 Form2.Show 
End Sub 
Código 3. Código extensos para alterar a propriedade Caption e BackColor, do Form2 e exibi-
lo. 
Private Sub cmdOpcao1_Click() 
 Call ShowForm(Form2, "Exibindo a primeira opção", vbWhite) 
End Sub 
 
Private Sub cmdOpcao2_Click() 
 Call ShowForm(Form2, "Exibindo a segunda opção", vbBlack) 
End Sub 
 
Private Sub cmdOpcao3_Click() 
 Call ShowForm(Form2, "Exibindo a terceira opção", vbRed) 
End Sub 
 
'Num Módulo, podem ser inserido na janela Code do Form 
Public Function ShowForm(frm As Form, sCaption As String, cColor As 
ColorConstants) 
With frm 
 .Caption = sCaption 
 .BackColor = cColor 
 .Show 
End With 
End Function 
Código 4. Código mais práticos através da função ShowForm para alterar a propriedade 
Caption e BackColor, do Form2 e exibi-lo. 
 
3.3.2. Módulos Classe (Class Module) 
 Os módulos classe (ou simplesmente Class), diferem dos módulos padrão na forma como 
seus dados são armazenados. Eles existem separadamente para cada instância de classe (isto é, 
para cada objeto criado de uma classe). 
 Num módulo padrão, as variáveis declaradas públicas são visíveis em qualquer lugar do 
projeto. Já num módulo classe, elas poderão ser acessadas apenas se uma variável de objeto 
contiver uma referência a uma instância particular de uma classe. 
Microsoft Visual Basic – Estrutura de uma Aplicação 19 
 Para exemplificar vamos criar um projeto StandardEXE e adiciona um modulo padrão 
(Module) e um Class Module) ambas opções poderão ser encontradas no menu Project. 
 Adicione o código a seguir em Class1: 
'Uma propriedade dos objetos Class1 
Public Comment as String 
 
'Um método dos objetos Class1 
Public Sub ShowComment() 
 Msgbox Comment,, sTitle 
End Sub 
 No módulo Class1, foi criado a variável Comment que verdadeiramente é uma propriedade 
da Class1, de maneira que temos a propriedade Comment e o método ShowComment, para 
qualquer objeto da classe Class1. 
 Adicione o seguinte código no modulo padrão Module1: 
'Código modulo padrão é publico 
Public sTitle as String 
 
Public Sub GetComment (ByVal c1 as Class1) 
 c1.Comment = "Acionado por uma função pública" 
End Sub 
 
 A linha de comando c1.Comment= "Acionado por uma função pública", altera o conteúdo 
da variável pública Comment, ou melhor, altera o valor da propriedade Comment de um objeto 
Class1. Somente a instância, isto é, o objeto passado para a rotina (ByVal c1 as Class1) será 
afetado. 
 A seguir insira dois botões (CommandButton) no From1 e adicione as seguinte linhas de 
código na seção Declarations: 
Private c1Firt As Class1 
Private c1Second as Class1 
 
 No evento Load do Form1, entre com as seguintes instruções – estas criarão duas 
instâncias da classe Class1: 
Private Sub Form_Load() 
 Set c1First = New Class1 
 Set c1Second = New Class1 
 sTitle = "Dados públicos de texto" 
End Sub 
 
 Para completar a codificação, adicione as seguintes linhas de comando no evento Click dos 
botões de comando: 
Private Sub Command1_Click() 
 Call GetComment(c1First) 
 c1First.ShowComment 
End Sub 
 
Private Sub Command2_Click() 
 c1Second.ShowComment 
End Sub 
 Ao rodar o projeto, quando o Form1 for "carregado", serão criadas duas instâncias de 
Class1, cada uma com seus próprios dados. A instrução sTitle = "Dados públicos de texto", 
configura o valor da variável pública sTitle. 
 Pressionando o botão Command1, será chamada a rotina pública e passada uma 
referência para o primeiro objeto Class1 criado. A rotina pública configura a propriedade 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 20 
Comment – o método ShowComment, será carregado para exibir o dado do objeto. A caixa de 
mensagem mostra o texto "Acionado por uma função pública", demonstrando que a rotina pública 
GetComment configurou a propriedade Comment do objeto que lhe foi passado, e que a "string" 
pública está visível dentro de Class1. 
 O botão Command2, apensa chama o método ShowComment, da segunda instância de 
Class1. Os dois objetos têm acesso à variável pública "string", mas a propriedades Comment do 
segundo objeto está em vazia (em branco), porque chama a rotina pública GetComment comente 
da propriedade Comment alterada para o primeiro objeto. 
 
3.4. Menu Editor 
 Toda a aplicação necessita de menus. Po exemplo o Microsoft® Word, possui cerca de 9 
menus padrão, contendo cada menu uma série de submenus. Entretanto é necessário planejar 
bem o menus que farão parte da aplicação pois uma mau planejamento poderá levar sua aplicação 
ao fracasso. A Figura 6, o menu editor. Iremos discutir um pouco cada campo para que você 
possa saber a função de cada um. 
 Caption – Especifica o texto que deverá aparecer no menu. Para criar uma tecla de atalho 
associando a tecla Alt mais uma letra do valor caption, basta inserir o símbolo & antes da 
letra desejada. Ex.: &Arquivo, será exibido em run-time (tempo de execução) Arquivo. 
Quando o usuário da aplicação pressionara conjuntamente as teclas ALT+A o menu será 
selecionado; 
 Name – Especifica o nome do menu. Este deverá possuir um valor único, ou seja, não 
poderão existir dois ou mais menus com o mesmo nome, salvo se for atribuído valor 
seqüencial no campo Index; 
 Index – Se for especificado um valor seqüencial no campo index é possível dar a vário menu 
o mesmo nome; 
 Shortcut – Especifica a tecla de atalho do menu. Somente submenus poderão conter teclas 
de atalho de acordo com a lista do campo; 
 HelpContextID – O número do tópico de ajuda associado ao menu; 
 NegotiatePosition – Especifica a posição do menu; 
 Checked – Especifica se o menu será ticado ( ) ou não; 
 Enabled – Especifica se o menu estará habilitado ou não; 
 Visible – Especifica se o menu estará visível ou não; 
 WindowsList – Esta opção e muito importante para aplicação MDI e lista as janelas abertas 
pela aplicação, porém está opção deverá ser especificada somente para um men; 
 – Estas setas possibilitam criar o remover uma hierarquia. Ex.. Na Figura 6 o submenu 
&Novo, foi criado clicando no botão , para removê-lo basta clicar no botão ; 
 – Estas setas permitem mover o menu para cima o para baixo. 
 
Microsoft Visual Basic – Estrutura de uma Aplicação 21 
 
Figura 6. Menu Editor do Microsoft® Visual Basic. 
3.5. Exercícios 
 
1. Para desenvolver uma aplicação em Visual Basic é necessário um planejamento detalhado das 
janelas e procedimentos da aplicação? Porquê? 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
 
2. São propriedades de um formulário? 
( ) ImageHeight ( ) Icon ( ) Picture ( ) Click ( ) Load ( ) Top 
( ) WindowState ( ) Caption ( ) Print ( ) Resize ( ) Left ( ) BackColor 
 
3. Assinale V (verdadeiro) ou F (falso) nas opções seguintes: 
( ) Tanto os dados alfanuméricos quanto os dados binários do formulário são armazenados no 
arquivo de extensão FRM. 
( ) Somente os dados alfanuméricos do formulário são armazenados no arquivo com extensão 
FRX. 
( ) Os dados binário do formulário são armazenadosno arquivo com extensão FRX. 
( ) Os dados alfanuméricos do formulário são armazenados no arquivo com extensão FRM. 
 
4. Qual das estruturas de decisão oferece ao programador utilizar in;umeras possibilidades de 
tratamento do valor gerado pela cláusula <condição>? 
________________________________________________________________________________ 
 
5. Dentre as estruturas de laço qual delas é menos flexível e não permite a interrupção abrupta 
pela instrução Exit Loop. 
________________________________________________________________________________ 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 22 
6. Crie um código em que seja possível verificar se o tipo de controle testado é um 
CommandButton e em segunda altere através do laço With... End With as propriedades Cancel 
para falso; Default para verdadeiro e Enabled para verdadeiro. 
For Each 
 
 
 
 
 
 
 
 
 
 
 
Next 
 
7. Correlacione os controles aos prefixos sugeridos pela Microsoft e pelo Autor. 
(1) CommandButton ( ) fra 
(2) Frame ( ) lbl 
(3) DBCombo ( ) lvw 
(4) TreeView ( ) cdl 
(5) ToolBar ( ) dbc 
(6) Timer ( ) hsc 
(7) ListBox ( ) dat 
(8) StatusBar ( ) pgb 
(9) ProgressBar ( ) msk 
(10) CommonDialog ( ) pic 
(11) DataControl ( ) cmd 
(12) RichTextBox ( ) lst 
(13) MaskEditBox ( ) tmr 
(14) PictureBox ( ) rtf 
(15) HScroolBar ( ) stb 
 
8. Assinale V (verdadeiro) ou F (falso) nas descrições das propriedades do formulário: 
( ) BorderStyle – Define o tipo borda que o formulário exibirá. 
( ) O valor padrão da propriedade ControlBox é False. 
( ) StartUpPosition - Define a posição que o formulário será exibido na tela: 0 – Manual; 1 – 
CenterOwner; 2 – CenterScreen; 3 – Windows Default 
( ) Height define a largura e Width define a altura do formulário. 
( ) WindowState – Define como o formulário será exibido em run time (tempo de execução) 0 – 
Normal; 1 – Minimized; 2 – Maximided 
 
9. Qual a diferença básica ente um módulo padrão (Module) e um Módulo Classe (Class Module) 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________ 
10. Qual dos dois código abaixo tem maior rapidez no momento da escrita dos códigos. 
Código 1 ( ) 
Private Sub cmdShowAbout_Click() 
Microsoft Visual Basic – Estrutura de uma Aplicação 23 
 Call LoadForm (frmAbout, "Sobre...", vbNormal, vbWhite) 
End Sub 
 
Private Sub cmdShowCredits_Click() 
 Call LoadForm (frmCredits, "Créditos...", vbMaximized, vbBlack) 
End Sub 
 
Public Function LoadForm(frm As Form, sCaption As String, wState As 
FormWindowStateConstants, cColor As ColorConstants) 
 With frm 
 .Caption = sCaption 
 .WindowState = wState 
 .BackColor = cColor 
 .Show 1, Me 
 End With 
End Function 
 
Código 2 ( ) 
Private Sub cmdShowAbout_Click() 
 frmAbout.Caption = "Sobre..." 
 frmAbout.WindowState = vbNormal 
 frmAbout.BackColor = vbWhite 
 frmAbout.Show 1, Me 
End Sub 
 
Private Sub cmdShowCredits_Click() 
 frmCredits.Caption ="Créditos..." 
 frmCredits.WindowState= vbMaximized 
 frmCredits.BackColor= vbBlack 
 frmCredits.Show 1, Me 
End Sub 
 
11. Especifique descritivamente com criar uma seqüência de menus contendo o menu Arquivo, 
com submenus Novo, Abrir, Fechar, Salvar, Salvar Como... e Sair. Cada menu deverá possui 
uma teca de atalho associada a tecla Alt e um Shortcut. 
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
_______________________________________________________________________________ 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 24 
 
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 25 
4. CONTROLES PERSONALIZADOS (PROPRIEDADES E EVENTOS) 
 Neste capítulo será abordado os controle personalizados, mais utilizados no Visual Basic, 
obviamente na maioria, este são controles da própria Microsoft, outros não. 
 Existem milhares de controles (componentes) que em geral são designados como Controles 
ActiveX2, que tem o objetivo de substituir dezenas, centenas ou milhares de linhas de código que o 
programador teria de escrever sem a presença deste controles, em síntese uma "mão na roda", 
facilitando e diminuindo o tempo de programação. A Microsoft acredita que até 1998 existiam 
cerca de 2.000 controles comerciais e milhares de controles shareware e freeware disponíveis na 
internet. 
 Para ter acesso aos controles personalizados do Visual Basic, basta clicar no menu Project 
> Components, ou simplesmente Ctrl+T. será exibida uma janela como todos os controles ActiveX 
registrados no sistema operacional (Figura 7). 
 Selecione o(s) controle(s) desejado(s) e clique em OK ou Aplicar. Para cada controle 
selecionado poderá ser exibido um ou mais ícone na barra de ferramentas (lateral) do Visual Basic, 
referente ao componente. Por exemplo, o Microsoft Windows Common Control 6.0 (SP4) 
(MSComctl.ocx), possui 9 componentes embutidos (TabStrip, ToolBar, StatusBar, 
ProgressBar, Treeview, ListView, ImageList, Slider e ComboImage),(Figura 8) já o 
componente Microsoft Windows Common Control –2 (SP4) (MSComctl332.ocx), possui apenas um 
controle (CoolBar). 
 A versão Standard do Visual Basic oferece cerca de 25 componente, já as versões 
Profesional e Enterprise, oferecem mais de 50 componentes ActiveX. 
 O Visual Basic possibilita ao programador desenvolver seus próprios componentes, sejam 
eles ActiveX ou Dll's. porém é necessário que o programador possua conhecimento avançado 
sobre o próprio Visual Basic e conhecimentos sobre API's (Application Programmable Internal, ou 
seja, Aplicação Internas Programáveis). Vários livros e tutoriais estão dsiponíveis para quem 
deseja enveredar por está fascinante área da programação. Só para elucidar ao programador que 
deseja realmente adentrar neste campo, a documentação da Microsoft para API's (Microsoft API's 
Guide), são nada mais nada menos que cinco (05) livros com mais de 400 páginas cada. 
 
 
Figura 7. Caixa de controles ActiveX personalizados, localizados no sistema. 
 
 
2 Tecnologia da Microsoft que utiliza componentes externos para desempenhar tarefas dentro de uma 
aplicação, minimizando assim o tamanho do executável e aumentando assim a velocidade de execução 
desta tarefas. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 26 
 
Figura 8.Microsoft Windows Common Control 6.0 
4.1. Microsoft Windows Common Control 6.0 
4.1.1. ImageList (Lista de Imagens) 
 O controle ImageList (Lista de Imagens), possibilita ao programador armazenar uma 
coleção de imagens (bitmaps, ícones e cursores), para serem utilizados pelo aplicativo. Exemplo 
as imagens que os controles ToolBar, ListView e TreeView, utilizam são oriundos do 
ImageList. 
 A melhor forma para trabalhar com um controle ImageList é saber exatamente o índice 
(Index) e/ou a chave (Key), que a imagem foi armazenada. 
 As propriedades ImageHeight e ImageWidth,especificam as dimensões da imagem que 
será armazenada na coleção. Estas propriedades somente poderão ser alteradas em Design Time e 
se não existir nenhuma imagem inserida no controle. 
 Os valores pré-fixados para imagens são 16x16 pixels, 32x32 pixels. Existe também a 
opção Custom, que o programador poderá definir dimensões de altura diferente de largura na 
caixa de texto Heigth e Width da Property Page, onde a dimensão de todas as imagens será 
igual à dimensão da primeira inserida ao controle. Para inserir as imagens, basta clicar na 
propriedade (Custom), na barra de propriedade do controle. Será exibida uma página de 
propriedades (Property Page), com três abas (General, Images, Color). Na primeira aba as 
propriedades de dimensão são exibidas e na segunda aba o programador poderá inserir as 
imagens, clicando no botão Insert Picture3 e remover a imagem selecionada clicando em 
Remove Picture4 (Figura 9). 
 O programador poderá inserir quantos controles ImageList quiser, porém o bom senso 
deverá prevalecer. 
 
4.1.1.1. Carregando uma Imagem da Coleção. 
 Para retornar ou carregar uma imagem da coleção que está dentro da ImageList, para 
um PictureBox, o programador deverá saber exatamente o número do índice da imagem (a 
 
3 Para inserir uma imagem após ligar o controle ImageList a um controle ToolBar o programador somente 
poderá inserir a imagem após a última inserida e nunca entre duas imagem já inseridas. 
4 Somente será possível remover a imagem caso o controle ImageList não esteja ligado a um controle 
ToolBar. 
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 27 
coleção ListImages começa em 1), para retornar a imagem correta. A partir daí a linha de código 
abaixo carrega a segunda imagem da coleção da ImageList1 para a Picture1. 
 Na Figura 9a podemos ver as configurações do tamanho das imagens que irão compor a 
coleção, devemos ressaltar que o tamanho deverá ser escolhido antes de iniciar a inserção de 
imagens à coleção, pois o controle não permite modificar este valor após Ter sido inserida pelo 
menos uma imagem, a opção UseMaskColor retorna ou seta a mascara de cor que a coleção irá 
utilizar, veja exemplo no Código 5. Na Figura 9b pode ser verificado dois campos Key e Tag. O 
campo Key deverá ser único e é Case Sensitive, ou seja, há diferença entre info e Info, pois há 
diferença na primeira letra. Para evitar erros recomenda-se que todos os valores sejam em 
minúsculo, sabe-se que o valor setado pode conter qualquer letra, número ou símbolos. Ex: 
info@/1. Entretanto seria mais fácil somente info1. O campo Tag serve para que qualquer 
configuração extra possa ser especificada (setado). Desta forma o campo Tag em qualquer 
controle serve para dar maior flexibilidade ao programador na hora de especificar um valor, além 
das variáveis que podem ser declaradas, mas a propriedade Tag acaba sendo mais flexível. 
 
Private Sub Form_Load() 
 Dim imgX As ListImage 
 
 ' Load bitmaps. 
 Set imgX = ImageList1.ListImages. _ 
 Add(, "No", LoadPicture("bitmaps\assorted\Intl_No.bmp")) 
 Set imgX = ImageList1.ListImages. _ 
 Add(, , LoadPicture("bitmaps\assorted\smokes.bmp")) 
 Set imgX = ImageList1.ListImages. _ 
 Add(, , LoadPicture("bitmaps\assorted\beany.bmp")) 
 
 ScaleMode = vbPixels 
 ' Set MaskColor property. 
 ImageList1.MaskColor = vbGreen 
 ' Set the form's BackColor to white. 
 
Form1.BackColor = vbWhite 
End Sub 
 
Private Sub Form_Click() 
 Static intCount As Integer ' Static variable to count images. 
 
 ' Reset variable to 2 if it is over the ListImages.Count value. 
 If intCount > ImageList1.ListImages.Count Or intCount < 1 Then 
 intCount = 2 ' Reset to second image 
 End If 
 
 ' Overlay ListImage(1) over ListImages 2-3. 
 Picture1.Picture = ImageList1.Overlay(intCount, 1) 
 ' Increment count. 
 intCount = intCount + 1 
 
 ' Create variable to hold ImageList.ImageWidth value. 
Dim intW 
 intW = ImageList1.ImageWidth 
 
 ' Draw images onto the form for reference. Use the ImageWidth 
 ' value to space the images. 
 ImageList1.ListImages(1).Draw Form1.hDC, 0, 0, imlNormal 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 28 
 ImageList1.ListImages(2).Draw Form1.hDC, 0, intW, imlNormal 
 ImageList1.ListImages(3).Draw Form1.hDC, 0, intW * 2, imlNormal 
End Sub 
Código 5. Este exemplo carrega vários bitmaps em um controle ImageList. Quando o form é 
clicado um uma imagem da lista é substituída por outra Imagem. Este exemplo necessita de um 
controle ImageList e um controle PictureBox.5 
 
Set Picture1.Picture = ImageList1.ListImages(2).Picture 
Código 6. Linha de comando para retornar a segunda imagem da coleção da ImageList1 para o 
controle Picture1. 
 Caso a imagem da coleção seja um ícone, poderá ser utilizada a seguinte linha de código. 
 
Set Picture1.Picture = ImageList1.ListImages(2).ExtractIcon 
Código 7, Linha de comando para retornar a segunda imagem (ícone) da coleção da ImageList1 
para o controle Picture1. 
 
A – B – 
Figura 9. A- configurações do tamanho das imagens; B- coleção de imagens inseridas no 
ImageList. 
 
4.1.2. Controle ListView (Lista de Visualização) 
 O controle ListView (Figura 10)permite que o programador apresente itens de várias 
maneiras. Arranjados em colunas, em lista, com detalhes, ícones pequenos, ícones grandes. Como 
é o gerenciador de arquivos do Windows, o Windows Explorer. A Tabela 7, demonstra os 
valores da propriedade View do controle ListView. 
 
Tabela 7. Constantes, valores e descrição do propriedade View do controle ListView. 
Constante Valor Descrição 
lvwIcon 0 (Padrão) Cada objeto ListItem é representado por um ícone de tamanho grande. 
lvwSmallIcon 1 
Cada objeto ListItem é representado por um ícone de tamanho 
pequeno e um rótulo de texto que aparece à direita do ícone. 
Vários itens são arranjados horizontalmente. 
lvwList 2 
Cada objeto ListItem é representado por um ícone de tamanho 
pequeno e um rótulo de texto que aparece a direita do ícone. 
Os objetos ListItem são verticais em linha diferentes, e a 
 
5 Exemplo retirado do arquivo de ajuda do Microsoft® Visual Basic 6.0. 
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 29 
Constante Valor Descrição 
informação de texto é organizada em colunas. 
lvwReport 3 
Cada objeto ListItem é representado por um ícone de tamanho 
pequeno e um rótulo. Os ícones é rótulos aparecem em 
colunas. Colunas adicionais são utilizadas para exibir texto 
adicionais, ou propriedades. 
 
Figura 10. Controle ListView, exibindo ícones pequenos. 
 Os itens exibidos no controle ListView são chamados (naturalmente) de objetos 
ListItem. Um objeto ListItem tem suas próprias propriedades que descrevem o item, entre as 
quais há algumas mais importantes, exibidas na Tabela a seguir. 
 
Tabela 8. Propriedades do controle ListView. 
Propriedade Descrição 
Icons Retorna ou configura o índice ou a chave para o ícone associado ao objeto 
ListItem. Quando declarado após o controle (ListView1.Icons), é utilizado para 
indicar qual controle ImageList, contém os ícones grandes6 a ser exibidos. 
SmallIcons Retorna ou configura o índice ou a chave para o ícone associado ao objeto 
ListItem. Quando declarado após o controle (ListView1.SmallIcons), é utilizado 
para indicar qual controle ImageList, contém os ícones pequenos7 a ser 
exibidos. 
Selected Informa se LisItem foi selecionado (ou faz sua seleção). 
SubItems Retorna ou configura a string representando os dados do subsitema associado 
com um determinado ListItem. Em geral é utilizado para adicionar ou selecionar 
uma coluna, quando a propriedade View é igual 3- lvwReoprt 
View Configura a forma de exibição do objeto ListItem, como visto no Quadro 7. 
 
 Sintaxe para inserir um objeto ListItem. 
object.Add(index, key, text, icon, smallIcon) ou ListView1.ListItems.Add([Index], [Key], [Icon], 
[SmallIcon]) 
 
Parte Descrição 
objectRequerido. Uma expressão de objeto que possua uma coleção de ListItems. 
index Opcional. Um inteiro (Integer) que especifica a posição onde você quer inserir o 
ListItem. Se nenhum índice for especificado, o ListItem é adicionado no fim da 
coleção ListItems. 
key Opcional. Uma expressão de string única que pode ser usada para acessar um 
membro da coleção. 
text Opcional. Uma string que é associada ao controle de objeto de ListItem. 
icon Opcional. Um inteiro que fixa o ícone para ser exibido a partir de um controle de 
 
6 Em geral ícones grandes possuem a dimensão de 32x32 pixels 
7 Em geral ícones pequenos possuem a dimensão de 16x16 pixels 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 30 
ImageList, quando o controle de ListView for configurado para visão de Ícone 
smallIcon Opcional. Um inteiro que fixa o ícone para ser exibido a partir de um controle 
ImageList, quando o controle ListView for configurado para visão de Small-
Icon. 
 Para poupar recursos do sistema, é possível o programador pode"amarrar" um controle 
ImageList ao controle ListView, através da propriedade (Custom), além de poder especificar 
qual é a ImageList, que possui ícones pequenos (SmallIcon) e ícones grandes (Icon), outra 
propriedade que poderá ser alterada em design time ou run time é a exibição da legenda das 
colunas (HideColumnHeaders), o valor é do tipo booleano (True/False). 
 
4.1.3. Controle ProgressBar (Barra de Progresso) 
 A controle ProgressBar (barra de progresso), é em geral utilizado para exibir o 
"andamento" de uma determinada tarefa (em geral "demorada") que está sendo desenvolvida 
pelo aplicativo, demonstrando ao usuário que o aplicativo não "travou" e está desempenhando a 
tarefa que foi determinada. O progresso poderá se dar de duas formas, através de progresso 
quadro a quadro ou em faixa contínua (Figura 11). Que poderá será alterado na propriedade 
Scrooling. 
 As propriedades Min e Max, permite configurar, respectivamente, o valor inicial (mínimo = 
0) e o valor limite. Já a propriedade Value, se refere a posição entre o intervalo já preenchido e o 
intervalo que falta para ainda a conclusão do progresso. 
 
 
Figura 11. Controles ProgressBar's exibindo os dois valores da propriedades Scrolling (0 – 
ccScrollingStandard e 1- ccScrollingSmooth) 
 Para simular um progresso insira no Form1 um controle ProgressBar, um TextBox e um 
CommandButton, e em segunda escreva as seguintes linhas de código no evento Click do botão. 
Private Sub Command1_Click() 
Dim i As Integer 
 pgbTarefa.Min = 0 
 pgbTarefa.Max = Text1.Text 
 pgbTarefa.Value = pgbTarefa.Min 
 
For i = 0 To Text1.Text 
 pgbTarefa.Value = i 
Next i 
End Sub 
Código 8. Rotina simples para exibir o progresso de um controle ProgressBar. 
 O Código 8 não verifica se o valor digitado na caixa de texto Text1, é numérico, portanto 
para que não ocorra erro digite somente valor numérico positivo. Outra informação é que, quanto 
maior for o valor maior será o tempo para que o preenchimento do progresso seja efetuado. 
 Inicialmente no Código 8, declaramos uma variável privada i, com Integer, para ser 
utilizada no laço For-Next, que conta cada incremento a partir do valor 0 a adiciona o valor 1 a 
variável i cada vez que o laço e reiniciado, até que o valor de i seja igual ao valor digitado na 
caixa de texto. O valor mínimo (Min) da barra de progresso foi atribuído como 0 e o valor máximo 
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 31 
(Max), foi atribuído ao valor digitado na caixa de texto (se a caixa de texto estiver vazia ou com 
valor não numérico positivo o Visual Basic retorna um erro (Run-time error '13': Type mismatch). 
 Para testa o progresso, basta inserir, por exemplo, o valor 1.000 ou 2.000 na caixa de texto 
e clicar o botão CommnadButton1. 
 
4.1.4. Controle StatusBar (Barra de Status) 
 O controle StatusBar, fornece a o usuário informações adicionais de status do seu 
aplicativo tais como: se as tecla Caps Lock, Num Lock, Insert está ativar ou não, Data e Hora do 
Sistema operacional, etc.(Figura 12). Por exemplo, o processador de texto Microsoft® Word, 
utiliza o controle barra de status para informara ao usuário qual a página que está sendo editada, 
qual seção, qual linha e coluna e assim por diante (Figura 13). 
 Cada barra de status, poderá ser dividido em no máximo em 16 painéis (panels), cada 
Painel possui as seguintes propriedades: 
1. Index – é o valor de posicionamento do painel dentro do controle StatusBar (somente 
leitura); 
2. Text – é o texto que deverá ser exibido no painel, esta propriedade deverá está associada com 
valor 0 – sbrText da propriedades Style; 
3. ToolTipText – é a mensagem de dica que será exibida quando o usuário passar e parar o 
mouse no painel; 
4. Key – é um valor único que indica o painel; 
5. Allignment – especifica o alinhamento do conteúdo do painel. 
6. Stye – define o estilo e as informações que será exibida no painel (Tabela 9); 
7. Bevel – configura o painel para o modo de exibição. Os valores são: 0 – sbrNoBevel, 1 – 
sbrInsert (padrão) e 2 – sbrRaised. Estes valores exibem o painel respectivamente, como 
plano, baixo relevo e auto relevo. 
8. AutoSize – esta propriedade define o ajuste do tamanho do painel. O valores são: 0 – 
sbrNoAutoSize, 1 – sbrSrping e 2 – sbrContents. Estes valores definem respectivamente o 
tamanho do painel como sem ajuste, com ajuste de acordo com o espaço que falta até a 
barra de status completar o tamanho da janela e ajuste de acordo com o conteúdo do painel; 
9. MinimumWidth – especifica o tamanho mínimo que ao painel deverá Ter; 
10. Actual Width – Exibe o tamanho atual do painel (somente leitura); 
11. Picture – especifica a figura que deverá ser exibida no painel. Em geral utiliza-se figuras com 
tamanho de 16x16 pixels. Esta imagem poderá ser também carregada de um controle 
ImageList, com mostra o Código 6 e 7; 
12. Enabled – habilita ou não o painel em run time; 
13. Visible – exibe ou não o painel em run time. 
 
 
Figura 12. Controle StatusBar, exibindo várias informações adicionais. 
 
 
Figura 13. Controle StatusBar do processador de textos Microsoft® Word. 
Private Sub Form_Load() 
 sbrMain.Panels(1).Picture = imlIcon16.ListImages(1).Picture 
End Sub 
Código 9. Linha de comando para extrair a imagem de Index 1 contida num controle ImageList 
e retorna-lo para o painel a propriedade Picture da Barra de status com o Index 1. 
 
Tabela 9. Constantes, valores e descrição da propriedade Style do Controle StatusBar. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 32 
Constante Valor Descrição 
sbrText 0 
(Padrão) Texto e ou bitmap (figura). Especifica o texto através 
da propriedade Text; especifica a propriedade Picture, como o 
método LoadPicture ou através da Property Page ou como 
demonstrado no Código 8. 
sbrCaps 1 Caps Lock. Exibe as letras CAPS em negrito quando a tecla Caps Lock é ativada, ou então desabilita o painel. 
sbrNum 2 Number Lock. Exibe as letras NUM em negrito quando a tecla Num Lock é ativada, ou então desabilita o painel. 
sbrIns 3 Exibe as letras INS em negrito quando a tecla Insert (Ins) é ativada, ou então desabilita o painel. 
sbrScrl 4 Exibe as letras SCRL em negrito quando a tecla Scrool Lock é ativada, ou então desabilita o painel. 
sbrTime 5 Exibe o horário atual do sistema operacional 
sbrDate 6 Exibe a data atual do sistema operacional 
 
 É possível adicionar (até no máximo 16 painéis) em tempo de execução (run time) através 
de linhas de comando, ou mesmo especificar uma imagem a partir de uma imagem existente no 
disco rígido (HD – Hard Disk) ou ainda alterar as propriedade do controle StatusBar, como pode 
ser visto no (Código 9) 
 
Private Sub Form_Load() 
Dim pnlPanel As Panel 
 sbrMain.Panels(1).Text = "Controle StatusBar" 
 Set pnlPanel = sbrMain.Panels.Add(, , , sbrTime) 
 Set pnlPanel = sbrMain.Panels.Add(,, , sbrData) 
 Set pnlPanel = sbrMain.Panels.Add(, , , sbrCaps) 
 Set pnlPanel = sbrMain.Panels.Add(, , , , LoadPicture(App.Path _ 
 & "\graphics\icons\Win95\Desktop.ico")) 
 Set pnlPanel = sbrMain.Panels.Add(, , , , 
imlIcon16.ListImages(1).Picture) 
End Sub 
Código 10. Controle StatusBar. Atribuindo um texto ao painel 1 e Adicionando painéis e figuras. 
 
4.1.5. Controle ToolBar (Barra de Ferramentas) 
 O controle ToolBar (Figura 14), facilita a construção de uma barra de ferramentas, estilo 
Windows, ou seja como pode ser visto no Windows Explorer, por exemplo. A barra de ferramenta 
é um dos controles mais utilizados em aplicativos por ser intuitiva, ou seja, fornece ao usuário a 
real função de cada botão contido na barra de ferramenta. 
 
 
Figura 14. Controles ToolBar's alinhados no topo da janela e em baixo e com a propriedade 
Style 1 – tbrFlat e 0 – tbrStandard, respectivamente. 
 As propriedades Gerais do controle Toolbar (Figura 15 e 16) são: 
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 33 
1. MousePointer – permite alterar o tipo de cursor que será exibido pela Barra de ferramenta; 
2. ImageList – é o controle ImageList associado que contém os ícones que serão exibidos pela 
barra de ferramentas; 
3. DisabledImageList - é o controle ImageList associado que contém os ícones que serão exibidos 
pela barra de ferramentas quando o botão estive desabilitado; 
4. HotImageList - é o controle ImageList associado que contém os ícones que serão exibidos pela 
barra de ferramentas quando o usuário passa o mouse por cima do botão8; 
5. HelpContextID – Nesta propriedade o programador deverá atribuir o número do tópico de 
ajuda, que foi especificado no projeto da ajuda, na seção MAP; 
6. HelpFile – Nesta propriedade o programador deverá especificar o caminho lógico onde 
encontra-se o arquivo de ajuda, caso este seja diferente do arquivo de ajuda do 
programa/aplicativo; 
7. AllowCostumize – permite que o usuário a partir de um duplo clique possa personalizar a barra 
de ferramentas; 
8. Wrappable – permite que a barra de ferramentas possa ser exibida "com quebra" caso o 
tamanho da janela seja menor que a soma das larguras dos botões; 
9. ShowTips – permite exibi ou ocultar as dicas dos botões; 
10. Enabled – habilita ou desabilita a barra de ferramentas; 
11. Appearance – Permite exibir a barra de ferramentas em 3D (cc3D - Padrão) ou plano (ccFlat); 
12. BorderStyle – Altera o estilo da borda da barra de ferramentas, para ccNone (Sem borda - 
Padrão) ou ccFixedSingle (com bordas); 
13. TextAlignment – Permite alinhar o texto abaixo do botão ou ao lado – tbrTextAlignBottom 
(Alinha abaixo) e tbrTextAlignRight (Alinha ao lado); 
14. Style - permite alterar o estilo dos botões para 3D (tbrStandard - Padrão) ou plano (tbrFlat). 
 
 
 
 
8 Geralmente quanto a propriedade HotImageList é vinculada a um controle ImageList, esta contém ícones 
ou figuras coloridas e a propriedade ImageList é vinculada a um controle ImageList com ícones ou figuras 
com colação em escala de cinza ou cores esmaecidas. Dando assim o efeito que poder ser visto no Windows 
Explorer, Internet Explorer, etc. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 34 
Figura 15. Caixa de propriedades geral de uma barra de ferramentas (aba General). 
 
 
Figura 16. Caixa de propriedades dos botões de uma barra de ferramentas (aba Buttons). 
 
4.1.6. Controle TreeView (Árvore de Visualização) 
 Este controle é muito utilizado quando se quer exibir/visualizar dados de forma hierárquica, 
como ocorre no Windows Explorer nas pastas exibidas à direita da janela. Outro exemplo seria 
exibir dados de uma banco de dados, ou seja, dados de um mesmo autor agrupados 
hierarquicamente. 
 O controle TreeView, possui uma Property Page (Figura 17), com praticamente todas 
as propriedades exibidas na janela propriedades. A seguir iremos especificar as propriedades mais 
utilizadas no controle. 
 A propriedade Style fornece o estilo que será exibido os nós (nodes) do controle os valores 
vão de 0 a 7, como seguem: 
0 – Somente texto (tvwTextOnly). 
1 – Imagem e texto (tvwPictureText). 
2 – Mais/menos e Texto (txwPlusMinustext). 
3 – Mais/menos, imagem e texto (txwPlusPictureText). 
4 – Linhas e texto (txwTreelinesText). 
5 – Linhas, imagem e texto (txwTreelinesPictureText). 
6 – Linhas, mais/menos e texto (txwTreelinesPlusMinusText). 
7 – (Padrão) Linhas, mais/menos, imagem e texto (txwTreelinesPlusMinusPictureText). 
 
 As demais propriedades são: 
1. MousePointer – permite alterar o tipo de cursor que será exibido pelo controle; 
2. LineStyle – retorna ou seta o estilo de linhas exibidas entre os Nodes. Os valores são 0- 
tvwTreeLines e 1 -tvwRootLines; 
3. LabelEdit – configura os node para que o texto possa ser editado ou não com um duplo clique. 
Os valores são 0 – tvwAutomatic (editado com duplo clique) e 1 – tvwManual (não editável); 
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 35 
4. ImageList – configura a o controle ImageList que contém as imagem que serão exibidas nos 
nodes;9 
5. BorderStyle – configura se o controle irá exibir as borad ou não. Os valores são 0 – ccNone e 
1 – ccfixedSingle; 
6. Appearance – configura a aparência do controle, se 3D ou plano. Os valores são 0 – ccFlat 
(plano) e 1- cc3D (tridimensional); 
7. Indentation – configura a largura indentation, ou seja, a largura entre o imagem ou o sins 
menos/mais do node e o texto. O valor padrão é: 566,9292; 
8. PathSeparator – configura o tipo de caractere que será utilizado como separador de nodes. O 
valor padrão é \; 
9. HideSelection – configura o controle para exibir uma marcação no último node selecionado 
quando o controle perde o foco. Quando selecionado o texto não é marcado, quando não 
selecionado o node fica marca com uma coloração amena, em geral cinza, quando o controle 
perde o foco; 
10. Sorted – configura o controle para distribuir o texto inserido nos nodes em ordem alfabética, 
quando esta opção e marcada ou setada; 
11. FullRowSelected – seleciona todo a linha quando o texto do node é selecionado; 
12. Enabled – habilita o desabilita o controle; 
13. CheckBoxes – quando esta opção e marcada ou setada, cada node exibira um CheckBoxes 
( ). 
 
Figura 17. Caixa de propriedades dos botões de um controle Treeview (aba General). 
 
 
 
9 As imagem dentro do controle ImageList, deverão ser especificada o valor key, que deverão ser únicos, ou 
seja, não podem ter valor igual. O valor key será utilizado para especificar a imagem que irá ser exibida pelo 
Node, quando ele é adicionado no controle TreeView. Em geral o nome das chaves (key) são dadas em 
minúsculo, pois existe uma sensibilidade entre maiúscula e minúscula, ou seja o parâmetro é Case Sensitive. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 36 
 
Figura 18. Exemplo de um controle Treeview, com um node pai (Ícones) e 4 nodes filhos. 
LineStyle igual a 1– tvwRootLine. 
 Para inserir nodes num controle Treeview, basta setar os valores no método Add da 
propriedade Nodes. Como mostra o Código 11. 
 A sintaxe para adição de nodes é: Object.Nodes.Add([relative], [relationship], [key], 
[text], [image], [selectedimage]) 
 
Parte Descrição 
object Requerido. Uma expressão de objeto que possua uma coleção de ListItems. 
relative Opcional. O número de índice ou chave de um objeto de Node pré-existente. A 
relação entre o novo node e o node pré-existentes é verificado no próximo 
parâmetro, relationship. 
relationship Opcional. Especifica a colocação relativa do objeto Node, como descritas na 
Tabela 10. 
key Opcional. Uma expressão de string única que pode ser usada para acessar um 
membro da coleção. 
text Opcional. Uma string que é associada ao controle de objeto de ListItem. 
image Opcional. O índice ou key de uma imagem em um controlede ImageList 
associado. 
selectedimage Opcional. O índice ou key de uma imagem em um ImageList associado ao 
controle a imagem é exibida quando o Node for selecionado. 
 
Tabela 10. As constantes para relationship são:10 
Constante Valor Descrição 
tvwFirst 0 First. The Node is placed before all other nodes at the same level of 
the node named in relative. 
tvwLast 1 Last. The Node is placed after all other nodes at the same level of 
the node named in relative. Any Node added subsequently may be 
placed after one added as Last. 
tvwNext 2 (Default) Next. The Node is placed after the node named in relative. 
tvwPrevious 3 Previous. The Node is placed before the node named in relative. 
tvwChild 4 Child. The Node becomes a child node of the node named in relative. 
 
Private Sub Form_Load() 
Dim xNode As Node 
 Set xNode = TreeView1.Nodes.Add(, , , "Ícones", "vb") 
 Set xNode = TreeView1.Nodes.Add(1, tvwChild, , "Informação", 
"info") 
 
10 Extraído do arquivo de ajuda do Microsoft® Visual Basic 6.0 
Microsoft Visual Basic – Controles Personalizados (Propriedades e Eventos) 37 
 Set xNode = TreeView1.Nodes.Add(1, tvwChild, , "Interrogação", 
"inter") 
 Set xNode = TreeView1.Nodes.Add(1, tvwChild, , "Exclamação", 
"exc") 
 Set xNode = TreeView1.Nodes.Add(1, tvwChild, , "Critico", "stop") 
 xNode.EnsureVisible 
End Sub 
Código 11. Adição de nodes num controle TreeView. 
 Para remover um node basta seguir o exemplo do Código 12. A sintaxe para o método 
Remove é Object.Nodes.Remove(index) 
Private Sub Form_Click() 
 TreeView1.Nodes.Remove (1) 
End Sub 
Código 12. Removendo um node do controle TreeView. 
 
4.1.7. Controle Slider 
 O controle Slider (Figura 19) resume-se em uma "régua" e um cursor. O cursor da régua 
pode ser deslocado através do mouse ou pelas setas de direção do teclado. Através de sua 
movimentação pode-se obter o valor relativo através da propriedade Value. 
 O controle possui duas propriedades importantes que determinam o intervalo entre o valor 
mínimo e máximo que a propriedade value poderá ser setada. São elas Min e Max. A propriedade 
LargeChange, especifica a freqüência de deslocamento do Slider, quando é acionada as teclas 
Pagedown ou PageUp quando o controle recebe o foco ou quando é clicado o ponteiro do Mouse. 
Mcomo este é um controle pouco utilizado em aplicações sugiro consultar o arquivo de ajuda do 
Visual Basic, para maiores detalhes sobre propriedades, métodos e eventos deste controle. 
 
 
Figura 19. Controle Slider 
 
4.2. Exercícios 
1. Crie um pequeno projeto utilizando os seguintes controle ToolBar, ImageList e StatusBar. 
Neste projeto adicione 3 ícones ao controle ImageList e em seguida crie 3 botões no controle 
ToolBar. No controle StatusBar adicione um Pannels e adicione a imagem 2 do controle 
ImageList através de código. Os códigos deverão se escrito abaixo e no projeto a ser entregue 
para análise. 
Private Form_ () 
 
 
 
 
 
End Sub 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 38 
2. Utilizando o controle TreeView adicione via código seis nodes com valor text livre entretanto os 
valores Image e SelectedImage, diferente para cada node. O primeiro node deverá ser pai e os 
demais deverão ser filhos. Adicione comentário para cada linha de comando escrita. Dica 
Lembre-se da coleção de imagens. 
Private Form_Load() 'Begin load event of this form 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
End Sub 'End or close load event of this form 
 
3. Quanto painéis (pannels) é possível adicionar num controle StatusBar? Ë poss;ivel adiciona-los 
via código, caso verdadeiro crie um exemplo, para maiores informações verifique a ajuda do 
Visual Basic 
________________________________________________________________________________ 
 
Private Form_Load() 
'Insira aqui o código para inserir um novo painel ao controle StatusBar 
 
 
 
End Sub 
 
4. É possível alterar em Run-time (em tempo de execução) o valor da(s) propriedade(s): 
 Scrolling de um controle ProgressBar.............................: ( ) Sim ( ) Não 
 Style de um controle StaturBar......................................: ( ) Sim ( ) Não 
 ImageHeight e ImageWidth de uma controle ImageList..: ( ) Sim ( ) Não 
 Identation de um controle TreeView..............................: ( ) Sim ( ) Não 
 Gridlines de um controle ListView...................................: ( ) Sim ( ) Não 
 Min e Max de um controle ProgresBar.............................: ( ) Sim ( ) Não 
 Name de um controle TreeView......................................: ( ) Sim ( ) Não 
 Align de um controle StatusBar.......................................: ( ) Sim ( ) Não 
 LabelEdit de um controle TreeView..................................: ( ) Sim ( ) Não 
Microsoft Visual Basic – Funções Data e Hora 39 
5. FUNÇÕES DATA E HORA 
 As funções de data e hora são muito úteis para um aplicativo, por exemplo a subtração de 
uma data de nascimento e a data atual, para saber a idade de uma pessoa (funcionários). Entre 
diversas outras funções. Veremos as forma de declarar as diversas formas de data e hora e um 
exemplo de subtração. 
 As funções de data aceitos pelo VB, são, Date, DateValue, Format. Abaixo segue os 
formatos das funções de datas. 
 
5.1. Date 
 Datas com formato inválidos, devolverá uma mensagem "Illegal function call",(Chamada 
ilegal de função), em tempo de execução (Run Time). 
Date = "mm-dd-aaaa" 'Devolva a dada da seguinte forma mês-dia-ano 
Date = "mm/dd/aaaa" 'Devolva a dada da seguinte forma mês/dia/ano 
Date = "dd.mm.aaaa" 'Devolva a dada da seguinte forma dia.mês.ano 
Date = "dd/mm/aaaa" 'Devolva a dada da seguinte forma dia /mês/ano 
 
5.2. DataValue 
 Datas com formato inválido gera um erro Type Mismatch, em tempo de execução (Run 
Time), por exemplo: DataValue("30-02-2001"). 
DataValue("11-20-2000") 
DataValue("Novembro 11, 2000") 
DataValue("Dez 31, 2000") 
DataValue("31 Dezembro 2000") 
DataValue("31-Dez-2000") 
 
5.3. Format 
Format (Now, "General Date") 'Devolve a seguinte data: 20/11/2000 00:44:26 
Format (Now, "Long Date") 'Devolve a seguinte data: segunda-feira, 20 de novembro de 2000 
Format (Now, "Medium Date") 'Devolve a seguinte data: 20-nov-00 
Format (Now, "Short Date") 'Devolve a seguinte data: 20/11/00 
Format (Now, "Long Time") 'Devolve a seguinte data: 00:49:34 
Format (Now, "Medium Time") 'Devolve a seguinte data: 12:50 
Format (Now, "Short Time") 'Devolve a seguinte data: 00:50 
 
5.4. Projeto Comentado 
 Para o nosso pequeno projeto insira os controles como especificados na Tabela 11: 
Tabela 11. Controles para o projeto idade. 
Controle Propriedade Atributo 
Form 
Name: 
Caption: 
BorderStyle: 
StartUpPosition: 
TelPrin 
Idade 
0 – Fixed Single 
2 – ScreenCenter 
CommandButton 
Name: 
Caption: 
Default: 
cmdCalcular 
&Calcular 
True 
CommandButton 
Name: 
Caption: 
Cancel: 
cmdFechar 
&Fechar 
True 
Label Name: Caption: 
lbNascimento 
Data de Nascimento 
Label Name: lbIdade 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 40 
Caption: Idade (dias, meses, ano) 
TextBox Name: txtDtNasc 
TextBox Name: txtDia 
TextBox Name: txtMes 
TextBox Name: txtAno 
 
 A seguir insira as seguintes linhas de código: 
Private Sub cmdCalcular_Click() 
Dim DataNasc As Date 'Declara a variável com Data 
If Not IsDate(txtDtnasc.Text) Then 'Se a data digitada não for válida... 
 MsgBox "Data '" & txtDtnasc.Text & "' é inválida" '...exibe esta 
mensagem... 
 txtDtnasc.Text = Empty '... limpa a caixa de texto de data de 
nascimento e ... 
 txtDtnasc.SetFocus '... devolve a ela o foco. 
Else 'Se não 
 txtDia.Text = Empty 'Limpa a caixa de texto de dias vividos 
 txtMes.Text = Empty 'Limpa a caixa de texto de meses vividos 
 txtAno.Text = Empty 'Limpa a caixa de texto de anos vividos 
 DataNasc = txtDtnasc.Text 'Devolve a variável DataNasc o valor da 
data digitada 
 txtDia.Text = "Dias vividos "& Date - DataNasc & " dias" 'Exibe o 
número de dias vividos 
 txtMes.Text = "Meses vividos " & Fix((Date - DataNasc) / 12) & " 
meses" 'Exibe o número inteiro de meses vividos 
 txtAno.Text = "Anos vividos " & Fix((Date - DataNasc) / 365) & " 
anos" 'Exibe o número inteiro de anos vividos 
End If 
End Sub 
 
Private Sub cmdFechar_Click() 
 End 'Finaliza a aplicação 
End Sub 
Código 13. Projeto Calculadora de dias, meses e anos vividos 
 
 
Figura 20. Interface da calculadora de idade 
 
Microsoft Visual Basic – Controlando as versões e informações do seu aplicativo 41 
6. CONTROLANDO AS VERSÕES E INFORMAÇÕES DO SEU APLICATIVO 
 É sempre interessante oferecer informações sobre as versões (Major, Minor, Revision) do 
seu aplicativo e controlar as informações adicionais, tais como o ícone do arquivo executável, o 
título do aplicativo (Title), comentários (Comments), nome da empresa produtora do softwares 
(Company Name), Descrição do Arquivo (File Description), Copyrigth (Legal Copyright), Marcas 
Registradas (Legal Trademarks), Nome do Produto (Product Name). A seguir a descrição de cada 
campo. 
 
Figura 21. Caixa de diálogo de controle versões e informações do aplicativo. 
Version Number Cria o número de versão para o projeto. 
Major – Número principal de lançamento do projeto; 0 – 9999. 
Minor – Número secundário de lançamento do projeto; 0 – 9999. 
Revision – Número de versão de revisão do projeto; 0–9999. 
Auto Increment – Se selecionado, incrementa automaticamente o número de Revision com um 
cada tempo que você executar o comando Make Project para este projeto. 
 
Application Permite identificar um nome e ícone para seu projeto. 
Title – Nome do aplicativo. 
Icon – Ícone para o aplicativo. 
 
Version Information Permite fornecer informações específicas sobre a versão atual de seu 
projeto. 
Type – Você pode entrar com as informações do nome da companhia, descrição do arquivo, 
direitos autorais, marcas registradas legais, nome do produto e comentários. 
Value – O valor para o tipo de informações selecionadas na caixa de Tipo (Type). 
 Para exibir as informações na tela de informações (About) Figura 22 inseridas nas 
propriedades do projeto, insira num form os controles como na Tabela 12 abaixo: 
 
Tabela 12. Controles para exibir as versões e as informações de um projeto. 
Controle Propriedade Atributo 
Form Name: Caption: 
frmAbout 
Sobre - Tutorial do Microsoft Visual Basic 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 42 
 
BorderStyle: 
StartUpPosition: 
5.0 
0 – Fixed Single 
2 – ScreenCenter 
CommandButton Name: Caption: 
cmdOK 
&OK 
Label 
Name: 
Caption: 
Align: 
lbTitulo 
Titulo 
Right Justify 
Label 
Name: 
Caption: 
Align: 
lbVersao 
Versão 
Right Justify: 
Label 
Name: 
Caption: 
Autosize: 
WordWrap: 
lbDesc 
Descrição 
True 
True 
Label 
Name: 
Caption: 
Autosize: 
WordWrap: 
lbComentarios 
Comentários 
True 
True 
Label Name: Caption: 
lbCopyright 
Copyright 
Label Name: Caption 
lbTradeMarks 
Trademarks 
Label Name: Caption 
lbProduto 
Produto 
 
 Em seguida insira as seguintes linhas de comando. 
Private Sub cmdOk_Click() 
 Unload Me 'Fecha o formulário 
End Sub 
 
Private Sub Form_Load() 
 lbTitle.Caption = App.Title 'Exibe o título do aplicativo 
 lbVersao.Caption = "Versão " & App.Major & "." & App.Minor & "." & 
App.Revision 'Exibe as versões Major, Minor e Revision 
 lbDesc.Caption = "Descrição: " & App.FileDescription 'Exibe a 
descrição do aplicativo 
 lbComentarios.Caption = "Comentários: " & App.Comments 'Exibe os 
comentários do aplicativo 
 lbCopyright.Caption = "Copyright " & App.LegalCopyright 'Exibe os 
direitos autorais do aplicativo 
 lbTradeMarks.Caption = "Trademarks: " & App.LegalTrademarks 'Exibe 
os direitos das marcas registradas do aplicativo 
 lbProduto.Caption = "Produto: " & App.ProductName 
End Sub 
Código 14. Projeto para exibir as informações de um aplicativo 
Microsoft Visual Basic – Controlando as versões e informações do seu aplicativo 43 
 
Figura 22. Tela de informações de um projeto. 
 
Microsoft Visual Basic – Trabalhando com funções numéricas e financeiras 45 
7. TRABALHANDO COM FUNÇÕES NUMÉRICAS E FINANCEIRAS 
7.1. Funções Numéricas 
 Caso você utilize programas científicos, as funções numéricas serão longas companheiras 
do seu dia-a-dia, com elas é possível não somente realizar cálculos, mas desenhar curvas e retas. 
A seguir na tabela abaixo estão as principais funções numéricas sua descrição. 
Tabela 13. Principais funções numéricas utilizadas pelo Visual Basic e a descrição. 
Função Descrição 
1/Cos(x) Devolve a secante de um ângulo x em radiano 
1/Sin(x) Devolve a cosecante de um ângulo x em radiano 
1/Tan(x) Devolve a cotangente de um ângulo x em radiano 
4*Atn(1#) Devolve o valor de π com dupla precisão 
Abs(x) Devolve o absoluto de um número x 
Atn(x) Devolve a arcotangente de um ângulo x em radiano 
Cos(x) Devolve o cosseno de um ângulo x em radiano 
E = Exp(1#) Devolve o valor de e com dupla precisão 
Exp(x) Devolve a valor e (2,7182) elevado a um número x 
Fix(x) Devolve o número aproximado de um valor x 
Hex(x) Devolve o hexadecimal do número x 
Log(x) Devolve o logaritmo natural de um número x 
Log(x)/Log(10) Devolve o logaritmo na base 10 de um número x 
Log(x)/Log(n) Devolve o logaritmo na base n de um número x 
Oct(x) Devolve o octagonal do número x 
Rnd(x) Devolve o número radomizado de uma valor x 
Sin(x) Devolve o seno de um ângulo x em radiano 
Sqr(x) Devolve a raiz quadrada de um número x 
Tan(x) Devolve a tangente de um ângulo x em radiano 
x*180/4*Atn(1#) Converte o valor x radiano para grau 
x*4*Atn(1#)/180 Converte o valor de x grau para radiano 
 
7.2. Funções Financeiras 
 O Visual Basic oferece funções financeiras pré-fromatadas, evitado que o programador 
passe horas quebrando cabeça para motar um rotina para cáculo de aopsentadoria por exemplo. A 
seguir veremos as principais funções financeiras oferecidas pelo Visual Basic e sua sintaxe. 
 
7.2.1. Função Pmt (Pagamento de Anuidade Baseado num Período) 
 A sintaxe para a função é: Pmt(rate, nper, pv[, fv[, type]]) 
Pmt (TaxaPorPeriodo, NumPeriodos, ValorInicial [, ValorFinal [, QuandoPaga]]). Para ficar mais 
simples veja o exemplo abaixo. 
 Para calcular uma hipoteca de $100.000,00 de 30 anos a 8%, utilize: 
Hipoteca = Pmt(0.08/12,30*12,100000, 0,1) 
 TaxaPorPeriodo – normalmente, taxa de juros é estipilada por ano, mas você paga todo mês. 
Portanto o valor da taxa anual deve ser 0.08 e a TaxaPorPeriodo 0.08/12. 
 NumPeriodos – Este é o número de períodos, ou seja, se o pagamento é mensal num 
período de 30 anos o NumPeriodos deve ser 30*12. Ara uma hipoteca de pagamento 
quinzenal o valor do NumPeriodos seria 30*26. 
 ValorInicial – é o valor do saldo inicial. 
 ValorFinal – em uma hipoteca o valor seria zero. Em um plano de poupança, insto seria a 
quantia que você gostaria de reservar para a aposentadoria, por exemplo. 
 QunadoPaga – você paga no início do período ou no final? Utilize 0 (zero) para o finla do mês 
e 1 para o início. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 46 
 Embora você tenha de utilizar esses nomes para os parâmetros se você os utiliza como 
argumentos nomeados, a notação da Microsoft não enfatiza suficientemente Que as unidades 
utilizadas para as várias entradas devem ser as mesmas. Por exemplo, se a taxa é calculada 
utilizando meses, nper também tem de ser calculada utilizando meses. 
 
7.2.2. Função FV (Valor Futuro de Anuidade) 
 Está função é utilizada, por exemplo, para o cálculo de aposentadoria, porque ela fornece o 
valor futuro de uma anuidade com base em pagamentos (ou retiradas) periódicas e uma taxa de 
juros constante. 
 A sintaxe para a função é: FV(rate, nper, pmt[, pv[, type]]) , para melhor entendimento 
FV(TaxaJurosPorPeriodo, NumPeriodos, PagamentoPOrPeriodo [, ValorInicial [, QuandoDevido]]) 
 Os dois primeiros argumentos devem ser expressos pelas mesmas unidades. E, como para 
todasas funções financeiras, os valores pagos são representados por números negativos; e os 
valores recebidos são representados por números positivos. 
 
7.2.3. Função IPmt (Taxa de Juros para Durante um Período) 
 Esta função fornece a taxa de juros para durante um período de uma anuidade com base 
em pagamentos iguais e períodos e uma taxa de juros constante. Por exemplo, você poderia 
utilizá-la para verificar os juros pagos em um determinado ano – que os computadores da 
empresa hipotecária estão relatando à Receita Federal. 
 A sintaxe para a função é IPmt(rate, per, nper, pv[, fv[, type]]), para melhor entendimento 
IPmt(TaxaJurosPeriodo, NumPeriodos [, ValorInicial [,QuandoDevido]] ) 
 
7.2.4. Função NPer (Número de Períodos para Atingir uma Anuidade) 
 Esta função informará quanto tempo (o número de depósitos/retiradas periódicas) levará 
para acumular uma anuidade. 
 A sintaxe é: NPer(rate, pmt, pv[, fv[, type]]) 
 
7.2.5. Função PV (Presente Valor Presente Baseado num Período) 
 Esta função informa quanto vale hoje os pagamentos periódicos feitos no futuro. 
 A sintaxe é: PV(rate, nper, pmt[, fv[, type]]) 
 
7.2.6. Função NPV (Valor Presente Líquido) 
 Está função calcula o valor presente líquido. Esta função é utilizada, por exemplo, se você 
começa pagando com um custo inicial, mas depois obtém dinheiro em anos sucessivvos. 
 A sintaxe é: NPV(rate, values()), ou melhor NPV(TaxaPorPeriodo, ArrayOf()) 
 É necessário preencher o array com valores aproprieados na ordem coreta. Por exemplo, a 
primeira entrada poderia ser um número positivo representado o valor recebido. Pelo menos um 
entrada tem que ser positiva e uma entrada tem que ser negativa. Esta função é mais geral que a 
função PV, pois a utilização de uma array permite que o valor recebido ou desembolsado varie 
com o tempo. 
 
7.2.7. Função Rate (Taxa por Período) 
 Esta função fornece a taxa de juros por período para uma anuidade. Você utilizaria isso 
para verificar a taxa de juros reais que estaria pagando se realmente houvesse a promoção padrão 
de "Por apenas $30,00 por mês durante dois anos" 
 Sintaxe é: Rate(nper, pmt, pv[, fv[, type[, guess]]]) 
 
 
Microsoft Visual Basic – Iniciando com a SQL (Structured Query Language) 47 
8. INICIANDO COM A SQL (STRUCTURED QUERY LANGUAGE) 
 A SQL - Structured Query Language (Linguagem de Consulta Estruturada) praticamente 
surgiu com a terceira geração de banco de dados, os RDBs-Relational Databases, ou seja, 
banco de dados relacionais. 
 A SQL é uma linguagem padrão para o gerenciamento de banco de dados, e não é nem 
estruturada (Structured) e não esta limitada somente a consultas (Queries) em banco de dados. 
 Na verdade podemos dizer que SQL é uma linguagem para definir e manipular bancos de 
dados relacionais e praticamente todos os produtos de bancos de dados relacionais que estão no 
mercado suporta SQL. 
 Infelizmente ainda não existe uma padronização da SQL; embora a portabilidade seja 
grande, dependendo do produto que se está utlizando (Oracle, Sybase, Informix, etc.) haverá 
diferenças na sintaxe das declarações. Atualmente o padrão SQL-92 é o mais utilizado. 
 No nosso caso usaremos as declarações SQL utilizadas no Microsoft Access, pois 
estaremos trabalhando em nível de desktop. 
 Ao utilizar a SQL em seu código você terá muitos benefícios; 
 Primeiro irá ganhar tempo, pois a quantidade de linhas de código necessárias para 
realizar uma tarefa via SQL é menor que o método procedural via DAO. 
 Seus projetos também ficarão mais rápidos, pois geralmente a SQL e mais rápida que 
o método procedural via DAO. 
 A portabilidade sua aplicação será maior visto que a SQL é aceita pelos princi-pais 
bancos de dados relacionais (Oracle, Sybase,etc.). 
 
 Creio que estes motivos já são suficientes para você dar uma olhada no que a SQL pode 
fazer por você e por seu código. 
 Com a SQL podemos realizar as seguintes tarefas: 
 Criação de Bases de Dados (Ver Banco de Dados). 
 Segurança de acesso aos Dados. 
 Recuperar informações e Integridade de transações. 
 Manipulação e controle de bases de dados. 
 
 Se você tem uma cópia do Access, sua incursão no mundo SQL será facilitada, pois o 
Access praticamente escreve em SQL para você, depois você só precisar copiar e colar as 
instruções no seu código em Visual Basic. Mas vale a pena aprender pelo menos as instruções 
mais importantes em SQL. Com isso você já conseguira usar muito do seu potencial. 
 Talvez o maior problema para os que já utilizavam uma linguagem procedural (Basic, 
Clipper, Fortran, Cobol, etc), ao lidar com a SQL seja o seguinte: Você tem que mudar a forma de 
pensar ao programar com SQL. 
 Estas linguagens ditas da terceira geração, são caracterizadas por comandos que dizem 
ao computador exatamente o que fazer em estruturas sequenciais executadas passo a passo. 
São chamadas de linguagens procedurais. 
 A SQL,por outro lado, é caracterizada por ser uma linguagem declarativa, ou seja, ela diz 
ao computador o que quer que ele faça, sem se preocupar de que forma o trabalho será realizado, 
o que importa é o resultado. 
 A SQL é composta de subconjuntos de comandos para executar diferentes tarefas. Assim 
podemos dizer que a SQL suporta: 
 Uma linguagem de definição de dados (DDL) 
 Uma linguagem de manipulação de dados (DML) 
 Uma linguagem de segurança de dados (DCL) 
 A DDL permite criar e modificar e excluir a estrutura de uma tabela e seus índices; seus 
principais comandos são: 
 
 CREATE – Cria tabelas, campos e índices num banco de dados. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 48 
 DROP – Remove tabelas e índices de um banco de dados. 
 ALTER – Altera a estrutura de uma tabela de um banco de dados. 
 
 A DML permite manipular os dados (Inserir, Excluir e Atualizar) bem como executar 
consultas através da recuperação de subconjuntos de dados para posterior tratamento. seus 
principais comandos são: 
 SELECT – Seleciona um conjunto de registros de uma ou mais tabelas usando um 
critério específico. 
 INSERT – Adiciona dados a uma tabela. 
 UPDATE – Atualiza os dados de uma tabela segundo critérios específicos. 
 DELETE - Remove registros de uma tabela. 
 
 A DCL permite a implementação da segurança interna do Banco de dados.Seus comandos 
principais são GRANT e REVOKE, mas como não é suportada pela plataforma Access, não iremos 
utilizá-la. 
 
8.1. Criando Tabelas via SQL. 
 
 Vamos criar via SQL as tabelas através da a estrutura dos dados que é são dados a seguir: 
TblAlunos TblCursos TblNotas TblProfessor 
codaluno 
nome 
endereco 
telefone 
nascimento 
nomepai 
nomemae 
observacao 
Periodo 
serie 
numero 
codcurso 
nomecurso 
codprofessor 
codaluno 
codcurso 
nota 
ano 
bimestre 
Observacao 
codprofessor 
nome 
endereco 
telefone 
 
Obs : Codaluno , Codcurso, CodProfessor são chaves primárias de suas respectivas tabelas. 
Para exercitar iremos definir os relacionamentos entre as tabelas da seguinte forma (figura 1.0 
abaixo: 
 
Figura 23. Estrutura do banco de dados com quatro tabelas. 
 
A tabela tblprofessor pode ser definida como a seguir (Access SQL): 
 
CREATE TABLE tblprofessor (codprofessor INTEGER CONSTRAINT 
primarykey PRIMARY KEY, nome TEXT (50), endereco TEXT (50), telefone 
TEXT (15) ); 
Microsoft Visual Basic – Iniciando com a SQL (Structured Query Language) 49 
 
 A instrução CREATE TABLE irá criar a tabela tblprofessor, com as definições da lista de 
campos entre parênteses, separados um dos outros por vírgulas. Cada descrição de campo possui 
duas partes: o nome do campo e o tipo de dados os quais são separados por um espaço entre si. 
 A cláusula CONSTRAINT é utilizada para definir a chave primária codprofessor. 
 Para criar a tabela no VB execute a instrução CREATE TABLE passando-a como parâmetro 
do método Execute do objeto Database. Ex: db.Execute ("CREATE TABLE...") 
 Os nomes dos tipos de dados utilizados pelo JET não é igual aos nomes exigidos pelas 
instruções SQL. Veja na tabela a abaixo a correspondênciaentre ambos: 
 
Tabela 14. Tipos de dados uportados pelo JET e pela A SQL 
Tipos de Dados SQL Tipos de dados do JET 
BIT 
BYTE 
COUNTER 
CURRENCY 
DATETIME 
SINGLE 
DOUBLE 
SHORT 
LONG 
LONGTEXT 
LONGBINARY 
TEXT 
YES/NO 
NUMERIC - BYTE 
COUNTER - Contador 
CURRENCY - Moeda 
DATE/TIME 
NUMERIC - SINGLE 
NUMERIC - DOUBLE 
NUMERIC - INTEGER 
NUMERIC - LONG 
MEMO 
OLE OBJECTS 
TEXT 
 
 A tabela TblCursos será criada pela instrução: 
CREATE TABLE tblcursos (codcurso INTEGER CONSTRAINT primarykey PRIMARY KEY,nomecurso 
TEXT (15), Codprofessor INTEGER CONSTRAINT tblprofessorFK REFERENCES tblprofessor); 
 
 A cláusula CONSTRAINT é utilizada para definir uma chave primária e uma chave externa. 
 Note que existe uma relação de um para muitos entre a tabela TblProfessor e a tabela 
TblCursos, sendo que a coluna codprofessor da tabela TblCursos, é uma chave estrangeira 
(Foreign Key - FK ) 
 
8.2. Índices e Tabelas - Criar, Alterar e Excluir 
8.2.1. Excluindo Tabelas 
 Para excluir uma tabela via SQL usamos a instrução DROP TABLE nome da tabela. 
Assim para excluir a tabela tblalunos criada anteriormente fazemos: 
 DROP TABLE tblalunos 
 
 A tabela e todo o seu conteúdo são excluidos. 
 
8.2.2. Alterando Tabelas 
 Para alterar uma tabela, adicionando ou excluindo um campo da tabela, usamos a 
instrução: ALTER TABLE 
 
1- Na inclusão de um campo temos que especificar o NOME, TIPO e TAMANHO do campo, e usar 
a cláusula ADD COLUMN 
 
 Assim para incluir o campo CIDADE com 50 caracteres na tabela tblalunos fazemos: 
 ALTER TABLE tblalunos ADD COLUMN cidade TEXT (50) 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 50 
2- Na exclusão de um campo basta especificar o nome do campo e usar a cláusula DROP 
COLUMN 
 O código abaixo exclui o campo NOME da tabela tblalunos 
 ALTER TABLE tblalunos DROP COLUMN nome 
 
 Note que não será possível excluir um campo empregado em um índice ou em uma 
relação. 
 
8.2.3. Criando Índices 
 Podemos criar um índice de um único campo ou um índice de vários campos com a 
instrução: CREATE INDEX. 
 Na criação do índice devemos informar o nome do índice o nome da tabela e pelo menos 
um campo a ser incluído como índice. Assim se quisermos criar um índice pela data de nascimento 
na tabela tblalunos fazemos: 
 CREATE INDEX nascimento ON tblalunos (nascimento) 
 
 A instrução abaixo cria um índice chamado series, usando os campos serie e periodo da 
tabela tblalunos, sendo que serie será usado na ordem ASCENDENTE e periodo na ordem 
DESCENDENTE. 
 CREATE INDEX series ON tblalunos(serie ASC, periodo DESC) 
 
8.2.4. Excluindo Índices 
 Para excluir um índice de uma tabela utilize a instrução DROP INDEX, devemos informar 
o nome do índice e o nome da tabela. Assim para excluir o índice serie criando anteriormente 
fazemos: 
DROP INDEX series ON tblalunos 
 
8.3. Testando As Instruções SQL 
 Para criar e testar todas essas instruções SQL você pode codificá-las direto no Visual Basic 
e executar o código para ver o resultado, para isto voce deverá usar o método Execute (ver a 
seguir) do objeto DataBase, mas você pode usar os seguintes meios: 
 
1-) O aplicativo VISDATA que acompanha o Visual Basic 
2-) O Microsoft Access 
3-) O Microsoft Query (para usuários do Excel ou Office) 
 
 É aconselhado a evitar a codificação quando estiver testando as instruções, pois tanto o 
VISDATA como o Access são mais fácies de usar e lhe dão o resultado de imediato. 
 
8.4. SQL - Criando Consultas Parametrizadas 
 
 O Microsoft Access nos dá a possibilidade de criar e armazenar consultas dentro do arquivo 
de banco de dados. A vantagem em armazenar as consultas no banco de dados é que para 
executar uma instrução SQL o JET verifica erros de sintaxe, depois ele tenta otimizar a instrução e 
a seguir executa a instrução, tudo isto leva tempo e a coisa piora se você estiver executando as 
mesmas instruções SQL diversas vezes, pois o JET terá que refazer tudo novamente. 
 Ao criar e armazenar definições de consultas através de instruções SQL o Access analisa a 
instrução e a otimiza só então ele armazena a instrução original e a otimizada, quando for 
executar a instrução o trabalho estará feito e o tempo de execução será diminuido. 
Microsoft Visual Basic – Iniciando com a SQL (Structured Query Language) 51 
 Cada consulta armazada em um banco de dados Access é um objeto QueryDef, o conjunto 
de objetos QueryDef compõem a coleção QueryDefs do objeto Database. Então uma QueryDef é 
uma consulta SQL pré-compilada e pré-otimizada. 
 Para criar uma QueryDef usamos o método CreateQuery do objeto DataBase ou a criamos 
diretamente usando o próprio Microsoft Access. 
 O CreateQuery necessita de dois parâmetros: o nome da QueryDef e a instrução SQL que o 
cria. 
 Vejamos com o criar uma consulta SQL e armazená-la no banco de dados: 
 Para criar uma consulta chamada Lista_Alunos , que lista todos os alunos por ordem 
alfabética da tabela tblalunos e armazená-la no banco de dados Escola.mdb, fazemos o seguinte: 
 
Dim db as Database 
Dim qd as QueryDef 
set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") 
set qd=db.CreateQueryDef("Lista_alunos", "SELECT * FROM tblalunos ORDER 
BY nome" 
 
 Uma vez criada a QueryDef podemos executá-la e manipulá-la como um recordset: 
 
Dim db as Database 
Dim dyn as Recordset 
set db=DbEngine.Workspaces(0).OpenDatabase(app.path & "\escola.mdb") 
set dyn=db.QueryDefs("lista_alunos").OpenRecordset(dbOpendynaset) 
 
Ou eliminá-la : 
db.Querydefs.Delete "Lista_alunos" 
 Para tirar maior proveito das QueryDefs costuma-se criá-las de forma que aceitem 
parâmetros, para isto usamos a palavra-chave PARAMETERS para passar um ou mais parâmetros 
para as consultas SQL. 
 Suponha que no caso do exemplo anterior gostariamos de listar todos os alunos de uma 
determinada série, para isso criamos a consulta e passamos o parâmetro da série desejada : 
 
Dim db as Database 
Dim qd as QueryDef 
Dim dyn as Recordset 
Dim Sql as String 
set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") 
sql= "PARAMETERS pSerie String SELECT * FROM tblalunos WHERE serie = 
pSerie " 
sql=sql & " ORDER BY nome " 
set qd=db.CreateQueryDef("Lista_alunos", Sql ) 
qd.Parameters("pSerie")= "1" 
set dyn= qd.OpenRecordset() 
 
8.4.1. Métodos de QueryDef 
Os métodos usados pelas QueryDefs são: Execute e OpenRecordset. 
 
 O método Execute é usado para executar comandos de ação como DELETE ou UPDATE que 
não retornam um conjunto de registros , é usado também para criar tabelas e índices via instrução 
SQL. 
 O método OpenRecordset é usado para retornar um conjunto de registros como resultado 
da consulta. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 52 
 Assim para apagar todos os alunos inativos, fazemos: 
 
Dim db as Database 
Dim qd as QueryDef 
Dim dyn as Recordset 
Dim Sql as String 
set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") 
sql= "DELETE * FROM tblalunos WHERE ativo=False " 
set qd=db.CreateQueryDef("Apaga_alunos", Sql ) 
qd.Execute 
 As QueryDef possuem as seguintes propriedades: 
 
 MaxRecords - fixa um limite que um QueryDef pode retornar 
 Name - Armazena e define o nome de um consulta 
 RecordsAffected - armazena o número de registros afetados por um comando Execute. 
 SQL - Retorna o comando SQL que originou a consulta. 
Microsoft Visual Basic – Trabalhando com banco de dados Access 53 
9. TRABALHANDO COM BANCO DE DADOS ACCESS 
 Aplicação que acessem bancos de dados são sempre requeridas seja no comércio em geral, 
como por grandes empresas e por que não pela agropecuária. Desta forma iremos detlhas 
inicialmente como acessar um banco de dados Access e os principais procedimentos, eventos que 
o DBEngine (Motor de banco de dados DAO 3.5) pode nos oferecer. 
 
9.1. Criando um Banco de Dados 
 Um banco de dados é composto principalmente por tabelas e dentro de cada tabela termos 
campos onde serão armazenados os dados. Estes campos podem ter tamanhocomo tipo de dado 
a ser armazenados diferentes. São eles: 
Tabela 15. Tipos de dados suportados pelo banco de dados Access 
Tipo de Dado Constante no Visual Basic Descrição 
Boolean dbBoolean Verdadeiro/Falso 
Byte dbByte Byte 0-255 
Integer dbInteger Inteiro 
Long dbLong Longo 
Currency dbCurrency Moeda 
Single dbSingle Simples 
Double dbDouble Duplo (negativo/positivo) 
Date/time dbDate Data ou hora 
Text dbText Texto até 255 caracteres 
Long Binary (Ole Object) dbLongBinary Objeto OLE (figura, arquivo, etc). 
Memo dbMemo Memorando texto longo 
GUID dbGUID Global Unique Identifier 
 
 Recomenda-se ao programador estruturar bem o banco de dados antes mesmo de escrever 
se quer uma linha de comando no Visual Basic, ou seja, lançar mão de um bom organograma para 
que o banco de dados seja bem estruturado e a partir daí começar a escrever as linhas de código 
que darão acesso, às informação, podendo o usuário inserir, editar e excluir os dados contidos na 
base de dados. 
 Existem vários materiais gratuitos na Internet sobre como estruturar um banco de dados e 
mesmo sobre o programa Microsoft Access, portanto é necessário que o programador entenda 
bem das estrutura do banco de dados que pretende trabalhar e com certeza entender sobre SQL 
pelo menos o básico. 
Codigo Disciplina
125 Português
254 Matemática
632 História do Brasil
Tabela Disciplinas
Codigo Nome
001 João da Silva
002 José Américo de Novaes
003 Marcelo Paes Gulart
Tabela Alunos
Ident IDAluno IDExame Nota
1 001 125 8,0
2 001 254 8,5
3 001 632 9,0
Tabela Exame
Banco de Dados
 
 
Figura 24. Organograma simples de um banco de dados. As linhas pontilhadas indicam o 
relacionamento entre as tabelas. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 54 
9.2. O Modelo DAO (Data Access Object) 
 O DAO (Data Access Object - Objeto de Acesso a Dados) é uma hierarquia de classe, 
equivalentes a uma visão logica de um sistema relacional de dados, utilizada para criara objetos de 
acesso. Como se trata de uma hierarquia, muitas dessas classes pertencem a uma coleção que, 
por sua, vez pertence a outras, como ilustra o a Figura 25. 
 O DBEngine possui uma coleção chamada Workspaces, que pode conter um ou mais 
objetos Workspace. Um objeto Workspace estabelace um área de trabalho – uma sessão – 
para um usuário, contendo m;utiplas bases ou conexões abertas e mecanismos para o 
gerenciamento de transações (uma série de alterações de dados inclusive de bases externas). 
Quando um objeto Workspace é referenciado pela primeira vez no código, automaticamente é 
criada uma área –padrão (DBEngine.Workspace(0)) e os valores para as propriedade Name 
(nome da "workspace") e UserName (nome do usuário) são, respectivamente, "#Default 
Workspace#" e "Admin". 
 Como a DAO é um conjunto de classes, para declarar os objetos no código nasta informar 
seu nome e o tipo ao qual se refere: 
Dim WS As Workspace 
Document
Container
Field Parameter
QueryDef
Field
RecordSet
Field
Relation
Field
Index Field
TableDef
Database
Group
User
User
Group
WorkSpace Error
DBEngine
 
Figura 25. Hierarquia de Classes DAO 
 
 Objetos membros de uma coleção são acessados através de índices (a partir de zero). 
Assim, por exemplo, para identificar de modo completo a coluna Código do primeiro TableDef 
numa coleção TableDefs do primeiro Database de uma coleção Databases do primeiro Workspace 
de uma coleção Workspaces do Dbengine, escrevemos: 
DBEngine.Workspaces(0).Databses(0).TableDefs(0).Fields("nome") 
 
 Este exemplo nos faz lembrar que, quando a referência a um membro for explícita , isto é, 
não desejarmos utilizar um índice da coleção, as duas formas seguintes são equivalentes: 
Tabela.Fields("Nome") 
Tabela.Fields!Nome 
 
 A programação com objetos de acesso a dados consiste na criação de variáveis a fim de 
configurar as propriedades e invocar os métodos desses objetos. Por exemplo: 
Dim Area AS Workspace, Banco As Database, Tabela As Recordset 
 
Set Area = DBEngine.Workspace(0) 
Set Banco = Area.OpenDataBase(App.Path & "\sample.mdb") 
Microsoft Visual Basic – Trabalhando com banco de dados Access 55 
Set Tabele = Banco.OpenRecordSet ("Clientes") 
 
Tabela.Index = "Nome" 
 
 O método OpenDatabase do objeto Area é invocado para efetuar a abertura da base de 
dadoa "sample.mdb" e fazer a atribuição da variável de objeto Banco. O mesmo acontece com o 
método OpenRecordSet de Banco: é utilizado para criar um "recordeset"(um conjunto de 
registros que representam uma tabela ou o resultado de uma consulta na base de dados) e fazer a 
atribuição à variável de objeto Tabela. Depois disso, podemos atribuir à proproedade Index do 
objeto Tabela o índice "nome"". 
 Para o programador poder trabalhar com banco de dados este deverá referenciar a 
biblioteca (DLL) que irá geenciar o banco de dados. A biblioteca mais recomendada é a MS DAO 
2.5/3.0 Compatibility Libary e MS DAO 2.5/3.5 Compatibility Libary, para evitar 
problemas de compatibilidade entre versões e abertura das bases de dados criadas pelo Visual 
Basic ou pelo MS Access. Caso o programador esteja trabalhancdo com VB6 pode realizar o 
download do MDAC v2.6 ou 2.7 (Microsoft Data Access Compnents v2.7) no site da Microsoft pois 
este pscote possui ao versão 3.6 do DAO que permite acesso à baco de dado do MS Access 2000 
Este pacote também é requerido para que se faça a instalação do Service Pack 5 do VB. Para 
referenciar uma destas bibliotecas, basta acessar o menu Project/Reference e selecionar a 
biblioteca desejada. 
9.3. Abrindo um Banco de Dados 
 É possível abrir ou acessar um banco de dados diretamente do motor (DBEngine) ou 
através do controle de dados DataControl, que é um controle padrão da biblioteca do Visual Basic. 
 Devemos fazer alguns comentários de acesso a banco de dados no que se refere ao tipo de 
acesso como mostra a tabela a seguir. 
9.3.1. Recordset 
9.3.1.1. dbOpenTable 
 Permite acesso a somente uma tabela do banco de dados e lhe permite trabalhar os dados. 
Não é possível utilizar uma instrução SQL para extrair dados, somente o nome da tabela. Por 
Exemplo: 
Dim tblPais As Recordset 
Set tblPais = Dbase.OpenREcordSet ("Paises", dbOpenTable) 
Código 15. Rotina para acesso a dados de uma tabela utilizando a instrução dbOpenTable 
9.3.1.2. dbOpenDynaset 
 Permite extrair dados de uma ou mais tabelas usando uma instrução SQL. O conjunto de 
dados retornado é atualizável. Um dynaset não consiste em dados reais, mas em vez disso é uma 
lista das referências para as localizações de dados dentro das tabelas. Tipicamente o programador 
utilizaria um dynaset em uma tela de edição onde os dados estão sendo apresentados para os 
usuários para adição, edição e exclusão. Por exemplo: 
Dim tblPais As Recordset 
Set tblPais = Dbase.OpenREcordSet ("SELECT * FROM Paises ORDER BY SIGLA", 
dbOpenDynaset) 
Código 16. Rotina para acesso a dados de uma tabela utilizando a instrução dbOpenDynaset, 
utilizando instruções SQL. 
 Como um dynaset consiste em uma coleção de referências e não de dados reais, ele não 
acessa os dados subjacentes até que um campo seja referenciado no aplicativo. Desse modo, o 
programador tema a certeza de que os dados apresentados são atuais, um detalhe importante em 
sistemas multiusuários. 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 56 
9.3.1.3. dbOpenSnapshot 
 Como um dynaset, um snapshot permite extrair dados de uma ou várias tabelas usando 
uma instrução SQL, mas o conjunto do resultado não é editável. Um snapshot consiste em uma 
cópia fixa dos dados reais que existem no banco de dados ao tempo que o Sanpshot é criado. 
Uma vez que uma snapshot seja criado, os dados retornados tornam-se independentes da cópia 
original no disco, e as referências subsequentes a um campo snapshot podem não 
necessariamente refletiros dados subjacentes mais atuais. Como os snapshots não precisam 
verificar o disco toda vez que um campo é referenciado, eles são consideravelmente mais rápidos 
que os dynasets. 
 É necessário ter cuidado ao utilizar um sanpshot. Como está extraindo os dados para a 
estação de trabalho, consideravelmente mais memória é utilizada do que ao criar um dynaset. 
Uma vez que a memória pode ficar toda ocupada, o VB começará a transferir dados para o disco. 
Neste ponto, a degradação no desempenho começará a ser sentida. Se o snapshot for grande o 
bastante e o espaço de transferência ficar todo ocupado, o aplicativo irá diparar mensagem de 
erro ou mesmo poderá ficar paralisado. 
 
9.3.1.4. dbOpenFowardOnly 
 Os recordsets do tipo Foward-only permitem que os usuários passem uma vez por um 
recordset. Esta opção é útil para as operações tais como quando se está carregando uma caixa de 
combinação (ComboBox) ou uma caixa de listagem (ListBox) com os dados de uma tabela como 
mostra o Código 17. 
Public Sub CarregaDados(oList As ListBox) 
Dim oDataBase As Database 
Dim snpDici As Recordset 
 
'oList é o nome do da caixa de listagem que irá receber os dados do 
recordset 
 
'Esta subrotina acessa a base de dados NWind.mdb padrão do VB 
Set oDataBase = DBEngine.OpenDatabase(App.Path & "\Nwind.mdb") 
 
'Esta sub-rotina assume uma tabela com pelo menos duas colunas: 
CompanyName e descr 
Set snpDici = oDataBase.CreateSnapshot("SELECT * FROM Customers ORDER BY 
CompanyName", dbForwardOnly) 
 
'Percorre o Snapshot em um laço e acrescenta os dados na caixa de 
listagem 
 
Do While Not snpDici.EOF 
 oList.AddItem snpDici!ContactName & vbTab & snpDici!CompanyName 
 snpDici.MoveNext 
Loop 
snpDici.Close 
Set snpcdic = Nothing 
End Sub 
 
'Para carregar os dados acrescente a seguinte linha de comando no evento 
Load 
Private Sub Form_Load() 
 CarregaDados Me.List1 
End Sub 
Microsoft Visual Basic – Trabalhando com banco de dados Access 57 
Código 17. Preenchendo uma caixa de listagem com dados de uma tabela utilizando o recordeset 
do tipo Foward-only. 
 
9.3.1.5. dbAppendOnly 
 Permite o usuário acrescentar novos registros, porém impede a edição e exclusão dos 
registros existentes, inclusive dos que ele adicionou. 
 
9.3.1.6. dbReadOnly 
 Permite somente a consulta de dados, ou seja, não é possível acrescentar, editar ou excluir 
dados. 
 
9.3.1.7. dbSeeChanges 
 Dispara um erro de execução se um usuário estiver alterando os dados que outro usuário 
estiver editando. Este tipo de recordset é ideal para rede multiusuários. 
 
9.3.2. Utilizando o Motor do Banco de Dados DBEngine 
 Para abrir um banco de dado é necessário referenciar a biblioteca DAO desejada. A sintaxe 
de abertura de um banco de dados Access é como segue: 
Set database = workspace.OpenDatabase (dbname, options, read-only, connect) 
 
Tabela 16. The OpenDatabase method syntax has these parts11. 
Part Description 
database An object variable that represents the Database object that you want to open. 
workspace Optional. An object variable that represents the existing Workspace object that 
will contain the database. If you don't include a value for workspace, 
OpenDatabase uses the default workspace. 
dbname A String that is the name of an existing Microsoft Jet database file, or the data 
source name (DSN) of an ODBC data source. See the Name property for more 
information about setting this value. 
options Optional. A Variant that sets various options for the database, as specified in 
Settings. 
read-only Optional. A Variant (Boolean subtype) value that is True if you want to open 
the database with read-only access, or False (default) if you want to open the 
database with read/write access. 
connect Optional. A Variant (String subtype) that specifies various connection 
information, including passwords. 
 
'This example uses the OpenDatabase method to open one Microsoft Jet 
database. 
 
Sub OpenDatabaseX() 
 Dim wrkJet As Workspace 
 Dim dbsNorthwind As Database 
 ' Create Microsoft Jet Workspace object. 
 Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet) 
 ' Open Database object from saved Microsoft Jet database 
 ' for exclusive use. 
 MsgBox "Opening Northwind..." 
 Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb", True) 
 
11 Extraído do Arquivo de Ajuda do Visual Basic v5.0 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 58 
End Sub 
Código 18. Rotina para abertura de uma base de dados MS Access12. 
 Caso a base de dados possuir uma senha esta deverá ser informada como segue o 
exemplo abaixo: 
Sub OpenDatabaseX() 
 Dim wrkJet As Workspace 
 Dim dbsNorthwind As Database 
 ' Create Microsoft Jet Workspace object. 
 Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet) 
 ' Open Database object from saved Microsoft Jet database 
 ' for exclusive use, don't read-only, and with password. 
 MsgBox "Opening Northwind..." 
 Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb", True, 
False,";PWD=senha") 
End Sub 
Código 19. Rotina para abertura de uma base de dados MS Access com senha. 
 
9.3.3. Utilizando o Controle DataControl 
 Para Ter acesso a um banco de dados através do controle Data, inicialmente o 
programador deverá inserir um deste controle no formulário. No evento Load as seguintes linhas 
de código deverão ser especificadas. 
 
Private Sub Form_Load() 
With Data1 
 .DatabaseName = App.Path & "\Nwind.mdb" 'Abre o banco de dados 
 .RecordSource = "Customers" 'Especifica qual a tabela o controle 
deverá acessar os dados 
End With 
End Sub 
Código 20. Rotina para acesso a um banco de dados do tipo MS Access. 
 
9.4. Acessando Dados de uma Tabela 
 O acesso a dados de uma determinada tabela pode ser feito através do controle 
DataControl ou através de uma instrução SQL. 
9.4.1. Acesso à Dados de uma Tabela Utilizando o DataControl 
 Como foi visto no tópico Utilizando o Controle DataControl, o acesso ao banco de 
dados e o acesso a uma tabela, porém não somente através de código o programador poderá 
especificar a tabela que o controle deverá acessar, pois na janela propriedades e na propriedades 
RecordSource este valor (nome da tabela) poderá ser especificado. Obviamente que este 
procedimento dá menor flexibilidade ao programador, caso ele queira alterar o valor, mas como 
quase tudo no Visual Basic é possível, caso você tenha especificado o valor e queira alterá-lo, 
basta modifica-lo via código, como é demonstrado no Código 20. 
 
9.4.2. Acesso à Dados de uma Tabela Utilizando Instrução SQL 
 O acesso a dados de uma tabela com certeza fica mais dinâmico quando lançamos mão das 
instruções SQL, portanto conhecimentos básicos desta linguagem são requeridos ara se trabalhar 
com banco de dado seja ele qual for. A flexibilidade de ordenar, agrupar e mesmo filtrar dados 
proporcionada pela SQL é sempre bem vinda em aplicação críticas e que usam banco de dados 
 
12 Extraído do Arquivo de Ajuda do Visual Basic v5.0 
Microsoft Visual Basic – Trabalhando com banco de dados Access 59 
robustos. Apesar do MS Access ter suas limitações, o uso de instruções SQL torna mais rápido o 
acesso aos dados. 
 É possível utilizar as instruções SQL em conjunto com o DataControl, como podemos 
verificar no Código 21. 
Private Sub Form_Load() 
With Data1 
 .DatabaseName = App.Path & "\Nwind.mdb" 'Abre o banco de dados 
 
'Especifica qual a tabela o controle deverá acessar os dados via 
instrução SQL 
'O asterisco(*) indica que todos os campos da tabela serão carregados, 
entretanto nunca especifique o asterisco juntamente com a instrução SQL 
GROUP BY, pois o motor do banco de dados exibirá um erro de sintaxe de 
instrução SQL. 
 .RecordSource = "SELECT * FROM Customers ORDER BY CompanyName" 
End With 
End Sub 
Código 21. Rotina para acesso a dados de uma tabela via instrução SQL 
 
9.5. Adicionando, Localizando, Editando e Excluindo Dados de uma Tabela 
 Agora vamos exemplificar comopodemos adicionar, edita r e excluir dados em uma tabela. 
 
9.5.1. Adicionado Dados 
 Para preparar a tabela para receber um novo registro é necessário que o número de 
registro de uma tabela seja verificado, evitando assim erros, no código que segue é possível 
verificar o teste do n.º de registro da tabela e em seguida através de estrutura de decisão 
especificar a linha de comando desejada (declaração) 
Public Sub AddNew() 
With Data1 'Inicia o laço with 
 'Verifica o número de registro da tabela 
 If .Recordset.RecordCount <> 0 Then 
 'Se for diferente de zero 
 'Move o registro para o último 
 .Recordset.MoveLast 
 'Prepara a tabela para adicionar um novo registro 
 .Recordset.AddNew 
 Else 'Senão 
 'Somente prepara a tabela para adicionar um novo registro 
 .Recordset.AddNew 
 End If 
End With 'Finaliza o laço with 
End Sub 
Código 22. Rotina para preparar uma tabela para receber novos dados (registro) 
 
 Obviamente que antes de iniciar uma rotina desta, o banco de dados e a tabela deveram 
ter sido especificados, pois se não este procedimento irá gerar um erro. 
 Com a utilização do DataControl é possível vinculara TextBox, ListBox, Label, ComboBox e 
outros controles que possuam as propriedade DataField e DataSource. A propriedade DataField 
especifica qual o campo da tabela o controle estará vinculado e a propriedade DataSource, 
especifica a qual controle DataControl o objeto está vinculado, ou seja, se o programador 
especifica o caminho do banco de dados e o nome da tabela em um controle Data (nome=Data1)e 
em seguida especifica as propriedades de uma caixa de texto, DataSource como Data1 e DataField 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 60 
como Code, significa que a caixa de texto estará ligada aos dados da tabela do banco de dados 
especificada e exibirá os dados do campo Code. Vale lembrar que estas propriedades poder ser 
alterada via código, ou seja, em Run-Time. 
 Após o preparo da tabela para receber o novo registro é necessário ao final salva-lo, pois 
por se só o método AddNew, não garante a adição no banco de dados. 
 Para adicionar um registro é sempre necessário iniciar o método AddNew e em seguida o 
método UpdateRecord, como pode ser visto no Código 23. 
Public Sub SaveReg () 
 'Salva fisicamente os dados no registro preparado pelo método 
AddNew 
 Data1.UpdateRecord 
 
 'Cria um Bookmark (marca), onde após o registro ser salvo o banco 
de dados aponta para o último registro modificado, neste caso o registro 
recém adicionado 
 Data1.Recordset.Bookmark = Data1.Recordset.LastModified 
End Sub 
Código 23. Rotina para gravar dados em uma tabela do banco de dados. 
 
9.5.2. Localizando Dados 
 Antes de editar um dado é necessário localiza-lo de forma precisa e rápida, nesta hora 
entra a perspicácia do programador. 
 Existem duas formar de localizar um determinado registro dentro da tabela. São elas via as 
instrução do próprio DataControl ou via SQL. Vale lembrar que as instruções do SQL dá ao 
programador maior flexibilidade para trabalhar do que as instruções do DataControl. 
 Para localizar um determinado dado o programador deve ter em mente quais o campos 
poderão ser utilizados para localizar, ou seja, numa tabela com 20 campos, é necessário que 
alguns deles seja utilizado como fontes de pesquisa. Para exemplificar, digamos que destes 20 
campos escolhemos 4 (codigo, produto, tipo, fornecedor). Assim o Código 24 exemplifica de forma 
simples como localizar os dados através do DataControl e SQL. 
'Localizando dados através do DataControl 
Public Sub Localiza(sDado As String) 
 Data1.Recordset.FindFirst " campo ='" & sDado & "'" 
End Sub 
 
'Localizando dados através da SQL 
Public Sub Localiza (sDado As String) 
Dim rsLocal As Recordset 
 Set rsLocal = DB.OpenRecordset _ 
 ("SELECT * FROM tabela WHERE campo ='" & sDado & "'" _ 
 , dbOpenSnapshot) 
End Sub 
 
'No local onde está escrito campo você pode substitui pelo verdadeiro 
nome do campo, obviamente deve-se tomar cuidado no momento de especificar 
este nome pois se o campo não existir o Visual Basic gera um erro "Item 
Not found in this collection" 
 
Código 24. Rotina para localizar dados dentro de uma tabela, utilizando as instruções do 
DataControl e instruções SQL. 
 
Microsoft Visual Basic – Trabalhando com banco de dados Access 61 
 O DataControl possui ainda outras variantes para pesquisa, são elas: FindLast, FindNext, 
FindPrevious. 
 FindFirst – localiza o primeiro registro de acordo com o parâmetro passado; 
 FindLast – localiza o último registro de acordo com o parâmetro passado; 
 FindNext – localiza o registro seguinte ao primeiro de acordo com o parâmetro passado; 
 FindPrevious – localiza o registro anterior ao localizado de acordo com o parâmetro passado. 
 Outra instrução que pode ser utilizada pelo DataControl é Seek, porém este tipo de 
instrução somente é aceito em RecordSet do tipo Table. Outro inconveniente de te método e que 
o índice deve ser indicado na propriedade Index do DataControl. 
 A instrução de consulta da SQL também possui flexibilidade, por exemplo, filtrar todos os 
produtos com um determinado código. Neste momento lançamos mão da instrução LIKE. Como 
mostra ao Código 25. 
Public Sub Localiza (sDado As String) 
Dim rsLocal As Recordset 
 Set rsLocal = DB.OpenRecordset _ 
 ("SELECT * FROM tabela WHERE campo LIKE'" & sDado & "'" _ 
 , dbOpenSnapshot) 
End Sub 
Código 25. Rotina para filtrar os dados de uma tabela 
 
 Dentro da instrução LIKE é possível utilizar caracteres curinga, tais como: *, ?, %, _. 
Entretanto o trema (') e restringido por esta instrução e gera um erro quando por exemplo o 
registro a ser localizado tiver a seguinte forma: D'Avila. 
 
9.5.2.1. Exemplo de como Localizar Dados13 
 Para este exemplo você precisará dos seguintes objetos num formulário: 
Controle Propriedade Atributo 
OptionButton 
Name: 
Caption: 
Value: 
OpLTitulo 
L&ocalizar no Título 
True 
OptionButton 
Name: 
Caption: 
Value: 
OpLDica 
Lo&calizar no texto da dica 
False 
ComboBox Name: cboLocal 
Treeview Name: tvwLocal 
ImageList Name: imgTVW 
CommandButton Name: Caption: 
cmdSearch 
&Localizar 
 
Private Sub cmdSearch_Click() 
On Error GoTo Err_Local 'Se houver algum erro o programa irá redirecionar 
para Err_Local 
Dim xNode As Node 'Declara a variável xNode como Node 
Dim rsTitle As Recordset 'Declara a variável rsTitle como RecordSet 
 
If Trim(cboLocal.Text) = Empty Then 
'Se não tiver nenhuma palavra digitada a seguinte mensagem 
 MsgBox "Digite com pelo menos uma palavra para iniciar a pesquisa 
no banco de dados!", vbExclamation, Titulo 
 Exit Sub 
 
13 Código extraído do programa Lizaro Visual Basic Dicas v3.0 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 62 
End If 
Me.tvwLocal.Clear 'Limpa os nodes do Treeview 
cboLocal.AddItem cboLocal.Text 'Adiciona a palavra digitada no List do 
ComboBox 
 
'Localiza o título a partir de pelo menos uma palavra digitada no 
ComboBox. 
If Me.opLTitulo.Value Then 
'O caractere curinga asterisco(*), permite localizar a palavra em aulauer 
parte do campo titulo 
 Set rsTitle = DB.OpenRecordset("SELECT * FROM tbdicas WHERE titulo 
LIKE '*" & Me.cboLocal.Text & "*'") 
Else 
'Essa opção somente permite localizar o titulo exatamente como ele foi 
inserido na tabela 
 Set rsTitle = DB.OpenRecordset("SELECT * FROM tbdicas WHERE dica 
LIKE '" & Me.cboLocal.Text & "'") 
End If 
If rsTitle.RecordCount <> 0 Then 
 'Se registro(s) que satisfação a pesquisa fome localizado 
 'Os titulo serão inserido num Treeview 
'Inicia o lação até que o último registr que satisfaça a consulta sej 
alcançado 
 Do Until rsTitle.EOF 
 Set xNode = tvwLocal.Nodes.Add(, , , rsTitle!Titulo) 
 xNode.Image = "dica" 'Na ImageList deverá conter uma imagem 
(ícone) com o valor key igual a dica 
 xNode.SelectedImage = "vis" 'na ImageList deverá conter uma 
imagem (ícone) com o valor key igual a vis 
 rsTitle.MoveNext'Move o registro para o próximo 
 'finaliza o laço qunado o final da pesquisa/consulta for alcançada 
 Loop 
Else 
 'Caso nenhum registro for encontrado é exibida a seguinte mensagem 
 MsgBox "A(s) palavra(s) '" & cboLocal.Text & "'" & vbCrLf & _ 
 "não foi(am) localizada(s) no banco de dados!", vbExclamation, 
Titulo 
End If 
Exit Sub 
Err_Local: 
 Call SaveErros 'Chama uma rotina para exibir erros 
End Sub 
Código 26. Rotina para localiza dados dentre de uma tabela, utilizando SQL e em seguinda 
preenchendo uma TreeView com os dados encontrados. 
 Uma sugestão para o layout do exemplo anterior é mostrado na Figura 26. 
Microsoft Visual Basic – Trabalhando com banco de dados Access 63 
 
Figura 26. Layout para pesquisa de dados do programa Lizaro Visual Basic Dicas v3.0 
 
9.5.3. Editando Dados 
 Sempre necessitamos alterar dados dentro de uma tabela, pois os dados são dinâmicos ou 
mesmo pelo fato do digitador ter errado alguma coisa na hora de inserir as informações, portanto 
é sempre bem vinda a opção editar dados em um projeto que possuam conexão com banco de 
dados. O Código 27 ilustra de forma simples uma rotina de como editar um registro de uma 
tabela. 
Public Sub EditReg() 
 Data1.Recordset.Edit 
End Sub 
Código 27. Rotina para editar um registro gravado em uma tabela do banco de dados. 
 
9.6. Compactando e Recuperando um Banco de Dados 
 Sempre que valores são inseridos ou excluídos das tabelas de um banco de dados, espaços 
vazios acabam sendo criados, assim para limpara este espaço vazios é necessário compactar o 
banco de dados para tal. Outro recurso que o DBEngine (motor do banco de dados) oferece é a 
recuperação de um banco de dados. Esta opção funciona quando o banco de dados está 
corrompido por algum motivo, assim ele não poderá ser acessado pelo DBEngine e 
consequentemente pelo programa. Assim está duas rotina são bem vindas no início da aplicação 
que trabalha com banco de dados, obviamente recupera-se e depois compacta-se. 
 Outro detalhe é para estas operações funcionarem sem erro a base de dados não poderá 
está sendo utilizada por outro usuário, ou seja, deverá estar fechada. 
 Devemos ressaltar que a compcatação e restauração (reparação) abordada aqui somente 
servem somente para banco de dados MS Access e recomendamos uma leitura mais detalhada da 
ajuda do Visual Basic para melhor esclarecimento de todas as opções oferecidas por estes 
métodos. 
 
9.6.1. Compactando Banco de Dados 
 Agora veremos duas rotinas para compactar o banco de dados com senha e sem senha, 
como segue abaixo lembre-se que o banco de dados deverá esta fechado. 
 
Sub Compacta_Database() 
Dim dbsNorthwind As Database 
'Fecha o banco de dados para evitar erros 
dbsNorthwind.Close 
 'Verifica se já existe um arquivo com o nome do arquivo a ser 
compactado 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 64 
 If Dir("NwindBackup.mdb") <> "" Then Kill "NwindBackup.mdb" 
 
 'Cria uma versao compactada do banco de dados 
 DBEngine.CompactDatabase "Northwind.mdb", "NwindBackup.mdb", 
dbLangGeneral 
 Set dbsNorthwind = OpenDatabase("NwindBackup.mdb") 
End Sub 
Código 28. Rotina para compactar um banco de dados sem senha.14 
 
Sub Compacta_Database() 
Dim dbsNorthwind As Database 
'Fecha o banco de dados para evitar erros 
dbsNorthwind.Close 
 'Verifica se já existe um arquivo com o nome do arquivo a ser 
compactado 
 If Dir("NwindBackup.mdb") <> "" Then Kill "NwindBackup.mdb" 
 
 'Cria uma versao compactada do banco de dados 
 DBEngine.CompactDatabase "Northwind.mdb", "NwindBackup.mdb", 
dbLangGeneral,,";pwd=senha" 
 Set dbsNorthwind = OpenDatabase("NwindBackup.mdb") 
End Sub 
Código 29. Rotina para compactar um banco de dados com senha.15 
 
9.6.2. Recuperando Banco de Dados 
Sub Repara_Database() 
Dim erro_Loop As Error 
 
If MsgBox("Deseja reparar o arquivo Northwind ?", _ 
 vbYesNo) = vbYes Then 
 On Error GoTo Erro_Repara 
 DBEngine.RepairDatabase "Northwind.mdb" 
 On Error GoTo 0 
 MsgBox "Fim Do processo de reparação !" 
End If 
Exit Sub 
Erro_Repara: 
 
For Each erro_Loop In DBEngine.Errors 
MsgBox " A reparação falhou...!" & vbCr & "Erro numero: " & 
errLoop.Number & _ 
vbCr & erro_Loop.Description 
Next erro_Loop 
End Sub 
Código 30. Rotina para recuperar um banco de dados corrompido.16 
 
9.7. Salvando e Recuperar Figuras num Banco de Dados em Campo OLE 
 Sem pre existe a seguinte pergunta "E se eu quiser salvar uma figura dentro de uma banco 
de dados é pssível?" A resposta é sim porém a mão de obra pode ser grande até se obter um 
 
14 Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0 
15 Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0 
16 Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0 
Microsoft Visual Basic – Trabalhando com banco de dados Access 65 
código limpo e funcional, abaixo exemplificaremom como salvar e recuperaruma figura de um 
campo OLE de banco de dados. Entretanto inserir figuras dentro de uma tabela (banco de dados) 
sempre deixa o acesso a este banco de dados muito lento, primciplamente se os recursos da 
máquina for escassos. Desta forma prefira somente salvar o caminho da figura no HD (HardDisk 
Disco Rígido) da figura dentro de um campo na tabela e no momento que a aplicação requerer a 
figura ela irá buscar no caminho físico. Bom mas já que a dúvida surege eis abaixo a rotina limpa e 
funcional para armazenar e recuperar uma imagem a partit de um banco de dados. 
 
Dim dbTest As Database 
Dim rstAlbum As Recordset 
Dim FileLen&, X%, lngOffset&, Chunks%, lngTotalSize& 
Dim Arr() As Byte 
Const ArrSize As Integer = 16384 
 
Sub ReadPictureFromDb() 
On Error Resume Next 
Open "d:\picture.gif" For Binary Access Write As #1 
 lngTotalSize = rstAlbum!Picture.FieldSize 
 Chunks = lngTotalSize \ ArrSize 
 Fragment = lngTotalSize Mod ArrSize 
 ReDim Arr(ChunkSize) 
 Arr() = rstAlbum!Picture.GetChunk(lngOffset, ArrSize) 
 Put #1, , Arr() lngOffset = lngOffset + ArrSize 
 
 With rstAlbum 
 Do While lngOffset < lngTotalSize 
 Arr() = !Picture.GetChunk(lngOffset, ArrSize) 
 Put #1, , Arr() 
 lngOffset = lngOffset + ArrSize 
 Loop Close #1 
Close 
 End With 
End Sub 
 
Sub SavePictureToDb() 
rstAlbum.AddNew 
Open "c:\picture.gif" For Binary Access Read As #1 
 FileLen = LOF(1) Chunks = FileLen \ ArrSize Fragment = FileLen Mod 
ArrSize 
 ReDim Arr(Fragment) 
 With rstAlbum Get #1, , Arr() 
 !Picture.AppendChunk Arr() 
 ReDim Arr(ChunkSize) 
 For I = 1 To Chunks 
 Get DataFile, , Arr() 
 !Picture.AppendChunk Arr() 
 Next 
Close #1 .Update 
End With 
End Sub 
 
Private Sub Form_Load() 
Set dbTest = OpenDatabase("d:\db1.mdb", True) 
Set rstAlbum = dbTest.OpenRecordset("select * from Album", dbOpenDynaset) 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 66 
SavePictureToDb 
ReadPictureFromDb 
Set rstAlbum = Nothing 
dbTest.Close 
End Sub 
Código 31. Rotina para salvar e recuperar uma figura dentro dum campo OLE de um banco de 
dados17. 
 
 
9.8. Acessando Outros Bancos de Dados 
 Com o Microsoft® JET é possível acessar e atualizar outras bases de dados além do 
Access. As bases suportadas pelo MSJET são: FoxPro (versões 2.0, 2.5, 2.6, 3.0 e DBC), dBase 
(versões III, IV e 5.0), MS Excel (versão 3.0, 5.0, 6.0, 7.0, 8.0, ou posteriores), Lotus ( WKS, 
WK1, WK3 e WK4), HTML, MS Exchange e arquivos ASCII (texto, separados por ponto e vírgula). 
Entretanto alguns métodos aplicados ao banco de dados Access, não podem ser aplicados a estas 
bases de dados, tais como: CompactDatabase, CreateDatabase, CreatField, CreateQueryDef, 
RepairDatabase e os objetos container, Document, QueryDef e Relation. 
 
9.8.1. Banco de Dados dBase 
 Este tipo de banco de dados pode ser aberto indicando o caminho ("path") através do 
método OpenDatabase, além do caminho é preciso indicar o tipo de acesso e o tipo de versão do 
banco de dados. 
 No exemplo abaixo mostra o acesso a um banco dedados chamado "Registros.dbf", 
localizado no diretório "C:\Aplicação\Bdados". 
Dim dBase as Database, Table as Recordeset 
Set dbase =DbEngine.OpenDatabase("C:\Aplicação\Bdados", False, False, 
"dBase III;") 
Set Table = dBase.OpenRecordeset("Regitros") 
'O argumento dBase III pode ser substituído por dBase IV ou dBase 5.0, de 
acordo com a versão do banco de dados. 
Código 32. Rotina para acesso à banco de dados dBase versão III. 
 O MS Jet considera o caminho do bando de dados como o próprio e o banco de ados como 
se fosse uma tabala. 
 
Dim dBase as Database, Table as Recordeset 
Set dbase =DbEngine.OpenDatabase("C:\Aplicação\Bdados", False, False, 
"FoxPro 2.5;") 
Set Table = dBase.OpenRecordeset("Regitros") 
'O argumento FoxPro 2.5 pode ser substituído por FoxPro 2.0, FoxPro 2.6 
ou FoxPro 3.0 de acordo com a versão do banco de dados. 
Código 33. Rotina para acesso à banco de dados FoxPro versão 2.5. 
 
Dim dBase as Database, Table as Recordeset 
Set dbase =DbEngine.OpenDatabase("C:\Aplicação\Bdados", False, False, 
"Excel 4.0;HDR=NO") 
Set Table = dBase.OpenRecordeset("Regitros#XLS") 
'O argumento Excel 4.0 pode ser substituído por Excel 3.0, Excel 5.0, 
Excel 6.0, Excel 7.0, etc. de acordo com a versão do banco de dados. 
 
17 Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0 
Microsoft Visual Basic – Trabalhando com banco de dados Access 67 
'O argumento HDR, especifica se a primeira expressão da planulha deve ser 
('HDR = YES') ou não ('HDR = NO') considerada como cabecálho das colunas, 
ou seja, se haverá ou não os nomes das colunas 
Código 34. Rotina para acesso à banco de dados Excel versão 4.0. 
 
Dim dBase as Database, Table as Recordeset 
Set dbase =DbEngine.OpenDatabase("C:\Aplicação\Bdados", False, False, 
"Text;") 
Set Table = dBase.OpenRecordeset("Regitros") 
'Note que o argumento Text não especifica versão, pois o arquivo de texo 
não necessita deste tipo de parámentro para ser reconhecido pelo MSJet ou 
por qualquer editor de textos. 
'O arquivo contendo os dados, ou seja, que será a tabaka da base de dados 
deverá possuir a extensão 'TXT' 
Código 35. Rotina para acesso à banco de dados Texto. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 68 
 
 
Microsoft Visual Basic – Trabalhando com o Controle MSChart no Visual Basic 69 
10. TRABALHANDO COM O CONTROLE MSCHART NO VISUAL BASIC 
 
 Em aplicação com banco de dados é sempre requerido que os dados sejam apresentados 
na forma de relatórios ou gráfico, tamanaha é a facilidade de análise deste através destas duas 
ferramentas. Neste capítulo iremos abordar a utilização do controle Microsoft Chart v5.0. 
 Com este controle é possível gerar gráficos de barras, linha e pizza (torta), de oforma 
simples ou tridimensional. 
 
Figura 27. Controle Microsoft Chart 5.0 
 Os dados que irão ser plotados no grafico tem origem em um banco de dados, ou mesmo 
com entrada manual, entretanto os valores inciais são aleatórios e são passíveis de alteração em 
'Design Time' 
 Através da propriedade ChartType, é possível (Design ou Run Time), especificar o tripo de 
gráfico que será exibido. Assim a tabela seguinte detalha os valores, as contantes e o tipo de 
gráfico exibido. 
Tabela 17. Tipo de gráfico a serem exibidos pela propriedade Chartype, suas constante e 
valores18. 
Descrição Valor Constante 
Barra 3D 0 VtChChartType3dBar 
Barra 2D 1 VtChChartType2dBar 
Linha 3D 2 VtChChartType3dLine 
Linha 2D 3 VtChChartType2dLine 
Área 2D 4 VtChChartType3dArea 
Área 3D 5 VtChChartType2dArea 
Degrau 3D 6 VtChChartType3dStep 
Degrau 2D 7 VtChChartType2dStep 
Combinação 3D 8 VtChChartType3dCombination 
Combinação 2D 9 VtChChartType2dCombination 
Pizza ou Torta 2D 14 VtChChartType2dPie 
Dispersão 2D 16 VtChChartType2dXY 
 
 A sequência de dados de um gráfico (R1 a R5 na figura anterior) é definida pela 
propriedades RowCount, enquanto a quantidade de colunas, pela propriedade ColumnCount. 
No gráfico do tipo torta (pizza), RowCount representa a quantidade de "tortas" apresentadas e 
ColumnCount, a quantidade de fatias. 
 
18 Extraído em parte do arquivo de ajuda do Micotsoft Visual Basic 6.0™ 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 70 
 Além das janelas de propreidades do VB, podemos abrir uma caixa de diálogo de 
propriedades do controle MSChart, como em todos a maioria dos controle ActiveX. 
 
10.1. Criando um Gráfico Manualmente19 
 O exemplo que se segue irá demonstrar como criar um gráfico manualmente, inclusive a 
configuração do gráfico. Obviamente que tais configurações poderiam ser feitas em Design Time, 
entretanto como a configuraçã a ser ealizada é simples daremos preferência pela configuração via 
código, mostrando as propriedades do controle. 
 Inicie um novo projeto no VB e em seguida insirra um controle Microsoft Chart Control e 
por fim insira o código abaixo para platar os dados no gráfico. 
Private Sub Form_Load() 
'Determinado uma varíavel array 
Dim Matriz(1 To 4, 1 To 4) 
 
With MSChart1'Inicia o laço With 
 
'Configura as propriedades do controle 
 .ShowLegend = True 'Exibir Legenda 
 .Title = "Receitas/Despesas" 
 .Plot.Axis(VtChAxisIdX).AxisTitle.Text = "Meses" 
 .Plot.Axis(VtChAxisIdY).AxisTitle.Text = "Valor em Reais ($)" 
 
'Determina os valores da Matriz 
 Matriz(1, 2) = "Receita" 
 Matriz(1, 3) = "Despesas" 
 Matriz(1, 4) = "Média" 
 Matriz(2, 1) = "Abril" 
 Matriz(3, 1) = "Maio" 
 Matriz(4, 1) = "Junho" 
 Matriz(2, 2) = 500 
 Matriz(2, 3) = 400 
 Matriz(2, 4) = (Matriz(2, 2) + Matriz(2, 3)) / 2 
 Matriz(3, 2) = 625 
 Matriz(3, 3) = 500 
 Matriz(3, 4) = (Matriz(3, 2) + Matriz(3, 3)) / 2 
 Matriz(4, 2) = 300 
 Matriz(4, 3) = 700 
 Matriz(4, 4) = (Matriz(4, 2) + Matriz(4, 3)) / 2 
 
'Plota os dados no gráfico 
 .ChartData = Matriz 
 
End With 'Finaliza o laço With 
End Sub 
Código 36. Código para criação de um gráfico de recietas/despesas e média dutrante três meses. 
 
 A figura abaixo demonstra como fica o gráfico após as linhas inseridas no evento Load do 
From. 
 
19 Consulta ao livro Lima (1998) 
Microsoft Visual Basic – Trabalhando com o Controle MSChart no Visual Basic 71 
 
Figura 28. Gráfico de receitas/despesas de abril a junho apresentando a média de cada mês. 
 Outro exemplo de gráfico manual poderá ser criado com exibição da estatística pode ser 
visto no exemplo abaixo e figura seguinte: 
Private Sub cmdDesvio_Click() 
'Exibe a linha de desvio padrão 
MSChart1.Plot.SeriesCollection.Item(1).StatLine.Flag = VtChStatsStddev 
End Sub 
 
Private Sub cmdMaximo_Click() 
'Exibe a linha de valor máximo 
MSChart1.Plot.SeriesCollection.Item(1).StatLine.Flag = VtChStatsMaximum 
End Sub 
 
Private Sub cmdMedia_Click() 
'Exibe a linha de valor médio 
MSChart1.Plot.SeriesCollection.Item(1).StatLine.Flag = VtChStatsMean 
End Sub 
 
Private Sub cmdMinimo_Click() 
'Exibe a linha de valor mínimo 
MSChart1.Plot.SeriesCollection.Item(1).StatLine.Flag = VtChStatsMinimum 
End Sub 
 
Private Sub cmdRegressao_Click() 
'Exibe a linha de regressão 
MSChart1.Plot.SeriesCollection.Item(1) _ 
 .StatLine.Flag = VtChStatsRegression 
End Sub 
 
Private Sub Form_Load() 
'Determinado uma varíavel array 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 72 
Dim Matriz(1 To 6, 1 To 2) 
With MSChart1 
'Configurando as propriedades do controle 
 .ShowLegend = False 'Oculta Legenda 
 .Title = "Receitas/Despesas" 
 .Plot.Axis(VtChAxisIdX).AxisTitle.Text = "Meses" 
 .Plot.Axis(VtChAxisIdY).AxisTitle.Text = "Valor em Reais ($)" 
 .Plot.AutoLayout = True 
'Determinando os valores da Matriz 
 Matriz(1, 1) = "Janeiro" 
 Matriz(2, 1) = "Fevereiro" 
 Matriz(3, 1) = "Março" 
 Matriz(4, 1) = "Abril" 
 Matriz(5, 1) = "Maio" 
 Matriz(6, 1) = "Junho" 
 Matriz(1, 2) = 345 
 Matriz(2, 2) = 978 
 Matriz(3, 2) = 410 
 Matriz(4, 2) = 1520 
 Matriz(5, 2) = 200 
 Matriz(6, 2) = 280 
'Modifica o tipo dográfico 
 .chartType = VtChChartType2dLine '3 – Grafico de linha 2D 
'Plota os dados no gráfico 
 .ChartData = Matriz 
End With 
Código 37. Códigos para criação de um gráfico manualmente e xibição de estatísticas. 
 
 
Figura 29. Gráfico criado com dados de entrada manual, exibindo as estatísticas. 
 
Microsoft Visual Basic – Trabalhando com o Controle MSChart no Visual Basic 73 
 
10.2. Acessando Dados de um Banco de Dados para Plotar um Gráfico 
 A maneira simples de criar um gráfico manualmente, não é refletida para acesso de dados 
num banco de dados, por exemplo, muitas linhas de códigos poderão ser utilizadas. Apesar da 
entrada manual dos dados ser fácil algumas aplicações poderão requerer que estes dados tenham 
origem de uma ou mais tabelas ou mesmo consultas de um banco de dados. O exemplo que se 
segue será utilizado um banco de dados Microsoft Access® 97. 
 Para o exemplo que se segue será necessário já ter criado a consulta 'cnsUF', agrupando 
por Estado e contando os nomes dos pesquisadores. 
Public Function Grafico(sCampo As String) 
Dim rsGrp As Recordset 
Dim rsDados As Recordset 
Dim qry As QueryDef 
Dim reg As Integer 
Dim i As Integer 
If sCampo = "estado" Then 
 Set qry = DB.QueryDefs("cnsUF") 
 Set rsGrp = qry.OpenRecordset 
 rsGrp.MoveLast 
 rsGrp.MoveFirst 
 reg = rsGrp.RecordCount 
 msGrafic.ColumnCount = 1 
 msGrafic.Title = "Gráfico de pesquisadores por Estado" 
 msGrafic.RowCount = reg 
 msGrafic.Visible = True 
 While Not rsGrp.EOF() 
 For i = 1 To reg 
 msGrafic.Row = i 
 If Not IsNull(rsGrp!estado) Then 
 msGrafic.RowLabel = rsGrp!estado 
 Else 
 msGrafic.RowLabel = "Não especificou" 
 End If 
 msGrafic.Data = rsGrp!contardenomecompleto 
 rsGrp.MoveNext 
 Next 
 Wend 
End If 
End Function 
Código 38. Código para extrair dados de um banco de dados Access 97, listando o número de 
pesquisadores por Estado20. 
 
 
20 Código extraído do programa Entomologistas do Brasil Manager v3.1 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 74 
0
5
10
15
20
25
30
0
5
10
15
20
25
30
Gráfico de pesquisadores por Estado
 
Figura 30. Gráfico plotado a partir dos dados de um banco de dados Access 97 
 
Microsoft Visual Basic – Tratando erros em sua aplicação 75 
11. TRATANDO ERROS EM SUA APLICAÇÃO 
 É sempre bem vindo tratar erros dentro de uma aplicação, porque nenhun software está 
livre de Bug. Assim iremos dar uma pequena idéia de como montar uma rotina de tratamento de 
erro padrão para toda a aplicação. 
 
11.1. Os Objeto Err e Error do Visual Basic 
 O Visual Basic tem seu próprio mecanismo de erros que trata os problemas à medida que 
eese ocorrem. Quando um erro é gerado no VB, as infirmações sobre o erro são armazenadas no 
objeto Err (e o objeto Error se for um erro DAO). As propriedades desses objetos podem ser 
verificadas para determinar qual tipo de erro ocorreu. Alguns erros são resuperáveis, outros não. 
 
11.1.1. Propriedades dos ObjetosErr e Error 
 As propriedades dos objetos Err e Error armazenam dados sobre o erro mais recente que 
ocorreu. Esses objetos podem ser usados para personalizar um arotina de tratamento de erro que 
guiará os usuários nos problemas. As propriedades dos objetos Err e Error incluem: Description, 
HelpFile, HelpContext, Number, Source e LastDLLError. 
 
11.1.1.1. Propriedade Description 
 A propriedade Description armazena a descrição definida do sistema de um erro que 
acabu de ocorrer. Essa descrição é normalmente uma explicação técnica do problema voltada para 
os programadores, de modo que é melhor não exibir a propriedades sozinh para o usuário. Uma 
explicação mais detalhada é muito conveniente. 
 
11.1.1.2. Propriedades HelpFile/HelpContext 
 A propriedades HelpFile armazena o nom do arquivo de ajuda onde pode ser encontrada 
assistência sobre um erro. Esse arquivo de ajuda será carregado pelo sistema da ajuda quando a 
tecla F1 for pressionada. HelpContext é uma referência de páginado arquivo de ajuda que pode 
ser usada para levar o usuário diretamente à página onde o texto especificado de ajuda está 
localizado. 
 
11.1.1.3. Propriedades Number 
 A propriedade Number armazena um valor numérico que identifica, de forma exclusiva, 
um erro dentro da coleção de erros definidos pelo Visual Basic. Por exemplo, o erro divisão por 
zero retorna o número 11. 
 
11.1.1.4. Propriedades Source 
 Indica o nome do objeto que gerou um erro. 
 
11.1.1.5. Propriedades LastDLLError 
 Retorna o código de erro produzido por uma função DLL (Dynamic Link Libary- Biblioteca 
de Vínculo Dinâmico). Se a função falhar, um código de erro é armazenado na propriedade 
LastDLLError, que pode então ser consultada para determinar o tipo ou causa da falha. 
 
11.1.2. Métodos do Objeto Err 
 Como mancionado anteriormente os objetos Err e Error compartilham propriedades mas 
não métodos. Os dois métodos a seguir – Clear e Raise –somente se aplica ao objeto Err. 
 
11.1.2.1. Método Clear 
 O método Clear renicializa todas as propriedades do objeto Err para uma condição de 
nenhum erro. Todos os valores numéricos são definidos como zero e as propriedades do texto 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 76 
como strings de tamanho zero. Clear dever ser chamada sempre que uma condição de erro for 
tratada pela rotina de tratamento de erros para evitar que o mesmo erro seja disparado duas 
vezes. 
 
11.1.2.2. Método Raise 
 Raise gera um erro de execução. Ele é usado para testar as condições de erro. 
 
11.2. Erros Relacionado a Banco de Dados 
 Relacionar aqui todos os erros tratáveis do Visual Basic seria difícil, mas vamos tentar listar 
os principais fornecendo o seu número e descrição, vamos lá: 
 Para tratamento de erros do banco de dados é recomendada a leitura do arquivo 
JETERR35.HLP. O caminho deste arquivo no disco rígido em geral é "C:\Arquivos de 
programas\DevStudio\VB\Help\jeterr35.hlp". Caso você possua o Microsoft® Office em português 
instalado ou somente o Microsoft® Access, não há necessidade de traduzir as mensagens, leas 
estãolistadas em português. 
 Abaixo segue os principais erros relacionados à banco de dados 
Naturalmente você deve estar preparado para prever os erros potenciais e planejar o seu 
tratamento, para isso devera conhecer os principais erros relacionados ao seu ambiente de 
trabalho. 
 
Tabela 18. Erros genéricos relacionados à operação de banco de dados 
Número Mensagem 
3005 Database Name' isn't a valid database name. 
3006 Database 'name' is exclusively locked. 
3008 Table 'name' is exclusively locked. 
3009 Couldn't lock table 'name'; currently in use. 
3010 Table 'name' already exists. 
3015 'Index name' isn't an index in this table. 
3019 Operation invalid without a current index. 
3020 Update Or CancelUpdate without AddNew Or Edit. 
3021 No current record. 
3022 Duplicate value In index, primary key, Or relationship. Changes were 
unsuccessful. 
3023 AddNew Or Edit already used. 
3034 Commit Or Rollback without BeginTrans 
3036 Database has reached maximum size. 
3037 Can't open any more tables or queries. 
3040 Disk I/O Error during read. 
3044 'Path' isn't a valid path. 
3046 Couldn't save; currently locked by another user. 
 
Tabela 19. Erros relacionados a bloqueio de registros 
Número Mensagem 
3027 Can't update. Database or object is read-only. 
3158 Couldn't save record; currently locked by another user. 
3167 Record is deleted. 
3186 Couldn't save; currently locked by user 'name' on machine 'name'. 
3187 Couldn't read; currently locked by user 'name' on machine 'name'. 
3188 Couldn't update; currently locked by another session on this machine. 
3189 Table 'name' is exclusively locked by user 'name' on machine 'name'. 
Microsoft Visual Basic – Tratando erros em sua aplicação 77 
Número Mensagem 
3197 Data has changed; operation stopped. 
3260 Couldn't update; currently locked by user 'name' on machine 'name'. 
3261 Table 'name'is exclusively locked by user 'name' on machine 'name'. The 
database Is opened by user 'name' on machine 'name'. 
 
Tabela 20. Erros relacionados a Permissões 
Número Mensagem 
3107 Record(s) can't be added; no Insert Data permission on 'name'. 
3108 Record(s) can't be edited; no Update Data permission on 'name'. 
3109 Record(s) can't be deleted; no Delete Data permission on 'name'. 
3110 Couldn't read definitions; no Read Definitions permission for table Or query 
'name'. 
3111 Couldn't create; no Create permission for table or query 'name'. 
3112 Record(s) can't be read; no Read Data permission on 'name'. 
 
11.3. Erros Relacionado a Arquivo21 
 Os principais erros relacionados aos arquivos são: 
 
Número Mensagem 
52 Nome ou número de Arquivo inválido 
53 Caminho do arquivo Errado. Arquivo não encontrado 
54 Modo de arquivo errado 
55 Arquivo aberto por outro aplicativo 
57 Erro de dispositivo Entrada e Sáida do disco (HardDisk) 
58 Arquivo já existente 
59 Tamanho incorreto de registro 
61 Disco cheio. Espaço insuficiente para gravar o arquivo ou outra coisa 
62 A entrada ultrapassou o final do arquivo. EOF foi utilizado incorretamente 
63 Número de registro errado 
64 Nome de Arquivo errado as regras de nomenclatura de arquivo não foram 
respeitadas 
67 Vários arquivo abertos ao mesmo tempo 
68 Dispositivo não disponível. Erro de leitura de mídia ou disquete não inserido no 
drive 
70 Permissão negada ou o disco ao qual você deseja acessar está protegido contra 
gravação ou o arquivo está aberto por outra aplicação 
71 O disco não está pronto ou disquete não inserido no drive 
72 Erro de mídia de disco. Disquete ou disco rígido com problemas 
74 Permisão negada para renomear o arquivo entre unidades diferentes 
75 Erro de acesso oa arquivo ou caminho do mesmo 
76 Caminho não encontrado. Arquivo não existente ou caminho incorreto. 
 
11.4. Rotina para Tratamento de Erros 
 Agora que os principais erros foram apresentados, iremos criar uma rotina de como 
interceptar erros e salva-los em um arquivo para posterior consulta pelo suporte técnico ou pelo 
próprio programador, para verificar onde o erro foi ocasionado e sanar os bugs. Obviamente o 
Visual Basic exibe as mensagens de erro em inglês, portanto traduzi-las é uma mão de obra 
inacabável. 
 
 
21 Consulta ao Visual Basic 5 - Completo e Total - Gary Cornell, Makron Books - 1998 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 78 
'Em um módulo insira a seguinte rotina 
Public Sub Erros_App() 
'Inicia um laço de decição Select Case e a cada erro interceptado um 
amensagem será exibida ao usuário 
Select Case Err.Number 
 Case 3020 
 MsgBox "Nenhum registro foi inserido inicialmente!", 
vbExclamation, Titulo 
 Case 3022 
 MsgBox "Este registro já foi cadastrado!", vbExclamation, 
Titulo 
 Case 3040 
 MsgBox "Erro durante a leitura do Disco!", vbExclamation, 
Titulo 
 Case 3058 
 MsgBox "O campo primário está vazio!", vbExclamation, Titulo 
 Case 3008 
 MsgBox "O Banco de dados está bloqueado exclusivamente!", 
vbExclamation, Titulo 
 Case 3009 
 MsgBox "Não é possível fechar a tabela; atualmente em uso!", 
vbExclamation, Titulo 
 Case 3010 
 MsgBox "A tabela que você está tentando criar já existe!", 
vbExclamation, Titulo 
 Case 524 
 MsgBox "As mudanças que você requeriu para a tabela não foram 
bem sucedidas porque elas criariam valores de duplicados no índice, chave 
primária, ou relação. Mude os dados no campo ou campos que contenham 
dados duplicados. E tente novamente.", vbExclamation, Titulo 
 Case 3211 
 MsgBox "O gerenciador de base de dados não pode fechar a 
tabela porque ela já está em uso por outra pessoa ou processo.", 
vbExclamation, Titulo 
 Case 52 
 MsgBox "Nome ou número de Arquivo inválido.", vbExclamation, 
Titulo 
 Case 53 
 MsgBox "Caminho Do arquivo Errado - Arquivo não encontrado.", 
vbExclamation, Titulo 
 Case 54 
 MsgBox "Modo de arquivo errado.", vbExclamation, Titulo 
 Case 55 
 MsgBox "Arquivo aberto por outro aplicativo.", vbExclamation, 
Titulo 
 Case 57 
 MsgBox "Erro de dispositivo Entrada e Sáida do disco 
(HardDisk).", vbExclamation, Titulo 
 Case 58 
 MsgBox "Arquivo já existente.", vbExclamation, Titulo 
 Case 59 
 MsgBox "Tamanho incorreto de registro. ", vbExclamation, 
Titulo 
 Case 61 
Microsoft Visual Basic – Tratando erros em sua aplicação 79 
 MsgBox "Disco cheio - Espaço insuficiente para gravar o 
arquivo.", vbExclamation, Titulo 
 Case 62 
 MsgBox "A entrada ultrapassou o final do arquivo - EOF foi 
utilizado incorretamente utilizado.", vbExclamation, Titulo 
 Case 63 
 MsgBox "Número de registro errado.", vbExclamation, Titulo 
 Case 64 
 MsgBox "Nome de Arquivo errado - As regras de nomenclatura de 
arquivo não foram respeitadas. ", vbExclamation, Titulo 
 Case 67 
 MsgBox "Vários arquivo abertos ao mesmo tempo.", 
vbExclamation, Titulo 
 Case 68 
 MsgBox "Dispositivo não disponível - Erro de leitura de mídia 
ou disquete não inserido no drive.", vbExclamation, Titulo 
 Case 70 
 MsgBox "Permissão negada - ou o disco ao qual você deseja acessar 
está protegido contra gravação ou o arquivo está aberto por outra 
aplicação.", vbExclamation, Titulo 
 Case 71 
 MsgBox "O disco não está pronto ou disquete não inserido no 
drive.", vbExclamation, Titulo 
 Case 72 
 MsgBox "Erro de mídia de disco - disquete ou disco rígido com 
problemas.", vbExclamation, Titulo 
 Case 74 
 MsgBox "Permisão negada para renomear o arquivo entre unidades 
diferentes.", vbExclamation, Titulo 
 Case 75 
 MsgBox "Erro de acesso ao arquivo ou caminho do mesmo.", 
vbExclamation, Titulo 
 Case 76 
 MsgBox "Caminho não encontrado - Arquivo não existente ou 
caminho incorreto.", vbExclamation, Titulo 
 Case Else 
 MsgBox "Erro: '" & Err.Number & "'" & vbCrLf _ 
 & vbCrLf & "Descrição: " & vbCrLf & Err.Description, vbCritical, 
Titulo 
End Select 
'Chama a rotina SaveErros para salvar os erros num arquivo específico 
 Call SaveErros (Err.Description, Err.Number) 
End Sub 
 
'Rotina para salvar os error num arquivo específico 
Public Sub SaveErros(Optional erDesc As String, Optional erNum As 
Integer, Optional erSrc As String) 
On Error Resume Next 
Dim lArqErro As Long 
lArqErro = FreeFile 
Dim fnum As Integer 
Dim lines As Integer 
Dim a_line As String 
Dim eMsg As String 
If erDesc = Empty Then erDesc = Err.Description 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 80 
If erNum = 0 Then erNum = Err.Number 
If erSrc = Empty Then erSrc = Err.Source 
 
eMsg = "Descrição: " & erDesc & vbCrLf & _ 
 "Número: " & erNum & vbCrLf & _ 
 "Origem: " & erSrc & vbCrLf & _ 
 "Erro externo nº: " & erNum & vbCrLf & _ 
 "Data e Hora: " & Date & " - " & Time & vbCrLf & _ 
 "«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»" 
 
ArqErr = sPath & "Error.dat" 
Open ArqErr For Append As #lArqErro 
Print #lArqErro, eMsg 
Close #lArqErro 
MsgBox "Erro: '" & Err.Number & "'" & vbCrLf & vbCrLf & _ 
 "Descrição: " & Err.Description & vbCrLf & _ 
 "Origem: " & erSrc, vbExclamation, Titulo 
End Sub 
 
'Agora a rotina para chamar o erro 
'Para chamar os erros e exibi-los em português 
Call Erros_App e depois salva-los 
'Para Salvalos direto e exibir a mensagem original do Visual Basic 
Call SaveErros, , "Erro ao tentar exportar dados em: " & Me.Name 
Código 39. Rotina completa para interceptação, exibição e armazenamento de erro de uma 
aplicação22 
 
 
22 Código extraídos do programa Entomologistas do Brasil® v1.1 
Microsoft Visual Basic – Distribuindo sua aplicação 81 
12. DISTRIBUINDO SUA APLICAÇÃO 
 O Visual Basic 5 e 6 vem com ferramentas próprias cada um para distribuir o aplicativo 
criado. Porém estas ferramentas possuem muitas restrições que podem ser samada com a 
utilização por exemplo, do Inno Setup Compiler (www.innosetup.com) de autoria de Jordan Rusel 
e possui código aberto, porém o código foi criado em Borland Delphi. A Microsoftainda liberou 
uma ferramentas de distribuição de aplicativo é o Microsoft Windows Installer hoje na versão 1.1. 
e é freeware. 
 Existe uma série de ferramentas para distribuição de aplicativos, tais como: Install Wizard; 
Setup Generator, Turbo SFX, Winn-Zip Self Extractor, InstallKit, Install Wise, CreateInstall, entre 
outros. 
 
12.1. Compilando o Projeto 
 Para compilar o projeto, basta clicar em File|Make. Selecione o local a ser compilado e 
clique em OK. 
 
12.2. Setup wizard (Visual Basic 5.0) 
 Apesar de ser restrito o Setup Wizard dá conta de distribuir aplicação mais simples, 
entretanto as telas do programa exibem o texto em inglês, mas é possível traduzir o arquivo 
Setup.rc e compila-lo novamente para Setup.res (arquivo de recurso) e recompilar o projeto 
Setup1.vbp que se encontra em "C:\Arquivos de programas\DevStudio\VB\setupkit\setup1\". 
 Para maiores detalhes recomenda-se verificar a documentação disponível em 
www.macoratti.net. 
 
 
Figura 31. Tela inicial do Setup Wizard que acompanha o Visual Basic 5.0. 
 
12.3. Package and Deployment Wizard (Visual Basic 6.0) 
 Apaser de ser muito parecido com o Setup Wizard, a interface do P & D Widzard é bem 
diferente. Algumas funções foram alteradas, melhorads e outras adicionadas, para melhorar a 
distribuição dos aplicativos, mas a Microsoft não acertou desta vez ainda. Acredito que o Microsoft 
Windows Instaler seja melhor que o Setup Wizard e o P & D Wizard. Para maiores detalhes sobre 
visite www.macoratti.net. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 82 
 
Figura 32. Tela inicial do Package and Deployment Wizard que acompanha o Visual Basic 5.0 
 
12.4. Inno Setup Compiler 
 É possível fazer o download do Inno Setup em www.innosetup.com. A versão 3.0.18 tem 
aproximadamente 2.0 MB. Enquanto escrevo este tutorial, versões mais aprimoradas estão sendo 
desenvlvida. 
 Após fazer o download basta clicar no arquivo Self-extract que o programa se instalará em 
poucos segundos. 
 A utilização do sistema é simples e bem intuitiva, você basicamente irá gerar um arquivo de 
script que conterá toda a informação para instalar o seu sistema. Como estamos focando 
aplicações Visual Basic, você deverá informar quais arquivos deseja instalar (nem tudo é perfeito). 
No final você irá compilar o seu arquivo de script e em seguida já pode testar a sua instalação. 
 O Inno Setup é muito rápido e enxuto. Vale a pena ver se você se adapta a sua filosofia, 
afinal não custa nada. 
12.4.1. Dicas para Visual Basic 
12.4.1.1. Gerando as Mensagens de Instalação em Português. 
 Para gerar as mensagens de instalação você não precisa alterar nada, basta apenas fazer o 
download do arquivo já traduzido no endereço www.innosetup.com/files/istrans, procure em 
Language por Português e clique duas vezes na versão 3.x, o nome do arquivo baixado será 
BrazilianPortuguese.isl. Após o download do arquivo para fazer com que o compilador o utilize no 
script altere a seção [Setup] como abaixo: 
[Setup] 
MessagesFile=compiler:MyTranslation.isl 
 É só substituir o nome MyTranslation.isl para o nome Do arquivo traduzido - 
BrazilianPortuguese.isl. 
 
12.4.1.2. Instalando Arquivos OCX. 
 Para instalar arquivos OCX , informe o nome Do arquivo no script como a seguir. (Como 
exemplo estamos instalando a Comctl32.ocx).Obs: A linha abaixo é uma linha única. 
Microsoft Visual Basic – Distribuindo sua aplicação 83 
Source: "ComCtl32.ocx"; DestDir: "{sys}"; CopyMode: 
alwaysskipifsameorolder; Flags: restartreplace sharedfile regserver 
 
12.4.1.3. Instalando Arquivos do Visual Basic 
 Para a versão 3.0 e anteriores apenas copie o arquivo VBRUN???.DLL apropriado para o 
diretório System Do usuário. 
 Para a versão 5.0 e 6.0 você vai precisar usar os arquivos Do sistema. Para fazer o 
download clique no links abaixo: 
 VB 5.0 (Service Pack 3) system files - vb5sp3sys.zip [1.1 MB] (Visite o site para realizar os 
downloads) 
 VB 6.0 (Service Pack 5) system files - vb6sp5sys.zip [1.1 MB]. Source of files: Q290887 
(Visite o site para realizar os downloads) 
 Após fazer o download e descompactar os arquivos acima , copie e cole As linhas abaixo na 
seção [Files] Do script: 
 
; begin VB system files 
; (Note: Scroll To the right To see the full lines!) 
Source: "c:\vbfiles\stdole2.tlb"; DestDir: "{sys}"; CopyMode: 
alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall 
sharedfile regtypelib 
 
Source: "c:\vbfiles\msvbvmXX.dll"; DestDir: "{sys}"; CopyMode: 
alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall 
sharedfile regserver 
 
Source: "c:\vbfiles\oleaut32.dll"; DestDir: "{sys}"; CopyMode: 
alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall 
sharedfile regserver 
 
Source: "c:\vbfiles\olepro32.dll"; DestDir: "{sys}"; CopyMode: 
alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall 
sharedfile regserver 
 
Source: "c:\vbfiles\asycfilt.dll"; DestDir: "{sys}"; CopyMode: 
alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall 
sharedfile 
 
Source: "c:\vbfiles\comcat.dll"; DestDir: "{sys}"; CopyMode: 
alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall 
sharedfile regserver 
; End VB system files 
 
12.4.1.4. Usando o SETUP.LST Gerado pelo P & D Wizard. 
 Você pode usar o P & D Wizard para gerar o arquivo Setup.lst e a seguir aceitar os 
arquivos de sistema Do VB indicados na seção [Bootstrap Files] ( Não precisa incluir o arquivo 
VB6STKIT.DLL ). A seguir você vai criar entradas de seções [Files] para todas As linhas da seção 
[Setup1 Files] alterando segundo a tabela abaixo: 
 
Tabela 21. Strings utilizadas pelo arqivo Setup.lst as strings equivalntes no Inno Setup Compiler 
Seção no Setup.Lst Alterar para no arquivo de script do Inno Setup 
$(AppPath) = {app} Constant 
$(WinSysPathSysFile) = {sys} Constant 
$(WinSysPath) = {sys} Constant 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 84 
Seção no Setup.Lst Alterar para no arquivo de script do Inno Setup 
$(DLLSelfRegister) = regserver flag 
$(Shared) = sharedfile flag 
$(TLBRegister) = regtypelib flag 
$(MSDAOPath) = {dao} Constant 
$(EXESelfRegister) = use the [Run] section For "MyApp.exe /RegServer" use the 
[UninstallRun] section For "MyApp.exe /UnregServer 
 
12.4.1.5. Instalando ADO, DCOM e MDAC 
 Para saber como instalar ADO e DCOM e MDAC faça o download do arquivo 
VB_DCOM_MDAC.iss (visite o site para fazer o download) depois é só copiar e colar para o seu 
arquivo de script. 
 
 
Figura 33. Figura do editor de script do Inno Setup Compiler v2.0. 
 
12.5. IsTool 
 Quem inicialmente tem contato com Inno Setup logo toma um susto pois escrever código 
por código de um script de distribuiçao de aplicação não é mole, pois eis que entra o IsTool um 
programa FrontEnd que escreve os scripts de forma intuitiva e com a inteface de janelas 
(windows). Assim fica mais fácil criar os scripts.E a partir da versão 3.0 o FrontEnd, possui suporte 
a script de libguagem, ou seja, ele pode falar Português (BR), basta instalar o script da linguagem 
ou traduzir o original em Inglês. 
 A documentação (em Inglês) tanto do Inno Setup compiler e do ISTool são bem completas 
e simples de entender. Caso ainda fique alguma dúvida o usuário poderá saná-la no site do 
fabricante. 
Microsoft Visual Basic – Distribuindo sua aplicação 85 
 
Figura 34. Interface do programa ISTool 3.0 em português (BR) 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 86 
Microsoft Visual Basic – Trabalhando com API's 87 
13. TRABALHANDO COM API'S 
 As API's são nada mais que Interface de Programação de Aplicativo (Application 
Programming Interface), que vem junto com o sistema operacional, ou seja, são linhas de 
comandos contidas nas bibliotecas e outros arquivos do sistema. 
 Junto com o Visual Basic 5 e 6 vem o aplicativo API Viewer, que fornece as Constantes, 
Declarações e Tipos. Vale a pena utilizar está ferramenta é de grande utilidade.Outra opção muito mais plausível e fazer o download do programa APIGuide no site 
www.allapi.net e verificar que nele além das API's conhecidas existem algumas não documentadas 
pela Microsoft e o melhor de tudo é que este programa é gratuito (freeware), pequeno e bem 
elaborado onde além da sintaxe das API's os autores exemplificam cada uma. Outra saída e 
realizar o download do banco de dados de dicas Lizaro Visual Basic Dicas no site da Lizaro Soft 
(www.lizarosoft.cjb.net) e apesar de não possuir tantas API's quanto o anterior, mas possui várias 
outras dicas que pode ser bastante utilizadas. 
 Detalhar API's seria uma tarefa muito árdua, pois as documentações da Microsoft contendo 
as API do sistema operacional Windows giram em torno de cinco livros ou mais de 
aproximadamente 1000 páginas cada, portanto a Internet e sua maravilhosa capacidade de 
difusão de informações poderá ajudá-lo a resolver as dúvidas mais freqüentes no que diz respeito 
a Visual Basic, pois existem uma centena de milhares de páginas de Visual Basic espalhadas pelo 
mundo, portanto prepare-se para navegar horas a fio atrás de informações para sanar suas 
dúvidas e adquirir novos conhecimentos desta que é a linguagem de programação mais utilizada 
no mundo. 
 
13.1. Abrindo arquivo de Ajuda através de API 
 Para abrir arquivos de ajuda é de praxe que utilizemos o conhecido controle ActiveX 
Commom Dialog, porém se você não quiser utiliza-lo, basta inserir a seguinte API num módulo. 
 
Public Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd 
As Long, ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData 
As Long) As Long 
Public Const HELP_CONTEXT = &H1 'Exibe o tópico de ajuda pelo Número ID 
Public Const HELP_HELPONHELP = &H4 'Exibe a ajuda do Windows de como 
utilizar ajuda 
Public Const HELP_INDEX = &H3 'Exibe o Índice da Ajuda 
Public Const HELP_QUIT = &H2 'Termina a juda 
Public Const HELP_MULTIKEY = &H201& 'Procura por palavras-chave na tabela 
alternativa da ajuda 
 
Public Sub Exibir_AjudaAjuda(X As Form) 
Dim Hlp As Long 
 Hlp = WinHelp(X.hwnd, "C:\Windows\Windows.hlp", HELP_HELPONHELP, 
CLng(0)) 'Exibe o arquivo de ajuda sobre ajuda do Windows 
End Sub 
 
'No evento Click do Form digite: 
Private Sub Form_Click() 
 Exibir_AjudaAjuda Me 
End Sub 
 
'Para finalizar o arquivo de ajuda juntamente com o aplicativo insira as 
seguinte linhas de código no evento Unload do From: 
 
Private Sub Form_Unload(Cancel As Integer) 
Dim Hlp As Long 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 88 
 Hlp = WinHelp(Me.hwnd, "Arquivo de ajuda", HELP_QUIT, CLng(0)) 
End Sub 
Código 40. Exemplo de como abrir um arquivo de Ajuda através de API 
 
13.2. Abrindo o Browser ou Editor de e-mail padrão 
 Sempre necessitamos acessar a Internet através de nosso aplicativo seja através do 
Browser ou através do editor de e-mail padrão, portanto veja como é simples acessar a Internet 
através desta API. 
'Para abrir o browser e email faça o seguinte 
'Num módulo insira a seguinte API 
Public Declare Function ShellExecute Lib "shell32.dll" Alias 
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal 
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As 
String, ByVal nShowCmd As Long) As Long 
'No evento Click do controle (Botão) associado digite 
'Abre o browser 
Call ShellExecute(0, vbNullString, "http://www.lizarosoft.hpg.com.br", 
vbNullString, vbNullString, 0) 
'ou para abrir o editor de e-mail 
Call ShellExecute(0, vbNullString, "mailto:saclizarosoft@ieg.com.br", 
vbNullString, vbNullString, 0) 
Código 41. Exemplo de como abrir o Browser ou Editor de e-mail padrão 
 
13.3. Encontrando o diretório de instalação do Windows e de Sistema 
 Em geral o diretório de instalação do Windows é 'C:\Windows', e o do sistema é 
'C:\Windows\System', no entanto a sempre alguém que prefere dar uma cara nova a seu 
computador e muda o diretório de instalação e você programador poderá ficar a ver navios se 
especificar numa linha de comando o diretório padrão da instalação. Para evitar este tipo de coisa 
existe a seguinte API: 
'Num módulo insira as seguintes API's 
 'Diretório de Instalação do Windows 
Public Declare Function GetWindowsDirectory Lib "kernel32" Alias _ 
"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As 
Long 
 'Diretório do sistema "System" 
Public Declare Function GetSystemDirectory Lib "Kernel32" Alias _ 
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As 
Long 
 
 'Em seguida escreva as seguintes funções 
Public Function QualDirWin() As String 
Dim Buf As String 
Dim Rc As Long 
 Buf = Space$(255) 
 Rc = GetWindowsDirectory(Buf, 255) 
If Rc > 0 Then 
 Buf = Left$(Buf, Rc) 
 QualDirWin = UCase(Buf) & "\" 
Else 
 QualDirWin = "" 
End If 
End Function 
 
Microsoft Visual Basic – Trabalhando com API's 89 
Function SysDir() As String 
Dim Buf As String 
Dim Rc As Long 
Buf = Space$(255) 
Rc = GetSystemDirectory(Buf, 255) 
If Rc > 0 Then 
 Buf = Left$(Buf, Rc) 
 SysDir = UCase(Buf) & "\" 
 Else 
 SysDir = "" 
End If 
End Function 
 
 'Num evento Load do Form insira as seguinte linhas de comando 
Private Sub Form_Load() 
 Me.Print "Diretório de Instalação do Windows: " & QualDirWin 
 Me.Print "Diretório de Sistema do Windows: " & SysDir 
End Sub 
Código 42.Exemplo de como Encontrar o diretório de instalação do Windows e de Sistema 
 
13.4. Drive do CD 
 Se a aplicação necessita buscar informações a partir do driver do CD-Rom e você especifica 
a letra padrão como D:, pode entrar em uma enrascada. Pois a maquina onde o aplicativo está 
rodando poderá ter de uma a vários discos rígidos. Desta forma a API seguinte resolve o 
problema. 
'Detectando o drive do CD. Num módulo insira as seguintes API's e os 
seguintes códigos: 
Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" 
(ByVal nDrive As String) As Long 
Public Declare Function GetLogicalDriveStrings Lib "kernel32" Alias 
"GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As 
String) As Long 
Public Const DRIVE_REMOVABLE = 2 
Public Const DRIVE_FIXED = 3 
Public Const DRIVE_REMOTE = 4 
Public Const DRIVE_CDROM = 5 
Public Const DRIVE_RAMDISK = 6 
 
Function StripNulls(startStrg$) As String 
 Dim c%, item$ 
 c% = 1 
Do 
 If Mid$(startStrg$, c%, 1) = Chr$(0) Then 
 item$ = Mid$(startStrg$, 1, c% - 1) 
 startStrg$ = Mid$(startStrg$, c% + 1, Len(startStrg$)) 
 StripNulls$ = item$ 
 Exit Function 
 End If 
 c% = c% + 1 
Loop 
End Function 
 
 Num Form insira um Label com o nome Label1 e insira as seguintes 
linhas de comando: 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 90 
Private Sub Form_Load() 
Dim r&, allDrives$, JustOneDrive$, pos%, DriveType& 
Dim CDfound As Integer 
 allDrives$ = Space$(64) 
 r& = GetLogicalDriveStrings(Len(allDrives$), allDrives$) 
allDrives$ = Left$(allDrives$, r&) 
 Do 
pos% = InStr(allDrives$, Chr$(0)) 
If pos% Then 
 JustOneDrive$ = Left$(allDrives$, pos%) 
 allDrives$ = Mid$(allDrives$, pos% + 1, Len(allDrives$)) 
 DriveType& = GetDriveType(JustOneDrive$) 
 
 If DriveType& = DRIVE_CDROM Then 
 CDfound% = True 
 Exit Do 
 End If 
End If 
Loop Until allDrives$ = "" Or DriveType& = DRIVE_CDROM 
If CDfound% Then 
 Label1.Caption = " O drive de CD-ROM no sistema é drive " & 
UCase$(JustOneDrive$) 
Else 
 Label1.Caption = " Nenhum drive de CD-ROM foi encontrado no 
sistema. " 
End If 
End Sub 
Código 43. Exemplo de como detecta r aletra do drive do CD 
 
13.5. Ecrevendo e Obtendo Informações de um Arquivo INI 
 Mesmo podendo utilizar o registro do Windows para armazenar informações da aplicação, 
convenhamos que inserir muitas informações no registro poderá deixar o sistema Operacional 
lento. Para resolver este problema podemos lançar mão da antiga e bastante utilizada tecnologia 
de arquivos de configuração, muito utilizada nos aposentado Windows 3.11 e Windows 95 e ainda 
utilizada largamente no Windows 9x, NT, ME e XP. 
 
'Exampleby Robin (rbnwares@edsamail.com.ph) 
'Visit his site at http://members.fortunecity.com/rbnwares1 
'In Form 
Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias 
"WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString 
As String, ByVal lpFileName As String) As Long 
 
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias 
"GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal 
lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As 
String) As Long 
Private Sub Form_Load() 
 ' We will create a new section in the INI-file 
 ' It's output will be: 
 ' 
 ' [SectionName] 
 ' Key=Value 
 ' 
Microsoft Visual Basic – Trabalhando com API's 91 
 ' Note that used this ONLY if you are creating a new 
 ' section on the INI file, unless you wanted to erase 
 ' its existing keys. 
 Call WritePrivateProfileSection("SectionName", "Key=Value", 
App.Path & "\sample.ini") 
 Dim szBuf As String * 255 
 Call GetPrivateProfileSection("SectionName", szBuf, 255, App.Path & 
"\sample.ini") 
 MsgBox szBuf 
End Sub 
Código 44. Exemplo de como escrever e obter informações de um arquivo INI. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 92 
 
Microsoft Visual Basic – Criando arquivos de ajuda basedo em arquivos HTML 93 
14. CRIANDO ARQUIVOS DE AJUDA BASEDO EM ARQUIVOS HTML 
 Um sistema de ajuda bem elaborado possibilita menores gastos com suporte técnico, pois 
resulta num maior esclarecimento de dúvidas por parte do usuário, além do que um arquivo de 
ajuda é sempre bem vindo, tornando seu software mais profissional. 
 Vamos ver como criar um arquivo de ajuda usando arquivos HTML (Hyper Text markup 
language) e integrá-los com suas aplicações em Visual Basic de forma clara e objetiva. Se você 
ainda não tem idéia de como é a interface de um arquivo de ajuda de uma olhada no arquivo de 
ajuda do Internet Explorer v4.0 ou superior, ou mesmo no arquivo de ajuda do Windows 98. 
 Inicialmente será necessário criar os arquivos HTML, para isto você poderá usar, o 
FrontPage Express, HotMetal, Microsoft Word, OpenOffice, StarOffice e até mesmo o Bloco de 
Notas. Você irá necessitar baixar o arquivo de instalação do HTML Help Workshp, no site da 
Microsoft. 
 Para que um arquivo de ajuda contendo página da internet é necessário que na máquina 
onde o arquivo de ajuda irá ser executado possua o Internet Explorer 4.x ou superior. Além dos 
componentes necessários para execução do arquivo de ajuda. Desta forma aos realizar o 
download do programa existe um pacote pré-pronto com todos os componentes básico, exceto o 
Internet Explorer. O arquivo em geral possui o nome hhupd.exe, possui 465KB e fica localizado no 
diretório redist, dentro do diretório de instalação do programa. 
 Para você ter uma idéia os tipos de arquivos usados no HTML HELP são: 
Extensão do Arquivo Tipo do Arquivo 
HHP Projeto do HELP 
HHC Tabela de conteúdo 
HHK Índice 
CHM Help Compilado 
HTM Os arquivos HTM 
H Arquivo de Cabeçalho. 
 
14.1. Criando um Arquivo de Ajuda 
 Antes de qualquer coisa, você deverá planejar bem os arquivos HTML e o arquivo de ajda 
final, para que o seu projeto de ajuda não dê dor de cabeça. 
 Inicie o HTML Help Workshop e escolha File|New , na janela de diálogo a seguir selecione 
a opção Project e clique OK. (Figura abaixo). 
 
Figura 35.Janela para iniciar um novo arquivo. 
 Após escolher a opção Projeto, o Wizard para novo projeto é iniciado, agora você segue os 
seguintes passos para as próximas telas do Wizard: 
Tela 1 - Clique em avançar. 
Tela 2 - Informe o nome do diretório e o nome do seu projeto. No exemplo D:\Temp\InsectA.HHP. 
(Figura abaixo) 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 94 
 
Figura 36. Tela do Wizard para especificar o caminho e o nome do projeto. 
 Verifique que a figura anterior possui um botão 'Browse...', ele poderá ser utilizado para 
abrir um arquivo de ajuda preexistente. 
 Clique em avançar e selecione a opção HTML Files (.htm) e novamente clique em avançar. 
E será exibida a tela para que você possa adicionar os arquivo de HTML que irão fazer do seu 
arquivo de ajuda (Figura abaixo). 
 
Figura 37. Listagem de arquivos HTML, que irão fazer parte do arquivo de ajuda. 
 Clique em avancar e após clique em concluir. Será exibida a janela do projeto de ajuda que 
foi criado (Figura abaixo). 
Microsoft Visual Basic – Criando arquivos de ajuda basedo em arquivos HTML 95 
 
Figura 38. Janela do projeto recém criado, com as opções e listagem de arquivos criados. 
 
14.1.1. Arquivo de Conteúdo 
 Agora iremos criar um arquivo de conteúdo onde serão listadas as opções de acesso aos 
arquivos HTML compilados, dentro do arquivo de ajuda. Para realizar esta tarefa clique na aba 
Contents a seguir selecione 'Create a new contents file' (Figura abaixo). 
 
Figura 39. Janela de opção para criação ou abertura de uma rquivo de conteúdo. 
 Digite o nome do arquivo de conteúdo e salve-o. A seguir a aba Contents estará em 
branco, clique no botão 'Insert a heading' (2º botão) na barra de ferramntas lateral da aba 
contents e será exibida a janela para criação do arquivo de conteúdo (Figura abaixo). 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 96 
 
Figura 40. Janela de adição de tópicos e de ligamento (link) com o arquivo correspondente. 
 Para criar o link com o arquivo HTML, clique no botão 'Add...' e em seguida será exibida a 
lista de arquivos HTML adicionados ao projeto da ajuda (Figura abaixo). 
 
Figura 41. Janela de "linkagem" de arquivo ao tópico do conteúdo. A listagem é exibida por título 
do arquivo. 
Microsoft Visual Basic – Criando arquivos de ajuda basedo em arquivos HTML 97 
 
Figura 42. Aba de Contents, com sua aparência final listando todos os tópicos criados. 
 
14.1.2. Arquivo de Índice 
 A aba seguinte é a Index, que cria um índice do arquivo de ajuda, possibilitando o usuário 
localizar um tópico por palavras-chaves, está opção é sempre bem vinda em qualquer sistema de 
ajuda. Desta forma, evite deixar de lado esta opção. 
 Para criar um índice clique na aba Index e em seguida escolha a opção 'Create a new 
index file', salve o arquivo e em seguida clique no botão 'Insert a keyword'(2º botão) da barra 
de ferramentas lateral, para exibir a janela de link de arquivo, semelhante a janela de link do 
arquivo de conteúdo. Digite o título a ser exibido no arquivo de ajuda. A listagem de arquivos que 
serão ligados (linkados) ao tópico indica que é possível ligar vários arquivos a um só tópico. Está 
mesma opção é válida para a contrução do arquivo de conteúdos (contents). Repita a operação de 
adição de tópicos tantas vezes necessários para adicionar ao seu arquivo de índice os tópicos a 
sere exibidos. 
 
14.1.3. Aparência da Janela do Arquivo de Ajuda 
 Para definir a aparência, clique na aba 'Project' e em seguida clique no ícone 
'Add/ModifyWindows Definitions' (4º botão) e informe o nome da janela (no exemplo 
usaremos Main)do arquivo de ajuda e aseguir configure ao seu modo. Para maiores informações 
acesse o arquivo de ajda do programa. 
 
14.1.4. Configurar Sensibilidade ao Contexto 
 Quando estamos navegando por telas de um programa em geral podemos acessar a ajuda 
deste e ir direto ao tópico pertinente à aquela tela. Entretanto no projeto da ajuda tais tópicos 
deverão ser especificados para que o usuário ao clicar na tecla F1, o tópico possa ser exibido. 
 Vamos configurar o projeto para tornar o arquivo de ajuda sensível ao contexto. Para tal 
clique no botão 'HTML Help API Information' da barra de ferramentas da aba 'Project', após a 
exibição da tela clique no botão 'Header file...', para adicionar um arquivo de cabeçalho, que 
deverá ser criado em um editor de textos comum (Bloco de Notas) e deverá possui a extenção 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 98 
".h", isso mesmo com uma letra. Em seguida adicione ao projeto. É possíveladiconar vários 
arquivos de cabeçalho a um mesmo projeto da ajuda. 
 A estrutura do arqivo de cabeçalho deverá ser a seguinte: 
#define IDH_Main 10001 
#define IDH_Menu 10002 
#define IDH_Metodos 10003 
#define IDH_Info 10004 
Código 45. Estrutura de uma arquivo de cabeçalho, contendo os tópicos sensíveis ao contexto e 
sua identificação numérica. 
 
Figura 43. Janela HTMLHelp API Information com a adição do arquivo de cabeçalho InsectA.h. 
 Agora devemos realizar a aoperação de identificar e indicar a que contexto os arquivos 
estarão ligados. Para tal, ainda na mesma janela, clique na aba Alias e clique em 'Add...', para 
exibir a janela de ligação digite no primeiro campo uma das definições (ex: IDH_Main) e em 
seguida no campo seguinte selecione o arquivo de HTML relacionado (Figura abaixo). 
 
Figura 44. Janela de ligação da definição (IDH_Main), como o arquivo HTML (insecta.htm). 
 A seguir clique em OK e verifique que na janela 'HTML Help API Information', aba 
'Alias', estará listado cada definição e o arquivo referenciado. 
Microsoft Visual Basic – Criando arquivos de ajuda basedo em arquivos HTML 99 
14.1.5. Compilando o Projeto da Ajuda 
 Para compilar, acesse o menu 'File' e em seguida 'Save Project' e por fim menu 'File' e 
'Compile...' ou se preferir clique no botão 'Save all files and compile' (último), da barra de 
ferramenta da Aba 'Project'. 
 A janela a direita da janela do programa irá exibir as informações pertinentes à compilação 
dos arquivos para a criação do arquivo de ajuda. 
 
14.1.6. Nota Final 
 Bom no geral é isto outras opçoes poderão ser utilizadas, consultando o próprio arquivo de 
ajuda do programa que é bem elaborado e detalhado, detalhe em inglês. 
 
14.2. Acessando o Arquivo CHM, Através do Visual Basic 
 No projeto do Visual Basic crie uma Classe Module como o nome clsHelpCHM (por 
exemplo). Insira o seguinte código na declaração (General Declarations): 
'Classe clsHelpCHM 
'Author: William Costa Rodrigues 
'Date: 05-15-2004 
'Desciption: Module class to call HTML compiled help file 
'//Constants Declarations 
Private Const HH_DISPLAY_TOPIC = &H0 
Private Const HH_HELP_CONTEXT = &HF 
 
'//API Declarations 
Private Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" _ 
 (ByVal hwnCaller As Long, ByVal pszFile As String, _ 
 ByVal uCommand As Long, ByVal dwData As Long) As Long 
 
'A seguir crie uma função com o nome ShowHelp 
Public Function ShowHelpCHM (helpFile As String, Optional WindowPane As 
String, Optional ContextID as Long) 
 Dim strFile As String 
 strFile = helpFile 
 
If Len(WindowPane) Then 
 Call HtmlHelp (0, strFile, HH_DYSPLAY_TOPIC, ByVal 0&) 
Else 
 Call HtmlHelp (0, strFile, HH_DYSPLAY_CONTEXT, ContextID) 
End If 
End Function 
Código 46. Classe clsHelpCHM, criada para acessar através de API ao arquivo de ajuda CHM, 
pelo Visual Basic 
 
 Para realmente exibir o arquivo de ajuda atrav;es de um formulário, seja por meio de 
menu, botão, etc, é necessário a seguinte rotina (código): 
Private Sub cmdHelp_Click() 
 
Dim sFile As String 
Dim objHelp As clsHelpCHM 
 
Set objHelp = New clsHelpCHM 
sFile = App.Path & "\Ajuda\InsectA.chm" 
Call objHelp.ShowHelpCHM (sFile, "Main") 
Set objHelp = Nothing 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 100 
 
End Sub 
Código 47. Codígo para exibir o arquivo de ajuda através do evento Click, de um 
CommandButton, chamado cmdHelp. 
 Se você queiser utilizar o sensibilidade ao contexto, será necessário referenciar a 
identificação do contexto que deseja chamar. Desta forma para chamar o contexto desejado você 
irá precisar da seguinte rotina. 
Private Sub cmdHelp_Click() 
 
Dim sFile As String 
Dim objHelp As clsHelpCHM 
 
Set objHelp = New clsHelpCHM 
sFile = App.Path & "\Ajuda\InsectA.chm" 
Call objHelp.ShowHelpCHM (sFile, "Main",10001) 'O ID '10001', está 
relacionado com o arquivo 'insecta.htm' 
Set objHelp = Nothing 
 
End Sub 
Código 48. Codígo para exibir o contexto específco do arquivo de ajuda através do evento Click, 
de um CommandButton, chamado cmdHelp. 
 
 Bom como já dito outras opções que por ventura você deseje utilizar, deverá consultar o 
arquivo de ajuda do programa. 
 
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 101 
15. GERANDO RELATÓRIOS COM O CRYSTAL REPORTS23 
 O Crystal Reports é uma ferramenta geradora de relatórios, que acompanha as versões 5 e 
6 do Visual Basic. Tem uma grande vantagem que é gerar relatórios de forma rápida e fácil e por 
outro lado apresenta as devantagens de necessitar da distribuição junto ao aplicativo cerca de 5,0 
MB de bibliotecas, não possuir flexibilidade na alteração dos relatórios em run-time. Apesar de 
apresentar estas vantagens, vamos no prender as vantagens. 
 
15.1. Inicializando o Crystal Reports 
 Par inicilizar o Crystal, basta clicar no menu Add-Ins e selecionar a opção Report Designer 
ou no ícone correspondente na pasta de trabalho do Visual Basic. 
 
Figura 45. Ícone do Crystal Reports v4.6. 
 
15.2. Criando um Novo Relatório 
 Inicialmente iremos gerar um relatório (exemplo) a partir de uma base de dados do MS 
Access 97, cujo nome é: Administer.mdb e a tabela a ter o relatório gerado é tbCadastro. 
 O relatório a ser gerado deverá possuir os seguintes parâmentros: 
1. Imprimir os seguintes campos: nome, matricula, rg, orgao, dataemi, natural, fone1 e 
endereco; 
2. O relatório deverá ser ordenado pelo campo 'nome'; 
3. Deveremos permitir a visualização, impressão e exportação do relatório no formato do Word 
(2.0); 
4. O nome do relatório será 'cadastro.rpt'. 
 
 Selecione a opção no menu 'File/New' então teremos a figura abaixo. 
 
Figura 46. Janela para criação de um relatório novo no Crystal Reports. 
 
 Note que na janela Create New Report, temos nove opções de relatórios exibidas e mais 
três ocultas que poderão ser acessadas através do botão 'Custom>>', mas será explorado em 
nosso pequeno tutorial. 
 Para iniciar o nosso novo relatório, clique em 'Standard'. Em seguida será exibida a janela 
como segue, dando a opção de selecionar uma base de dados através de uma arquivo ou através 
de comando SQL (Structure Query Language). 
 
23 A versão apresntada neste tutorial é a versão 4.6. Hoje já existe a versão 8.0 nomercado, porém com um 
custo elevado para pequenas empresas e mesmo para um programador autônomo. 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 102 
 
Figura 47. Janela Create Report Expert, com a opção o passo 1: seleção de tabelas no Crystal 
Reports 
 Selecionamos para o exemplo somente a tabela tbCadastro, para que possamos criar um 
relatório baseado nesta tabela. Portanto excluimos todas os nomes das outras tabelas listadas. 
Clieu em Next e será exibido passo 3: Campos (Fields). Note que saltamos o passo 2, Links 
(lgação). Esta opção somente seria explorada e configurada se e somente se duas ou mais tabelas 
fossem escolhidas. Seleciona-se nesta opção os campos a serem exibidos no relatório como mosta 
a figura a seguir, mas não se preocupe, caso você esqueça algum campo ou inseriu um por 
acidente poderá incluir e mesmo excluir um campo em modo de desenho (design-mode). 
 
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 103 
Figura 48. Passo 3: seleção de campos a serem exibidos no relatório do Crystal Reports. 
 Após selecionar os campos a serem exibidos, clique em Next >> e em seguida iremos 
escolher a opção de ordenação dos dados e a forma de ordenação – se crescente ou decrescente - 
como segue a janela abaixo. 
 
Figura 49. Passo 4: seleção dos campo de ordenação do relatório e tipo de ordenação no Crystal 
Reports. 
 Selecione o(s) campo(s) a serem utilizados como parâmentro de ordenação dos dados para 
o relatório, podendo o usuário selecionar mais de um, porém caso seja selecionado mais de uma 
ordenacão seguira o critério da ordem de inserção. Ex.: nome e matricula, a ordenação primeiro 
será nome edepois matricula. 
 O tipo de ordenação poderá selecionado através da opção Order, que possui as seguintes 
opções: 
 In ascending order – ordena crescentemente respeitando a ordem listada no campo Group 
Fields. 
 In descending order – ordena decrescentemente respeitando a ordem listada no campo 
Group Fields. 
 In specified order – ordena através dos dados originais do campo da tabela (esta opção 
não será trabalhada neste tutorial). 
 In original order – ordena crescentemente através da lista de campos original da tabelas, 
respeitando a ordem de criação dos campos (esta opção não será trabalhada neste 
tutorial). 
 
 Iremos saltar os passo 5 e 6, e iremos direto para o passo 8, onde iremos definir o tíitulo e 
estilo do relatório. Daremos ao tituo o seguinte texto 'Lizaro Administer – Cadastro' e o estilo será 
o padrão Standard, como podemos ver na figura seguinte. 
 Verifique que no canto direito da janela teremos duas opções de finalização da geração do 
relátorio: Preview Report (visualizar o relatório) e Preview Sample (visualizar o "modelo"). 
 Caso deseje incluir uma imagem cliue no botão e em seguida selecione um tipo de 
figura válida. O Crystal Reports v 4.6, suporta somente os seguites padrões de figuras: bitmap 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 104 
windows (bmp), CompuServe (gif), PC paitbrush (pcx), TIFF (tif), e Targa (tga). Adicionamos no 
exmplo uma pequena figura (bmp) para exemplificar. 
 
Figura 50. Passo 8: especificação de título e seleção se estilo do relatório no Crystal Reports. 
 
 Para visalizarmos o relatório em modo de desenho, basta selecionar a opção Preview 
Sample e em seguida iremos verificar a disposição dos campos como mostra figura seguinte. 
 
Figura 51. Janela do modo de desenho do Crystal Report. 
 
 Nesta janela veremos quatro seções no lado esquerdo do relatório. São elas: 
 Title – especifica o título do relatório a ser exibido no inicio da primeira página somente. 
 Page header – Exibe o conteúdo no inicio de cada página, com exceto na primenira que 
será exibido abaixo do campo Title. 
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 105 
 Details – contém os campos a serem exibido e impressos a partir dosdados contidos no 
banco de dados. 
 Page footer – refere-se ao rodapé da página, onde entre outros dados poderá conter uma 
campo com o nome da aplicação, data de impressão do relatório, campo de ditreitos 
autorias, etc. somente não abuse nas informações do rodapé pois tomará espaço no 
relatório, reduzindo a quantidade de dados a partir do banco de daso a ser exibida e 
impressa. 
 Summary – impressão de resumso do relatório. Uma seção pouco utilizada e prontamente 
substituída pela seção Page footer. 
 
15.3. Inserindo novos campos a partir da tabela. 
 Para selecionar-mos novos campos aser inseridos na tabela, basta seleciona a opção 
'Insert/Database Field...' como mostra a figura seguinte. 
 
Figura 52. Janela par inserção de novo(s) campo(s) ao relatório no Crystal Reports. 
 
 Para inserir um novo campo, basta clicar e arrastar o campo para o seção Details e em 
seguida organiza-lo na melhor posição. 
 
15.4. Formatando campos, inserindo figuras, linhas e caixas 
15.4.1. Formatando Campos 
 Podemos formatar os campos inseridos no relatório em mode de desenho (Design Mode). A 
formatação diz respeito ao tipo de letra, tamanho, nome da fonte, itálico, negrito, alinhamento do 
texto, etc. 
 
Figura 53. Barra de ferramentas de formatação do texto dos campos no Crystal Reports. 
 Outras formatações a serem realizadas, podem ser acessadas através do menu suspenso 
que pode ser acionado com um clique no botão direito em cima do campo a ser formatado. 
 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 106 
Figura 54. Menu suspenso para formatação do campo (fonte, formato, bordas, etc.) no Crystal 
Reports 
 A opção Change Font... dá acesso a caixa de selção de fonte e suas variantes. 
 A opção Change Format... dá acesso a janela de formatação abaixo: 
 
Figura 55. Janela de alteração do formato do campo no Crystal Reports. 
onde: 
• Suppress if Duplicated: suprime se o campo é duplicado; 
• Hide when Printing: oculta na impressão do relatório; 
• Alignment: Alinhamento do texto do campo; 
• Print on mutiple lines: Imprimir em linhas mútiplas. Nesse caso será necessário 
limitar o nº máximo de linha especificar no campo 'Maximum number of lines 
(Enter 0 for no limit:)' o valor padrão para este campo é 0 (zero). 
 Opção Change Border and Colors... dá acesso a janela de mudança da borda, cor do 
texto, tipo de linha da borda, tamanho da(s) borda(s), etc. 
 
Figura 56. Alteração de borda e cores de borda e texto do campo do Crystal Reports. 
 Opção Edit Text Field... dá acesso a caixa de alteração do texto exibido no campo. 
 
15.4.2. Inserindo Figuras, Linhas e Caixas 
 Dois passos poderão ser seguidos para a inserção de qualquer um destes objetos, através 
do menu Insert: Picture (figura), Line (linha) ou Box (caixa). Ou acessar os seguintes botões 
seguintes. 
 
 
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 107 
Figura 57. Barra de ferramentas para inserção de figura, linha e caixa (respectivamente) do 
Crystal Reports. 
 
15.5. Trabahando com Fórmulas 
 O Crystal Reports, possibilita a utilização de formulas, para permitir uma maor flexibilidade 
de selecionar os dados, por exemplo, para exibir o número da página ou a data atual, etc. além de 
permitir a utilização dos operadores If-Then-Else. 
 Para inserir uma fórmula, clique em Inset/Formula e em seguida digite o nome da fórmula. 
Será exibida a seguinte janela a baixo. Digite o seguinte texto no campo Formula Text: 
If {tbCadastro.nome} <> "João da Silva" Then 
"Não é João da Silva" 
Else 
"É João da Silva" 
Código 49. Texto da fórmula "nome" inserida no relatório do Crystal Reports. 
 
 
Figura 58. Janela de edição de fórmula do Crystal Reports 
 Note que o nome da formula presenta-se como @nome, mas na verdade o caractere @ é 
somente uma string de referência do programa. 
 A fórmula "nome" no exemplo acima verifica se o nome do campo nome é igual a 'João da 
Silva' e em seguida retorna o resultado verdadeiro ou falso. Cuidado que a comparação realizada e 
Case Sensitive, ou seja, diferencia maiúscula ou minúscula. 
 Na janela de edição de fórmulas existem dois botões importantes: Accept e Check. O 
primeiro aceita a fórmula do modo que foi contruída e caso exista erro(s) uma mensagem será 
exibida "There is an error in this formula. Do want to exit anyway?" (Existe um erro nesta formula. 
Deseja sair de qualquer jeito?). O segundo botão checa a autenticidade da formula e caso seja 
exibida a mensagem 'No errors found', a formula não apresenta erros ou pendências. 
 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 108 
15.5.1.1. Especificando o valor de uma fórmula através do Visual Basic 
 É sempre comum se setar valor do Visual Basic para um relatório do Crystal Reports, dais 
lanca-se mão das fórmulas, que são "uma mão na roda". No exemplo seguinte veremos a 
passagem do nome, versão e direitos autorais do aplicativo para o cristal. Incialmente crie uma 
fórmula com o nome Aplicativo, que irá receber o valor, ela deverá de preferência ser insirida no 
rodapé do relatório (Page footer). 
NomedoControle.Formulas(0)="Aplicativo='" & App.Title & " v" & App.Major 
& "." & App.Minor & " Copyright" & App.LegalCopyright & "'" 
'Neste caso não é permitido o uso da constante de quebra de linha vbCrLf, 
já que o o valor a ser enviado deverá ser feito em uma única linha. A 
formatação de multi linhas, veja no tópico Formatando Campos (15.4.1) 
Código 50. Envio de valor para uma fórmula do CrystalReport 
 Outro modo de especificar ou mesmo filtrar dados através de uma fórmula a apartir do 
Visual Basic é utilizando a propriedate SelectionFormula, como segue o exemplo seguinte, que listasomente o nomes começados coma letra B. 
NomedoControle.SelectionFormula="{tbCadastro.Nome>='}" & "B" & "" & "'" 
Código 51. Filtragem de dados no CrystalReports através do Visual Basic. 
 
15.6. Imprimindo, Visualizando e Exportando um Relatório a partir do Visual Basic. 
 Neste caso devemos definir alguns parâmentro a ser passado para o relatório e dados a ser 
definido na janela. 
 
15.6.1. Imprimindo 
 Nesse caso devemos fazer algumas considerações: você deverá definir no modulo de 
desenho: a impressora, tamanho da página (A4, carta, etc.), margens, etc. Abaixo segue um 
exemplo de código para imprimir o relatório que acabamos de criar. 
Private Sub Command1_Click() 
With CrystalReport1 
 'define o camino do relatório, podendo ser App.Path & 
"\nomedorelatório.rpt" 
 .ReportFileName = App.Path & "\tut_test.rpt" 
 'especifica qual o campo irá ordenar os dados no relatório 
 .SortFields(0) = "+{tbcadastro.nome}" 
 'enviar os dados do aplicativo para a fórmula aplicativo do relatório 
 .Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." & 
App.Minor & " Copyright" & App.LegalCopyright & "'" 
 'define o destino do relatório 
 .Destination = crptToPrint 
 'aciona o mecanismo de destino escolhido 
 .Action = 1 
End With 
End Sub 
Código 52. Código para impressão direta do relatório sem visualização prévia no Crystal Reports. 
15.6.2. Visualizando 
 A visualização de um relatório possui algumas vantagens em relação à impressão ditreta, 
pois possibilita o usuário além de visualizá-lo, como também imprimi-lo e/ou exporta-lo com 
arquivo suportados pelo CrystalReport (HTML, RTF, WinWord, CSS, Lotus 1-2-3, Excel, etc.) e/ou 
envia-lo por e-mail. 
 Na janela de visualização do relatório, veremos uma barra de ferramentas alinhada da base 
da janela que posui os seguintes botões como a ordem que segue: voltar para a primeira página; 
retornar uma página; avançar uma página; avançar para a última página; Cancelar uma operação, 
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 109 
zoom do relatórios, imprimir relatórios, exportar relatorio para arquivo; exportar arquivo como 
anexo ao e-mail e fechar janela de visualização. 
 
 
Figura 59. Barra de ferramentas na janela de visualização do Crystal Reports. 
 Verifique que o código abaixo possui um destaque para algumas propriedades do contrle 
do Crystal Reports (WindowState, WindowTitle e Destination). 
Private Sub Command1_Click() 
With CrystalReport1 
'define o camino do relatório, podendo ser App.Path & 
"\nomedorelatório.rpt" 
 .ReportFileName = App.Path & "\tut_test.rpt" 
 'especifica qual o campo irá ordenar os dados no relatório 
 .SortFields(0) = "+{tbcadastro.nome}" 
 'enviar os dados do aplicativo para a fórmula aplicativo do relatório 
 .Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." & 
App.Minor & " Copyright" & App.LegalCopyright & "'" 
 'define a janela do aplicativo commo maximizada 
 .WindowState = crptMaximized 
 'define o título da janela do relatório 
 .WindowTitle = "Relatório de cadastro" 
 'define o destino do relatório 
 .Destination = crptToWindow 
 'aciona o mecanismo de destino escolhido 
 .Action = 1 
End With 
End Sub 
Código 53. Código para visualizar um relatório. 
 
 
Figura 60.Janela de visualização de um relatório pelo CrystalReport ActiveX Control. 
 
15.6.3. Exportando (para arquivo e por e-mail) 
15.6.3.1. Exportando para arquivo formato do Word 
Private Sub Command1_Click() 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 110 
With CrystalReport1 
 'define o camino do relatório, podendo ser App.Path & 
"\nomedorelatório.rpt" 
 .ReportFileName = App.Path & "\tut_test.rpt" 
 'especifica qual o campo irá ordenar os dados no relatório 
 .SortFields(0) = "+{tbcadastro.nome}" 
 'enviar os dados do aplicativo para a fórmula aplicativo do relatório 
 .Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." & 
App.Minor & " Copyright" & App.LegalCopyright & "'" 
 'define o destino do relatório 
 .Destination = crptToFile 
 'define o tipo de arquivo a ser exportado (WinWord no exemplo) 
 .PrintFileType = crptWinWord 
 'aciona o mecanismo de destino escolhido 
 .Action = 1 
End With 
End Sub 
Código 54. Código para exportar um arquivo no formato do Word. 
15.6.3.2. Enviando um relatório em anexo por e-mail24 
 O código abaixo não permite a visualização da mensagem pelo usuário do programa ela é 
especificada em design-time (tempos de construção do aplicativo) e é prontamente enviada pelo 
editor de e-mail padrão do computador. 
Private Sub Command1_Click() 
With CrystalReport1 
 'define o camino do relatório, podendo setr App.Path & 
"\nomedorelatório.rpt" 
 .ReportFileName = App.Path & "\tut_test.rpt" 
 'especifica qual o campo irá ordenar os dados no relatório 
 .SortFields(0) = "+{tbcadastro.nome}" 
 'enviar os dados do aplicativo para a fórmula aplicativo do relatório 
 .Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." & 
App.Minor & " Copyright" & App.LegalCopyright & "'" 
 'define o destino do relatório 
 .Destination = crptMapi 
 'define o tipo de arquivo a ser enviado em anexo 
 .PrintFileType = crptWinWord 
 'define o e-mail ou nome do destinatário da ista de endereços do editor 
de e-mail 
 .EMailToList = "saclizarosoft@hotmail.com" 
 'especifica o texto que deverá compor o corpo da mensagem 
 .EMailMessage = "Prezado Senhor," & vbCrLf & _ 
 "Estamos enviando em anexo o relatório de cadastro do programa:" & 
vbCrLf & _ 
 "Relatório do programa Lizaro Administer" & vbCrLf & _ 
 "Atenciosamente," & vbCrLf & _ 
 "William Costa Rodrigues" 
 'define o assunto da mensagem 
 .EMailSubject = "Relatório de cadastro" 
 'aciona o mecanismo de destino escolhido 
 .Action = 1 
End With 
End Sub 
 
24 É necessário conexão com a Internet, para envio de e-mails. 
Microsoft Visual Basic – Gerando relatórios com o Crystal Reports 111 
Código 55. Exportando um arquivo para uma mensagem de e-mail. 
 
15.7. Outros códigos úteis para trabalhar com relatótios.25 
 Abaixo segue alguns códigos úteis para trabalhar com relatórios do Crystal Reports 
15.7.1. Abrindo um relatório, cujo banco de dados possuui senha 
With CrystalReport1 
 .ReportFileName = App.Path & "\arquivo.rpt" 
 .Connect = ";pwd=SuaSenha" 
 .DataFiles(0) = App.Path & "\arquivo.mdb" 
 .Action = 1 
End With 
 
15.7.2. Alterar via código o caminho da base de dados do relatório 
Report1.DataFiles(0) = "c:\diretorio\bdados1.mdb" 
Report1.DataFiles(1) = "c:\diretorio\bdados2.mdb" 
 
15.7.3. Como direcionar a impressão do Crystal para a porta LPT2? 
 CrystalReport1.PrinterPort = "LPT2" 
 CrystalReport1.PrinterName = "HP LaserJet 6L PCL" 
 CrystalReport1.PrinterDriver = "PCL5EMS3.DRV" 
 
15.7.4. Fazendo com que a janela de impressão do Crystal Reports fique como filha 
(MDIChild) de um MDI? 
 Insira o objeto Crystal Report no MDI Form e altere a propriedade ReportFileName para o 
caminho do seu relatório. 
No evento Activate do seu MDIForm, utilize a seguinte rotina: 
Private Sub MDIForm_Activate() 
 CrystalReport1.WindowParentHandle = MDIForm1.hWnd 
 CrystalReport1.WindowState = 2 'Abre o relatório em formato 
maximizado 
 CrystalReport1.Action = 1 
End Sub 
 
15.7.5. Inserir uma quebra de página no Crystal Reports? 
Acesse o menu Format|Section no Crystal Reports e selecione a seção desejada e escolha uma das 
seguintes opções: 
» New Page Before; ou 
» New Page After. 
 
15.7.6. Modificar as margens de um relatório em modo de execução? 
 Utilize as propriedades MarginLeft e MarginRight: 
Private Sub Command1_Click() 
 With CrystalReport1 
 .MarginLeft = 100 
 .MarginRight = 100 
 End With 
 CrystalReport1.Action = 1 
End Sub 
 
 
25 Exemplos retirados do programa Lizaro Visual Basic Dicas v3.0 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 11215.7.7. Outra forma de especificar a senha do banco de dados utilizado pelo relatório. 
 Altere a propriedade Connect, do objeto Crystal para algo como a 
expressão abaixo: 
CrystalReport1.Connect = App.Path & "\DataBase.mdb", False, False, 
";PWD=senha" 
 
 
Microsoft Visual Basic – Criando um ActiveX 113 
16. CRIANDO UM ACTIVEX26 
 Iremos neste capítulo final construir um controle ActiveX (OCX) para exibir arquuivos de 
ajuda no formato hlp, de modo simples veremos como contruir este componente. 
 Inicie um novo projeto, escolhendo a opção ActiveX Control. Em seguida será criada uma 
janela de um UserControl, personalize-a como a figura abaixo. Inserindo um CommnadButton e 
definido uma imagem e texto para ele. 
 
Figura 61. Controle ActiveX em Design-time. 
 Na janela code deste user controle insira os códigos abaixo: 
'Author: William Costa Rodrigues (Lizaro Soft) 
'Created date: 2-25-2003 
'Modified date: 08-01-2004 
'Description: ActiveX Control to access help file in 'hlp' format. 
 
Enum HLPConst 
 HELP_CONTEXT = &H1 'Exibe o tópico de ajuda pelo Número ID 
 HELP_HELPONHELP = &H4 'Exibe a ajuda do Windows de como utilizar 
ajuda 
 HELP_INDEX = &H3 'Exibe o CONTEUDO da Ajuda 
 HELP_QUIT = &H2 'Termina a ajuda 
 HELP_MULTIKEY = &H201& 'Procura por palavras-chave na tabela 
alternativa da ajuda 
 HELP_KEY = &H101 'Exibe o Índice da Ajuda 
End Enum 
'especifica a constante a ser utilizada pela API para exibir o arquivo de 
ajuda 
Dim m_AjudaHLP As HLPConst 
 
Private Sub UserControl_Initialize() 
'define o tipo de constante para a variável m_AjudaHLP 
m_AjudaHLP = HELP_CONTEXT 
End Sub 
 
Private Sub UserControl_Resize() 
'ajusta o tamanho do componente quando este for redimensionado, mantendo-
o com um tamanho fixo 
cmdCtl.Left = 0 
cmdCtl.TOp = 0 
UserControl.Width = cmdCtl.Width 
UserControl.Height = cmdCtl.Height 
UserControl.ScaleLeft = 0 
UserControl.ScaleTop = 0 
 
cmdCtl.TOp = 0 
cmdCtl.Left = 0 
 
End Sub 
 
 
26 Código retirado do ActiveX Lizaro HelpOCX v1.00.0007 disponível em www.lizarosoft.cjb.net 
Desvendando a linguagem de programação mais popular do mundo – W.C. Rodrigues 114 
Public Function Exibir_Ajuda(frm As Object, Ajuda As String, Constante As 
HLPConst, Optional Topico As Long) 
'função para exibir o arquivo de ajuda 
If Constante = TOPICOS And Topico = Empty Then 
 MsgBox "Especifique o número do tópico que deseja exibir!", 
vbExclamation, "Erro: Tópico não especificado" 
Else 
'chama a finção definida num módulo que utiliza a API WinHelp 
 ExibirAjudaHLP frm, Ajuda, Constante, Topico 
End If 
End Function 
 
Public Property Get AjudaHLP() As HLPConst 
'retorna a propriedade AjudaHLP do controle 
AjudaHLP = m_AjudaHLP 
Constante = AjudaHLP 
End Property 
 
Public Property Let AjudaHLP(ByVal nAjudaHLp As HLPConst) 
'especifica a propriedades AjudaHLP do controle, modificando-a para o 
novo valor especificado 
m_AjudaHLP = nAjudaHLp 
PropertyChanged "AjudaHLP" 
End Property 
Código 56. Código do controle ActiveX para especificar e retornar as propriedades. 
 Agorma iremos trabalhar com a API WinHelp parapodermos chamar o arquivo de ajuda 
atrav;es do controle ActiveX. 
Public Declare Function WinHelp Lib "USER32" Alias "WinHelpA" _ 
(ByVal hwnd As Long, ByVal lpHelpFile As String, _ 
ByVal wCommand As Long, ByVal dwData As Long) As Long 
 
Public Function ExibirAjudaHLP(X As Object, hlpFile As String, Constante 
As HLPConst, Optional cnt As Long) 
'x - espeficica a propriedade hwnd do form 
'hlpfile – especifica o caminho do arquivo de ajuda 
'Constante - especifica a constante a ser utulizada para especifica em 
que modo a API devera exibir o arquivo de ajuda 
' cnt – especifica o tópico específico que será exibido 
'função que exibe o arquivo de ajuda especificado na função Exibir_Ajuda 
no código do controle ActiveX UserControl 
 If Constante = HELP_CONTEXT Then 
 If cnt = Empty Then cnt = 0 
 Aju = WinHelp(X.hwnd, hlpFile, Constante, cnt) 
 Else 
 Aju = WinHelp(X.hwnd, hlpFile, Constante, CLng(0)) 
 End If 
End Function 
Código 57. Código para exibir a arquivo de ajuda específico através da API WinHelp no controle 
ActiveX. 
 
Microsoft Visual Basic – Bibliografia Consultada 115 
17. BIBLIOGRAFIA CONSULTADA 
 
Anônimo, 1998. Guia de Referência do Visual Basic, 65p. 
Anônimo, 2003. Crystal Reports – Gerando seus relatórios, www.scriptbrasil.com.br, 11p.. 
Appleman, D. 1997. Developing Advanced ActiveX Controls With Visual Basic 5.0, 
www.desaware.com, 3p. 
Cornell, G. 1998. Visual Basic 5 completo e total. Trad. Unonius, L.G.E., Makron Books, São 
Paulo, SP, 778p. 
Ganz Jr., Carl. 1998. Visual Basic 5 – Desenvolvendo bancos de Dados para a WEB. Tradução e 
revisão técnica: Santos, J. R.D.P., Makron Books, São Paulo, SP, 489p. 
Ideológica 1999. Modelagem de Dados em Microsoft Access 95. São Paulo, SP, 21p. 
Lima, A. S. 1998. Aplicações em Visual Basic 5.0 – Controle de estoque. Érica, São Paulo, SP, 
338p. 
Machado, F. N. R. & Abreu, M. 1996. Projeto de Banco de Dados: uma visão prática. 2ª Ed. 
Érica, São Paulo, SP, 298p. 
Marcoratii, J. C. 2000. Usando HTML HELP em suas aplicações Visual Basic. 
www.geocities.com/SilliconValleyBay/3994/ajuda.htm, acesso em 05/04/2000. 
Marcoratii, J. C. 2003. www.geocities.com/SilliconValleyBay/3994/, consulta em junho de 2003. 
Microsoft Corporation. 1991-1997. Visual Basic Books Online v1.0, acompanha o Visual Basic 
v 5.0. 
Morgado, F. 1998. Visual Basic 5, método rápido. Infobook, Rio de Janeiro, RJ, 181p. 
Pires, A. 1996. Microsoft Access 2.0 for windows. Axcel Books, Rio de Janeiro, RJ, 150p. 
Rodrigues, W.C. 2000. Microsoft Visual Basic 5.0™ - Tutorial para programadores iniciantes e 
intermediários. Ed. do Autor, Rio de Janeiro, RJ. www.lizarosoft.hpg.com.br, 29p. 
Rodrigues, W.C. 2003. Lizaro Visual Basic Dicas v3.0, biblioteca de dicas do Visual Basic, 
www.lizarosoft.hpg.com.br. 
Susviela, C.A.N. 1999. Visual Basic – Curso Básico. Ed. do Autor, Santana do Livramento, RS, 
168p. 
VBAccelerator.com (Steve McMahon). www.vbaccelerator.com, consulta em junho de 2003.

Mais conteúdos dessa disciplina