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
| « 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 WordAssumindo 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:
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 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:
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 predeterminadosNeste 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:
Clicamos no botão “Print Sales Reports” para que a janela de seleção do relatório seja aberta:
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:
Estes são pré-requisitos dos relatórios. Uma vez que tudo esteja OK, o relatório será mostrado no Word:
|
|||
| « Anterior | Δ Página principal | ¤ Índice | Próxima » |
|
Quer Aprender VBA no
Excel, Sem Dificuldades, com Exemplos |
||
|
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 |
||
|
|
MEGA FORMAÇÃO EM INFRAESTRUTURA DE TI (Online, Vitalício, Prático e Atualizado)! |
|
|
NÃO PROCURE VAGAS, SEJA PROCURADO! |
|
Para Todos os Detalhes, Acesse:
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