VB6 - Criando Relatórios com o Word
Uma das grandes vantagens do Visual Basic , além da facilidade no aprendizado, é sua integração com o suíte Microsoft : Word, Excel , etc....
Você pode se aproveitar disto e fazer a integração do seu programa VB com o Word (Excel,PowerPoint,..) , aproveitando todos os seus recursos disponíveis. Como a grande maioria dos usuários possui o Word , o fato de você estar usando uma aplicação externa ao seu programa VB não chega ser um empecilho.
Neste artigo iremos mostrar como preencher um contrato com variáveis obtidas do seu banco de dados no Visual Basic.
Além de ser um expediente comum no dia a dia , veremos que a tarefa não requer muito trabalho nem muito código.
O enfoque será dado em como substituir as variáveis presente no contrato usando a automação OLE . Fica a seu cargo expandir as possibilidades do exemplo adaptando-a ás suas necessidades. Ao trabalho...
O problema
Você tem que preencher um contrato ( pode se qualquer tipo de contrato) de prestação de serviços educacionais com os dados de cada aluno . Os dados dos alunos estão presentes no seu banco de dados , e você vai ter que , para cada aluno , imprimir o contrato personalizado.
Vamos usar o Microsoft Word para redigir o contrato e no local onde os dados do aluno devem ser preenchidos usaremos variáveis que serão substituídas via automação OLE pelo Visual Basic.
Abaixo temos uma parte do nosso contrato: (Você não ia querer que eu digitasse o contrato inteiro né !!!)
As variáveis usadas neste caso são:
Obs: Neste exemplo não iremos usar a variável @documento.
Salvaremos nosso documento com o nome de contrato.doc
A solução
Vamos agora criar um projeto no Visual Basic que nos permita imprimir os contratos com os dados de cada aluno.
O formulário possui:
Como funciona ?
O controle Data1 faz a vinculação da sua base de dados com os controles Caixa de texto (Aluno, responsável , endereço e cidade) do formulário. Para isto , primeiro você deve definir as propriedades DatabaseName ( o nome do banco de dados) e RecordSource (o nome da tabela).
A seguir basta vincular cada caixa de texto usando as propriedades: DataSource ( indique o nome do controle de dados ) e DataField ( o nome de cada campo da tabela que queremos vincular). ( Veja também : Objeto de Controle de dados )
No botão - Gerar Contrato - insira o seguinte código:
Private Sub cmdContrato_Click() Dim temp As String On Error GoTo trata_erro Set ObjWord = New Word.Application ' Desabilita o botao de comando cmdContrato.Enabled = False ' nome do relatorio pré montado ObjWord.Documents.Open ("c:\teste\Contrato.doc") ' chama rotina para substituicao Call Substitui_Var("@contratada", txtcontratada) Call Substitui_Var("@sede", txtsede) Call Substitui_Var("@cidade1", txtcidade) Call Substitui_Var("@contratante", Data1.Recordset("nomeresp")) Call Substitui_Var("@endereco2", Data1.Recordset("endereco")) Call Substitui_Var("@documento", Data1.Recordset("cidade")) Call Substitui_Var("@aluno", Data1.Recordset("nome")) ' Salva o documento com um novo nome ObjWord.ActiveDocument.SaveAs (txtcontrato) 'Encerra o word ObjWord.Quit ' informa ao usuario que o contrato foi gerado MsgBox "Contrato gerado com sucesso! em : " & txtcontrato, vbInformation, " Contrato Gerado " ' libera memoria Set ObjWord = Nothing Exit Sub trata_erro: |
E a função que irá fazer o serviço possui o seguinte código:
Private Sub
Substitui_Var(Header As String, Data As String) With ObjWord.Selection.Find .ClearFormatting .Text = Header .Execute Forward:=True End With Clipboard.Clear |
A chamada da função Substitui_Var é que faz a substituição das variáveis do texto:
Call RepPara("@contratada", txtcontratada)
Call RepPara("@sede", txtsede)
Call RepPara("@cidade1", txtcidade)
Call RepPara("@contratante", Data1.Recordset("nomeresp"))
Call RepPara("@endereco2", Data1.Recordset("endereco"))
Call RepPara("@documento", Data1.Recordset("cidade"))
Call RepPara("@aluno", Data1.Recordset("nome"))
A função possui dois parâmetros : a variável que queremos substituir e o valor que será inserido no local da variável. Para inserir um campo do banco de dados usamos a notação:
Data1.Recordset("nome do campo")
Tudo isto é possível graças a criação da variável objeto :
Set ObjWord = New Word.Application
Ao executar o projeto teremos em tela os dados que queremos inserir no contrato:
E clicar no botão - Gerar Contrato - teremos:
O resto agora é com você... (Leia também o artigo : OLE - Conceitos Básicos )
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: