AS EMPRESAS ESTÃO "DESESPERADAS" POR ESTE TIPO DE PROFISSIONAL... - VOCÊ É UM DELES?

MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI - O Conhecimento que Vira Dinheiro - CLIQUE AQUI

Você está em: PrincipalArtigosLivroexc03office › Capítulo 1 : 03
Quer receber novidades e e-books gratuitos?
« Anterior Δ Página principal ¤ Índice Próxima »
Integrando o Office ao Excel 2003 Utilizando VBA
Autor: Robert Friedrick Martim
Lição 03 de 05 - Integrando o Access ao Word

Nossa próxima parada é a integração do Access com o Word. Aqui continuarei no mesmo utilizando o mesmo banco de dados. Se o leitor observar, uma das figuras do tópico anterior possui um botão com o rótulo “Carta Atraso”.

Utilizaremos este botão para enviar a carta de atraso. A primeira coisa que faremos é criar um modelo no Word. Não irei repassar o modelo aqui, mas o leitor pode ter acesso aos modelos na pasta “ModelosWord” que acompanha este curso.

Abra o modelo atrasoentrega.dot contido nesta pasta para o exemplo do primeiro tópico deste capítulo e estude-o antes de continuar. Fazendo desta forma o leitor compreenderá melhor o código.

Criando uma carta de aviso de atraso utilizando um modelo Word

Assumindo que o leitor já tenha analisado o documento, aqui apresento uma forma “hard” de se criar tal carta.

No próximo tópico mostrarei como criar a mesma carta através de um “merge” (mala direta) a partir do Access.

O primeiro passo requer a inserção de um botão em nosso formulário:


Figura 3‑1 Enviando carta de atraso

Via de regra, a explicação acompanha o código:

                  Private Sub  cmdCartaAtraso_Click()
                   '   Qualquer erro deve ser ignorado
     On Error Resume Next
'   Declaração das variáveis
       Dim appWrd      As  Word.Application
       Dim WrdDoc       As Word.Document
       Dim matriz1     As Variant
       Dim  matriz2     As  Variant
       Dim  caminho     As  String
       Dim i           As Integer
       
                   '   Define o caminho atual deste projeto
       caminho = CurrentProject.Path
'   Instancia o aplicativo Word
       Set appWrd  = New Word.Application
'   Cria o documento a partir do modelo  "atrasoentrega.dot"
                         Set WrdDoc =  appWrd.Documents.Add(Template:= _
           caminho &  "\ModelosWord\atrasoentrega.dot", _
           NewTemplate:=False,  DocumentType:=0)
                  '   Matriz contendo os valores que devem ser  substituidos no documento modelo
     matriz1 = Array("datadata",  "Nomenome", "Empresaempresa", "Enderecoendereco",  _
             "CEPCEP",  "Cidadecidade", "Estadoestado", "Contatocontato",  _
             "PedidoPedido")
     
 '   Matriz com os valores retirados do registro  atual
     matriz2 = Array(Format(Date, "dd mmmm yyyy"), Me.ContactName, Me.CompanyName,  _
              Me.Address, Me.PostalCode, Me.City, Me.Region, Me.ContactName,  Me.OrderID)
'   Executa uma busca no documento Word e  substitui um valor pelo outro, isto é,
                   '   substitui os valores de marcação pelos  valores do registro atual
       For i = 0 To UBound(matriz1)
                   '       A partir da seleção atual no documento  Word, procurar
           With  WrdDoc.ActiveWindow.Selection.Find
                   '           Executa a procura e substituição do  texto
               .Execute  Findtext:=matriz1(i), replacewith:=matriz2(i)
                   '           Move o cursor para o início do  arquivo
               WrdDoc.ActiveWindow.Selection.HomeKey  wdStory
           End With
       Next
       
                   '    Mostra o aplicativo Word
        appWrd.Visible = True
'   Remove os objetos da memória (mas não fecha  o aplicativo Word)
       Set appWrd = Nothing
       Set WrdDoc = Nothing

    Exit Sub
End Sub

Criando um “merge” (mala direta)

No exemplo do tópico anterior, utilizo palavras dentro do documento modelo para criar a carta. Através de uma procura e substituição, trocamos os valores no documento pelos valores no banco de dados.

Neste exemplo, mostrarei como criar um “Mail Merge” (Mala Direta) a partir do Access para o Word. O processo envolve a criação de um modelo Word contendo os campos utilizados na mala direta. Como este módulo trata de Access somente, não irei cobrir o processo de criação do documento Word contendo os campos do BD que utilizaremos.

O leitor pode estudar o documento atrasoentrega_merge.dot para verificar como ele foi criado.

Com o documento pronto, podemos iniciar o processo de criação do nosso código. Note que o documento Word é criado utilizando os campos do BD, então, este exemplo inicia-se no Word. Note também que se o documento Word é aberto (*.doc ou *.dot) a conexão ao BD é feita automaticamente. Então, de certa forma, o usuário pode abrir o documento e navegar até o registro que ele deseja e imprimir a partir de lá.

Neste exemplo, o que fazemos é o inverso. O usuário está checando a lista de pedidos atrasados e deseja enviar a carta.

Dentro do BD, com um clique de botão, ele cria a carta. Continuarei com o mesmo BD, mas adicionando um botão novo:


Figura 3‑2

Dito isso, estamos prontos para criar o nosso código. Aqui, deixarei comentados os itens utilizados no exemplo anterior os quais não são necessários aqui:

Private Sub  cmdMerge_Click()
                   '   Qualquer erro deve ser ignorado
     On Error Resume Next
     
 '   Declaração das variáveis
 '     Dim appWord     As  Word.Application
     Dim WrdDoc      As Word.Document
     Dim  caminho     As  String
     
     caminho = CurrentProject.Path
'   Instaciamento do aplicativo
                   '    Set appWord = New Word.Application
'   Aqui, para variar o código, utilizo a função  "GetObject"
                   '   ao invés do método Add
       Set WrdDoc = GetObject(caminho &  "\ModelosWord\atrasoentrega_merge.dot", _
           "Word.Document")
       
                   '   Com o documento Word
       With WrdDoc
                   '        abre o aplicativo Word
            .Application.Visible = True
                   '       Abre a fonte de dados do merge a qual é  referida pelo nome completo
                   '       de nosso projeto. A fonte de dados é  aberta e conexao definida.
                   '       O registro que ser utilizado na carta é  aquele onde o número do
                   '       pedido é igual ao registro atual
           .MailMerge.OpenDataSource  Application.CurrentProject.FullName, _
            linktosource:=True,  Connection:="Orders Qry", _
                sqlstatement:="Select * from  [Orders Qry] WHERE OrderID=" & Me.OrderID
                   '       O "Merge" (mesclagem/mala  direta) é executada
           .MailMerge.Execute
                   '       Documento é ativado caso haja outras  janelas abertas
           .Activate
       End With
       
                   '    appWord.Visible = True
                   '   Fecha o documento  "atrasoentrega_merge.dot", pois ele será aberto durante
                   '   o processo e não queremos que mudanças sejam  feitas nele.
       WrdDoc.Close  False
       Set WrdDoc = Nothing
                   '    Set appWord = Nothing
End Sub

Uma parte importante e que o leitor deve prestar atenção diz respeito ao “sqlstatement”. É neste item que definimos o registro que deve ser passado para o “merge”. Neste caso, utilizo o OrderID para pegar um registro único da consulta “Orders Qry”.

Exportanto relatórios para documentos predeterminados

Neste exemplo mostrarei como passar um relatório para um documento Word qualquer. Novamente, continuarei a utilizar o banco de dados Northwind como Exemplo.

Para mostrar como o código pode ser utilizado em diversos contextos (ele está literalmente pronto para uso), eu o colocarei diretamente em um dos formulários do banco de dados.

Iniciamos com a janela principal do BD:


Figura 3‑3

Clicamos no botão “Print Sales Reports” para que a janela de seleção do relatório seja aberta:


Figura 3‑4

Nesta janela, inserimos um novo botão o qual fará o que desejamos.

A solução do problema é bastante simples, então, não há necessidade de delongas. Os comentários encontram-se no código para melhor compreensão:

                  Private Sub  cmdWord_Click()
                   '   Em caso de erro mostrar mensagem de erro
     On Error GoTo  Err_Handler
'   Declaração das variáveis
       Dim appWord     As  Word.Application
       Dim wrdDoc       As Word.Document
       Dim strNome     As String
'   Nome do arquivo de saída para o relatório
       strNome = CurrentProject.Path &  "\ModelosWord\relatório.doc"
'   Seleciona o relatório que deve ser passado  para o documento.
                   '   Note que esta rotina é similar a rotina de  impressao do relatório,
                   '   contudo, estamos "imprimindo" para  um arquivo RTF (Rich Text File)
       Select Case Me.ReportToPrint
                   '        Caso 1 passa o relatório "Employee Sales by Country"
           Case 1
                   '           Executa o comando  "OutputTo"
               DoCmd.OutputTo  acOutputReport, "Employee Sales by Country", acFormatRTF, strNome
'       Caso 2 passa o relatório "Sales  Totals by Amount"
           Case 2
                   '           Executa o comando  "OutputTo"
               DoCmd.OutputTo  acOutputReport, "Sales Totals by Amount", acFormatRTF, strNome
           Case Else
               MsgBox "Você não pode gerar  este relatório...", vbInformation
       End Select
                   '   Fecha o formulário
       DoCmd.Close  acForm, "Sales Reports Dialog"
'    Cria o aplicativo Word
       Set appWord = New  Word.Application
                   '   Abre o relatório
       Set wrdDoc  = appWord.Documents.Open(strNome)
                   '    Mostra o aplicativo Word
       appWord.Visible  = True
'   Remove os objetos da memória
       Set appWord = Nothing
       Set wrdDoc = Nothing
       Exit Sub
       
                   Err_Handler:
       MsgBox "Um erro ocorreu!",  vbCritical
       
       If Not appWord Is Nothing Then
            appWord.Quit
           Set appWord = Nothing
       End If
       
End Sub                

Ao rodar o código será necessário inserir a data inicial e a data final para geração do relatório:


Figura 3‑5

Estes são pré-requisitos dos relatórios. Uma vez que tudo esteja OK, o relatório será mostrado no Word:


Figura 3‑6

« Anterior Δ Página principal ¤ Índice Próxima »

Quer Aprender VBA no Excel, Sem Dificuldades, com Exemplos
Práticos Passo a Passo e com Explicações Detalhadas?

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Úteis - Passo a Passos

Junto com o livro você Recebe 11 Bônus Incluindo 50 horas de Vídeo Aulas.

Mesmo que Você não Saiba Nada de Programação VBA ou já Tenha Tentado
Aprender VBA e Desistiu ou Achou Difícil, com Este Livro EU GARANTO que Você Aprenderá, SEM DIFICULDADES. APRENDIZADO GARANTIDO.

Clique Aqui Para Todos os Detalhes sobre Esta Oferta

- É com alegria que Comunico o lançamento do meu 42º Livro.

 

- Perfeito para Iniciantes em Programação VBA.

 

- Abordo desde o Básico até Comandos Avançados.

 

- Códigos detalhadamente explicados, linha por linha.

 

- Criação de Funções e Procedimentos com VBA.

 

- O Modelo de Objetos do Excel - Exemplos Práticos.

 

- Criação de Formulários - UseForms.

 

- Criação de um Sistema de Cadastro Completo, com Foto.

 

- Como trabalhar com Tabelas Dinâmicas na Programação VBA.

 

- Como trabalhar com Gráficos na Programação VBA.

 

- Rotina que Escreve um número por Extenso usando VBA.

 

- E muito, muito mais mesmo...

 

- Junto com o livro você recebe 50 horas de Vídeo Aulas sobre Macros, Programação VBA, Fórmulas e Funções Avançadas, Dashboards e Muito mais.

 

[Bônus]: 60 horas de Vídeo Aulas sobre Macros, Programação VBA, Fórmulas e Funções Avançadas no Excel, Recursos Avançados, Dashboards e Muito mais.

 

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Uteis - Passo a Passos

Aprenda com Júlio Battisti: "Macros e Programação VBA no Excel 2010 Através de Exemplos Práticos e Uteis - Passo a Passos

A BÍBLIA DA
PROGRAMAÇÃO
VBA NO EXCEL

 

Quer receber novidades e e-books gratuitos?

MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI

(Online, Vitalício, Prático e Atualizado)!

  • Chega de ser Ignorado pelo Mercado!

  • A vida não vai Melhorar Sozinha!

  • Quem domina infraestrutura, domina o Mercado.

  • Com esta Formação você vai Dominar o Conhecimento e torne-se o Profissional que as Empresas estão Buscando, "desesperadamente", mas não estão encontrando.

NÃO PROCURE VAGAS, SEJA PROCURADO!

 

Curso Completo de Excel - Curso Online com Certificado - 925 Vídeo Aulas - 22 Cursos - 120:42 horas

 

Para Todos os Detalhes, Acesse:

Curso Completo de Excel - Curso Online com Certificado - 925 Vídeo Aulas - 22 Cursos - 120:42 horas

 

https://juliobattisti.com.br/curso-infra-ti.asp

 

Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

Todos os direitos reservados, Júlio Battisti 2001-2026 ®

LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO

DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI