... Pague apenas R$67,00 uma única vez e tenha acesso por 1 ano aos vídeos e arquivos exemplos do site ...

Clique aqui e obtenha mais detalhes.


Gerar relatórios em pdf e enviar por email

O Service Pack 2 do Office 2007 trouxe uma ótima novidade, que é a de poder gerar arquivos de pdf dos objetos do Access, de forma nativa; ou seja, sem ferramentas de terceiros.   O Access 2010 também vem com esta funcionalidade.

É bastante comum nas empresas, o envio de relatórios a clientes e fornecedores, tais como propostas e pedidos de compra.  O arquivo transmitido no formato de pdf é o mais bem aceito no mercado, pois 95% das máquinas têm instalado o leitor de PDF (Adobe Acrobat Reader).

Com o comando OutputTo é possível gerar arquivos pdf de tabelas, consultas, formulários, relatórios e outros.

Com o OutputTo você pode gerar outros formatos de arquivos,  como HTML, XLS, TXT, RTF, SNP, ...

O que é preciso informar ao comando OutputTo para gerar um arquivo pdf de um relatório?

1- Que objeto iremos transformar em pdf - acOutputReport
2- O nome do objeto - rltProposta
3- O formato de saída do objeto - acFormatPDF
4- O local de destino e o nome para o arquivo pdf a ser gerado - c:\Projeto\Proposta02.pdf

Docmd.OutputTo acOutputReport,"rltProposta",acformatPDF,"c:\Projeto\Proposta02.pdf" 

Ao executar o comando OutputTo, ele abrirá o relatório rltProposta, gerando o arquivo proposta02.pdf e gravando na pasta Projeto.

Local para armazenar o arquivos gerados

Na prática, costumo criar uma pasta exclusiva para armazenar os arquivos de pdf no mesmo local do aplicativo.  Assim posso criar um caminho relativo para esta pasta, com o seguinte comando:

CurrentProject.Path & "\enviados\Proposta02.pdf"

CurrentProject.Path informa a localização do aplicativo e a pasta enviados é o local para armazenar os arquivos de pdf gerados.

Se desejar se aprofundar sobre o caminho relativo, acesse aqui.

Nome do arquivo

O nome dado para os arquivos gerados tem que ser o mais sugestivo possível.  O que costumo fazer é associar o número da proposta e/ou pedido no nome do arquivo.  Exemplo:

CurrentProject.Path & "\enviados\Proposta" & me!nProposta & ".pdf"

O exemplo acima está capturando o número da proposta (me!nProposta) de um suposto formulário proposta  e incrementando-o  ao nome do arquivo que será gerado.

Fica a seu critério,  achar a melhor forma de gerar um nome para o seus arquivos de pdf.

Usando variáveis

O uso de variáveis permite uma boa organização na escrita.

Veja o resumo do que foi apresentado até aqui com a escrita mais apurada:

Dim strArquivo as string
Dim strLocal as string
 
strArquivo = "Proposta" & me!nProposta & ".pdf"
strLocal = CurrentProject.Path & "\enviados\" & strArquivo
 
Docmd.OutputTo acOutputReport,"rltProposta",acformatPDF,strLocal
 

Filtrando o relatório

O relatório, quando for aberto pelo OutputTo tem que estar devidamente filtrado para se gerar o arquivo pdf, com as informações desejadas.  As duas formas mais comuns de filtragem são: o uso de  parâmetros na consulta origem do relatório e o uso do argumento WHERE, do comando OpenReport.  

Prefiro utilizar o argumento WHERE do OpenReport, por ser o mais flexível nas possibilidades de filtragem!

O objetivo é abrir o relatório com as informações referentes ao registro que está sendo visualizado no formulário.  Por exemplo, se estou com o formulário aberto na proposta 1325, desejo abrir o relatório filtrado apenas com as informações da proposta 1325.  Para realizar a filtragem, podemos usar o campo do número da proposta, conforme a linha abaixo:

DoCmd.OpenReport "rltProposta",acViewPreview,,"nProposta = " & Me!nProposta

Mantendo o relatório aberto e filtrado para o OutputTo

Quando o OutputTo solicita a abertura do relatório, o mecanismo interno do Access identifica que já se encontra aberto o relatório solicitado e informa ao OutputTo que a abertura já foi realizada.    O comando OutputTo, então, gera o arquivo de pdf, aproveitando o relatório previamente aberto e filtrado.  Para ficar mais elegante, o relatório é aberto de forma oculta.

Veja o resumo do código:

Dim strArquivo as string
Dim strLocal as string
 
strArquivo = "Proposta" & me!nProposta & ".pdf"
strLocal = CurrentProject.Path & "\enviados\" & strArquivo
 
'Abre o relatório devidamente filtrado e oculto
DoCmd.OpenReport "rltProposta", acViewPreview,,"nProposta=" & Me!nProposta, acHidden
 
'Gera arquivo pdf do relatório previamente aberto e filtrado.
Docmd.OutputTo acOutputReport,"rltProposta",acformatPDF,strLocal
 
'Fecha o relatório
DoCmd.Close acReport, "rltProposta"
 

Como enviar o arquivo por email usando o Outlook ?

O código apresentado aqui está bem comentado para você compreender como é possível abrir o formulário de envio do Outlook e inserir o arquivo pdf no anexo.

Private Sub btemail_Click()
Dim strArquivo As string
Dim strLocal As string
Dim objOut As Object
Dim objmail As Object
Dim objAnexo As Object
Const olMailItem = 0
Const olByValue = 1
'---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'---------------------------------------------
Set objOut = CreateObject("Outlook.application")

'------------------------------------------------------------
'Abrindo o formulário de email para inserir os itens de email
'Similar ao clicar no botão NOVO do Outlook
'------------------------------------------------------------
Set objmail = objOut.CreateItem(olMailItem)

'------------------------------------------------------------
'Abrindo a opção anexo
'Similar ao clicar no botão ANEXO do Outlook
'------------------------------------------------------------
Set objAnexo = objmail.Attachments

'------------------------------------------------------------------------------
'Indico o nome do arquivo pdf e o local que será gravado.
'Neste exemplo gero os nomes dos arquivos, aproveitando o número da proposta, 
'ficando com o seguinte aspecto: proposta1.pdf, proposta2.pdf,...
'------------------------------------------------------------------------------
strArquivo = "Proposta" & me!nProposta & ".pdf"
strLocal = CurrentProject.Path & "\enviados\" & strArquivo

'----------------------------------------------------------------------------
'Abre o relatório filtrado e oculto, de acordo com a proposta selecionada.
'----------------------------------------------------------------------------
DoCmd.OpenReport "rltProposta", acViewPreview,,"nProposta=" & Me!nProposta, acHidden

'----------------------------------------------------------------------------
'Gera o pdf do relatório através do comando OutputTo.
'O mecanismo do Access reconhece que o relatório solicitado pelo OutputTo 
'já está aberto e então o OutputTo usará o relatório já aberto e filtrado.
'----------------------------------------------------------------------------
DoCmd.OutputTo acOutputReport, "rltProposta", acFormatPDF, strLocal

'---------------------------------------------
'Fecha o relatório que está oculto
'---------------------------------------------
DoCmd.Close acReport, "rltProposta"
 
'-------------------------------------------------------------
'Adiciona o arquivo pdf no anexo, capturado da pasta enviados
'-------------------------------------------------------------
objAnexo.Add strLocal, olByValue, 1

'--------------------------------------------------------
'Mostra o formulário de envio de email
'--------------------------------------------------------
objmail.Display

'-------------------------------------------------------
'Tudo já foi entregue ao Outlook; então podemos esvaziar
'a memória do computador usada pelas variáveis objeto.
'-------------------------------------------------------
Set objAnexo = Nothing
Set objmail = Nothing
Set objOut = Nothing
End Sub

Neste artigo eu explico em detalhes como você pode automatizar o Access para o envio de emails , usando o Outlook.  

Download arquivo exemplo

Bom estudo!


 

 


154 comentários

Luís Augusto   07/04/2010 21:05:31

Excelente explicação Avelino, tentarei implementareste artigo ao meu projeto.
Obrigado.

Célia Castro   31/01/2011 12:42:25

estou criando um banco de dados para o controle de processos.
Iniciei no Access uma tabela coma as colunas das quais necessito.
Gerei um formulário para ficar mais fácil a inserção de dados.
Digitei poucos dados para testar e agora quero enviar este banco de dados para a minha colega para que ela vizualize como ficou e insira novos dados.
Anexei o banco de dados (pequeno) e enviei para ela , no entanto , ao abrir aparece a mensagem de que o formato do banco de dados está errado.
Como devo fazer este envio , sem serem pdf porque quero que ela abra e insira dados.

obrigada,

Avelino Sampaio   31/01/2011 15:23:34

Célia,

Se vc estiver usando o Access 2007(accdb) e ela a versão 2003, não irá funcionar. Entretanto vc pode gerar um novo arquivo, no formato MDB, que lê no 2003. Outra situação é se vc estiver usando o Access 2010 e ela o 2007. Dependo dos recursos utilizados no aplicativo não abre de jeito nenhum no 2007. Se as duas estiverem com o mesma versão, tente enviar o arquivo zipado.

Sucesso

IVAN   28/04/2011 22:00:23

Avelino, quando gera o arquivo e ele envia da a mensagem a " A ação OutputTo foi cancelada, o que causa isso?

Obrigado

Avelino Sampaio   29/04/2011 06:37:12

Ivan,

retire o atributo AcHidden do relatório para vc poder visualizar no processo se está com algum problema.

Utilize o procedimento com o Outlook aberto.

Ivan   30/04/2011 18:02:59

Avelino, já consegui resolver o problema, era a pasta de destino que estava com o nome errado.

Na empresa não usamos programas de e-mail, só webmail, então os vendedores geram o arquivo e eu mando por e-mail manualmente mesmo.

Gostaria de comprar o Monta Ribbons, mande os dados no meu e-mail ia.f@terra.com.br, se possivel do banco itau, para fazer o deposito/transferencia.

Emais uma vez agradeço por sua ajuda, são poucas as pessoas como você, que tem o espirito de ajudar os outros.

Ivan   30/04/2011 18:09:06

Observação, eu gero o pdf direto do formulario, tem o formulario de clientes, quando acionado o botão ele abre outro formulario filtrado e oculto, gera o pdf e salva na pasta de destino.

Tive problemas na filtragem, por que o codigo para o formulario é um pouco diferente, mais consegui e esta funcionando perfeitamente. abaixo o código que utilizei.

Dim strArquivo As String
Dim strLocal As String

strArquivo = "FICHA CADASTRAL - " & Me!cli_Nome & ".pdf"
strLocal = CurrentProject.Path & "\Ficha Cadastral\" & strArquivo

DoCmd.OpenForm "FICHA CADASTRAL", acViewPreview, , "[cli_Nome]=" & "'" & [cli_Nome] & "'", acHidden
DoCmd.OutputTo acOutputForm, "FICHA CADASTRAL", acFormatPDF, strLocal
DoCmd.Close acForm, "FICHA CADASTRAL"

Avelino Sampaio   01/05/2011 11:28:03

Ivan,

que ótimo que conseguiu!

IMPORTANTE: Na montagem do nome não pode ter os seguintes caracteres:

/ | \ ? * : " < >

Se tiver, utilize a função REPACE() para substituir por um que seja válido. Exemplo:

strArquivo = "Proposta" & REPLACE(me!nProposta,"/","_") & ".pdf"

Sucesso

Ivan   31/05/2011 17:16:31

bom dia, estou em dúvida

se enviar um arquivo em PDF e a pessoa que receber não tiver instalado o mesmo
ela consegue abrir?

Avelino Sampaio   01/06/2011 04:00:14

Ivan,

não conseguirá abrir. Hoje em dia tem sido raro alguem não ter um leitor de PDF instalado mas pode acontecer.

Oriente o seu cliente, informando o link para baixar o adobe, caso não ele não tenha ainda instalado.

Sucesso!

Rodrigo Oliver   07/06/2011 18:00:38

Muito bom!

sandra Padilha   11/08/2011 11:02:45

Bom Dia,
Eu tenho um programa criado no access com todos os dados do cliente, compras, vendas porem eu gostaria de enviar e-mails de meus veiculos para eles, como faço?

Grata

sandra

Fabrício Papa   12/08/2011 10:02:19

Sr. Avelino, bom dia!

Tenho observado seus tutoriais e apreciado muito.
Criei uma ribbon para impressão de relatórios que possui o seguinte comando:

[customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"]
[ribbon startFromScratch="true">]
[tabs]
[tab id="tabPrintPreview" label="Relatório" visible="true"]
[group id="grpPrint" label="Impressora"]
[button idMso="PrintDialogAccess" size="large" label="Imprimir" imageMso="PrintDialogAccess"/]
[/group]
[group id="grpZoom" label="Zoom"]
[splitButton idMso="PrintPreviewZoomMenu" size="large" visible="true"/]
[toggleButton idMso="ZoomFitToWindow" size="large"/]
[toggleButton idMso="ZoomOnePage" size="large"/]
[toggleButton idMso="PrintPreviewZoomTwoPages" size="large"/]
[/group]
[group id="grpClosePreview" label="Fechar Relatório" visible="true"]
[button idMso="PrintPreviewClose" size="large" label="Fechar" imageMso="PrintPreviewClose"/]
[/group]
[/tab]
[tab id="tabUtil label="Utilitários" visible="true"]
[group id="grpSendMail" label="E-mail" visible="true"]
[button idMso="FileSendAsAttachment" size="large" label="Enviar" imageMso="FileSendAsAttachment"/]
[/group]
[/tab]
[/tabs]
[/ribbon]
[/customUI]

Acontece que quando estou no modo de criação o botão idMso="FileSendAsAttachment" funciona perfeitamente (abre o opção de escolha de formatos de arquivos, escolho a opção *.pdf, abre o outlook com o arquivo anexado e envia o e-mail).
Porém quando abro o banco de dados no modo de execução o botão desaparece, fica somente a guia.
Como resolvo este problema?

Utilizo Office 2007.

Avelino Sampaio   12/08/2011 14:59:05

Sandra,

tem um quadro aqui no artigo, chamado de "Artigos relacionados". Clique na opção "Access x outlook" e veja se a materia irá lhe atender. Tem outro artigo na seção tutoriais, que uso o CDO e que vale apena também dar uma conferida

Sucesso!

Avelino Sampaio   12/08/2011 15:14:32

Fabrício,

force a visualização do botão com o atributo visible="true"

button idMso="FileSendAsAttachment" size="large"
label="Enviar" imageMso="FileSendAsAttachment" visible="true"

Sucesso!

Marcos Rocha   19/08/2011 11:25:43


fiz o Download desse exemplo e estou tentando adicionar o Botão ao meu formulário
porem estou com duvidas de onde alterar no código para esse botão funcionar
tenho Tabela, Consulta, Formulario e Relatório já criados
Para esse Botão Funcionar seria só alterar o nome de onde ele busca as informações em seu Exemplo?
Grato


Marcos Rocha   19/08/2011 15:59:07

Várias vezes repete "nproposta"
nProposta = " & Me!nProposta
qual a finalidade desse comando

Lívia Ferreira   25/08/2011 11:23:05

Olá Avelino procurei dias e dias esse codigo que achei no seu site, fico feliz por conseguir resolver meu problema, porem no segundo dia que eu ja tinha implantado esse codigo ao meu BD, apareceu a seguinte mensagem "ERRO EM TEMPO DE EXECUÇÃO" '429;
"CONTROLE ACTIVEX NÃO PODE CRIAR OBJETO"
Ao depurar ele seleciona essa parte do seu codigo "Set objOut = CreateObject("Outlook.application")"
se nao for muito incomodo vc poderia me ajudar???
Obrigada

Avelino Sampaio   25/08/2011 12:17:13

Livia,

a principio te diria que é um erro de falta de referência mas como vc disse que já havia funcionado...

Qual é versão do seu Access ? Se for o 2007, está com o pacote SP2 de atualização instalado ?

No aguardo

Ivan Allessi   06/11/2011 12:31:25

Boa tarde Avelino,

Como faço para colocar o Assunto e o email do destinatario pré definido. Envio varios emails por dia para cada setor: Compras, Vendas, Cadastro etc, para cada setor eu criei formularios diferentes e tals, Estou no formulario de Cadastro e preciso enviar as informações para o setor de cadastros para avaliarem o cliente, entao preencho as informações todas, gero o arquivo em PDF filtrado tudo certo, mais como envio sempre para a mesma pessoa, queria colocar o email dela e o assunto ja pré definido.

Tentei varias veses mais nao consigo, pela macro EnviarObjeto até funciona, mais nao filtra.

Avelino Sampaio   08/11/2011 06:33:57

Ivan,

Vá na seção dicas aqui do site e veja se o artigo "Access 2007 x Outlook 2007" lhe ajuda.

Sucesso!

Cleber Caetano   08/11/2011 16:07:56

Boa tarde!
Como faço para qndo exportar o relatório e abrir a mensagem para enviar já preencha os compa Para: e Assunto:, pois os mesmos já constam no relatório.

Avelino Sampaio   08/11/2011 18:00:22

Cleber,

vá no artigo, que indiquei acima, para o nosso amigo Ivan.

Bom estudo!

ARILSON   16/11/2011 18:44:20

Olá posso usar outro provedor de e mail ou somente o outlook?

Avelino Sampaio   16/11/2011 20:09:12

Arilson,

pode usar outro provedor. Na seção "tutoriais" aqui do site tem um artigo sobre CDO.

Bom estudo!

Roni   11/01/2012 17:23:21

Avelino,

Baixei este exemplo e ao clicar no botão para "Enviar proposta" é exibido erro:

"Erro em tempo de execução '2282':
O formato no qual voce esta tentando enviar o objeto atual não está disponivel."

Eu tenho que fazer referencia a algum objeto?

Obrigado!

Avelino Sampaio   11/01/2012 18:03:51

Roni,

atualize o seu office 2007 com o pacote Sp3. Vc poderá baixar esta atualização pelo site da Microsoft, no setor de downloads.

Sucesso!

Roni   11/01/2012 18:33:43

Avelino,

O arquivo é este?

The 2007 Microsoft Office Suite Service Pack 3 (SP3)

Pois, tem varios...

Avelino Sampaio   11/01/2012 18:40:10

Roni,

copie e cole o endereço abaixo no seu navegador

http://www.microsoft.com/downloads/details.aspx?FamilyID=0e40bbe7-1422-40ea-912d-2a29d709f93f&DisplayLang=pt-br

Sucesso!

Roni   11/01/2012 18:49:57

Obrigado Avelino!

Já estou fazendo o download.

Abraço!

Roni   12/01/2012 10:18:19

Bom dia Avelino!

Fiz a atualização que voce indicou e o exemplo passou a funcionar perfeitamente. Alias, como sempre, um excelente exemplo.

Muito obrigado por mais esse exemplo compartilhado e pela grande ajuda.

Eder   30/01/2012 20:16:27

Avelino Boa noite, parabens mais uma vez pelo tutorial, preciso de antes de enviar o email fazer a verificação com a internet, para ter certeza q o email sera enviado.

Grato.

Avelino Sampaio   31/01/2012 05:37:31

Eder,

copie o link abaixo e abra no seu navegador. Irá encontrar no post várias técnicas.

http://comunidade.itlab.com.br/eve/forums/a/tpc/f/273606921/m/4267061033?r=4267061033#4267061033

Bom estudo!

Clairton Alves   18/02/2012 19:11:02

Boa Noite Avelino!

Primeiramente quero parabenizar por este tutorial, excelente!!
Consegui fazer com que ele salve o aquivo, porem não consigo abri-lo como PDF, quando abro o arquivo surge esta mensagem:
"O Adobe Rider não pode abrir "RelatórioTal.pdf" porque não há suporte a este tipo de arquivo ou esta danificado( por exemplo, foi enviado como anexo de email e não foi decodificado corretamente)." Onde eu posso estar errando?
Abraços!

Avelino Sampaio   19/02/2012 08:57:53

Clairton

Atualize o seu Office 2007 com o pacote Sp2 ou Sp3. É que a versão NÃO atualizada, de fato, não dá suporte ao PDF.

copie e cole o endereço abaixo no seu navegador, para realizar o download da atualização:

http://www.microsoft.com/downloads/details.aspx?FamilyID=0e40bbe7-1422-40ea-912d-2a29d709f93f&DisplayLang=pt-br

Sucesso!

Sérgio de Faria   21/02/2012 18:13:51

Boa noite Avelino.

Gostaria de parabenizá-lo pelo aprendizado que nos proporciona. Estou aplicando o método OutputTo do objeto DoCmd e dá o seguinte erro 'A ação OutputTo foi cancelada.'. Este erro se dá no Notebook. Ocorre que no meu desktop o código funciona perfeitamente, embora esteja usando o Access 2010 em ambos os computadores:
Abaixo segue o código utilizado com clicar em um botão:

DoCmd.OpenReport "rptFicha", acViewPreview, , "Código=" & Me.Código, acHidden
DoCmd.OutputTo acOutputReport, "rptFicha", acFormatPDF, CurrentProject.Path & "\Relatorios\" & "Código " & Me.Código & "-" & Me.txtNome & ".pdf", True
DoCmd.Close acReport, "rptFicha"

Solicito o envio de informações no meu e-mail: sergiodfaria@hotmail.com sobre como adquirir o montaribbons. Preferência para Banco do Brasil.

Grato.

Avelino Sampaio   22/02/2012 06:59:06

Sérgio,

o erro pode estar no seu relatório e não no OutPutTo. Mantenha ativo apenas a abertura do relatório e no modo visível para ter a certeza se o relatório esta ok.

O local do seu BD no notebook é mesmo do desktop ?

No aguardo

Carlos Eduardo   25/02/2012 20:16:14

E ai galera... Ótimo Site...
Tenho uma dúvida... Tem como automatizar o envio também... Explicando melhor...
Quero que o access exporte para PDF, anexe o PDF no formulário do Outlook, preencha os campos dos destinatários, cópias, assunto e texto do email (até agora feito pelo tutorial acima)... mas quero que além disso ele envie o email sem nenhuma ação do usuário e volte a tela do form...

Então depois do "objmail.Display" tem um comando para encaminhar o email e voltar o foco ao form do access...


Avelino Sampaio   27/02/2012 06:18:47

Carlos

Sim, tem como automatizar. Vá na seção "DICAS" aqui do site e veja o artigo "Access 2007 x Outlook 2007".

Bom estudo!

Carlos Eduardo   28/02/2012 00:26:52

Avelino,

Boa Noite...

"Access 2003 x Outlook 2007" funciona o mesmo código... posso ter errado em alguma coisa... mas o access retorna a mensagem que o Active X não pode criar o objeto....

"Access 2003 x Outlook 2003" pode funcionar???


Avelino Sampaio   29/02/2012 07:54:37

Carlos,

o Access 2003 não gera arquivo de PDF. Então não irá funcionar.

para gerar arquivos em PDF na versão 2003, baixe o exemplo do site do LEBANS

http://www.lebans.com/reporttopdf.htm

Sucesso!

danilo   15/04/2012 16:57:43

fiz um banco de dados no access 2003 e um relatório, no relatório estou tentando colocar um comando para que ele abra em um determinado periodo, usei um formulario do modelo do access de despesas, só que ele, mesmo que eu coloque o período de datas nele, e a data que eu quero não tenha dados nenhum, ele abre todas as datas,o modelo que eu peguei foi "intervalo de datas do relatório" e copiei tambem o modulo "código global", o que será que está faltando!!!

danilo   15/04/2012 16:57:47

Fiz um banco de dados no access 2003 e um relatório, no relatório estou tentando colocar um comando para que ele abra em um determinado periodo, usei um formulario do modelo do access de despesas, só que ele, mesmo que eu coloque o período de datas nele, e a data que eu quero não tenha dados nenhum, ele abre todas as datas,o modelo que eu peguei foi "intervalo de datas do relatório" e copiei tambem o modulo "código global", o que será que está faltando!!!

Avelino Sampaio   16/04/2012 06:32:09

Danilo,

aqui mesmo na seção "Tutorias", estude o artigo: "Aprenda sobre Filtragens". Lá vc encontrará uma vídeo-aula e um aplicativo com vários exemplos.

Bom estudo!

Ivair Martins   19/04/2012 13:41:43

Avelino, Boa Tarde muito boa as suas explicaçoes.
Parabéns.
Duvida, fiz um programinha no Access 2007 e tem um formulario para mandar email dos Pedidos, quando uso Access2007 x Outlook2007 tudo bem ele envia normalmente, mas quando executo o Programa em outro computador dá erro.
Obs. Na outra máquina tá rodando com runtime Access 2007 e o Outlook é 2003.
Access2007 x Outlook 2003 não funciona???
Obrigado...

Avelino Sampaio   20/04/2012 04:08:43

Ivair,

não sei ao certo se funcionaria com o outlook 2003. A única certeza é que o Access 2007 tem que estar com o pacote de atualização Sp2 ou Sp3, para que possa gerar o arquivo em PDF. Verique então se o Access 2007 está atualizado.

Sucesso!

Ivair   20/04/2012 11:40:54

Avelino, Bom dia
Então ele gera o arquivo PDF normalmente, porque eu usei os codigos acima postados e ele funciona perfeitamente quando é Access 2007 x Outlook 2007, mas quando o Outook é 2003 aparece esse erro:
O BD ou Projeto contém uma referencia desfeita ou ausente no arquivo "MSOUTL.OLB" versão 9.3.
Eu acho que no VBA quando a gente poe a referencia no Access 2007 aparace a referencia OUTLOOK 12.0 só que no Outlook 2003 aparece a referencia OUTLOOK 11.0.
Na referencia aparece MS Access 12.0 e logo abaixo a referencia MS Outlook 11.0 eu acho que deve ser incompatilidade.
Teria como fazer alguma coisa via codigo.
Desculpe o tamanho do Texto. Obrigado...


Sofia   21/04/2012 17:59:11

Ola Avelino,

O seu artigo foi muito util para o meu trabalho academico, mas eu preciso enviar um e-mail nao atraves do outlook, mas sim de um webmail (ex. hotmail, gmail...).
Gostaria de saber como se faz.

Obrigada

Avelino Sampaio   21/04/2012 18:01:51

Sofia,

acesse o tutorial "Como enviar email, via SMTP ..." ,aqui do site.

Bom estudo!

Avelino Sampaio   22/04/2012 07:37:15

Ivair,

veja que neste meu código eu usei tudo como "Objeto", justamente para não depender da referência. Retire a referência e teste. Teste também sem a referência com o Access 2007 x Outloo 2007.

Sucesso!

Ivair   23/04/2012 13:57:49

Boa tarde Avelino, então eu entrei no forum Access 2007 X Outlook 2007 e o meu programinha é com aqueles codigo e vi que tem a referencia Outook 2007 12.0, mas o meu problema é que estou tentando fazer ele funcionar com o Outlook 2003 e a referencia que aparece é Outlook 2003 11.0, eu preciso que ele funcione com outra Versao do Outlook, pq na maquina que eu vou usar o Programa nao tem o Access eu vou instalar o Runtime 2007 Portugues, e o Office dessa maquina é a versão 2003. Precisaria que o programa rastreasse a versao do Outlook. Não sei se expliquei direito.
Obs. Na minha Maquina só o Outlook é 2003 o resto é Office 2007 eu mantive o Outlook 2003 justamente para tentar resolver esse problema, pq na outra máquina o Office é 2003.
Obrigado...

Avelino Sampaio   24/04/2012 06:46:28

Ivair,

o artigo "Access 2007 x outlook 2007" possui um recurso que não funciona na versão do Outlook 2003. Este recurso é o de selecionar a conta que deve ser tirado.

Ou vc usa tudo como Object, conforme este meu artigo. Assim vc se livra do uso da referência. Ou vc ativa a referência do 2003 (na sua máquina). Assim quando chegar no cliente a referência vai estar correta.

O outlook 2003 tinha outra questão que era o quesito segurança. Creio que seu cliente terá que clicar num OK para proseguir com o envio.

Perguntas:

Ativando a referência do 2003 na sua máquina, o código funciona ?

Tem que ser com Outlook ? Aqui no site temos uma matéria que aborda o envio de email usando o CDOSys.

Aguardo resposta.


Ivair   24/04/2012 10:29:35

Obrigado Avelino,
O erro dá ativando ou nao a referencia do 2003, a msg é a seguinte: tipo definido pelo usuario não foi definido. É isso mesmo que vc explicou acima no artigo Access 2007 x Outlook 2007 a respeito de selecionar a conta. Eu vou tentar usar como Object mas tá dando um erro: é que quando eu envio um email apos o outro dá uma msg de "A operação falhou" aí eu abro o Outlook 2003 e o email esta na caixa de saida, eu vi um codigo de abrir e fechar o Outlook, pq quando eu abro e fecho o Outlook volta ao normal, esse codigo é assim:
Sub AbreOutlook()
Dim Olook As Outlook.Application
Set Olook = CreateObject("Outlook.Application")

Dim ns As Outlook.Namespace
Dim Folder As Outlook.MAPIFolder

Set ns = Olook.GetNamespace("MAPI")
Set Folder = ns.GetDefaultFolder(olFolderInbox)

Olook.Explorers.Add Folder

'faz o que tem que fazer

Olook.Quit
Set Olook = Nothing

End Sub

Pergunta: É possivel fazer esse codigo como Object?. Se for vc poderia me enviar?
Existe uma maneira de saber que o Formulario de envio de email criado foi fechado pelo Botao Fechar ou Esc?. Essa ultima pergunta é pq quando abre o formulario de envio, o arquivo PDF já foi gerado e fica gravado na Pasta "Enviados" OK, mas se por acaso eu nao queira enviar o email fechando o Formulario gostaria que o Arquivo fosse deletado da Pasta já que o email nao foi Enviado.
Desculpe pelo Texto enorme.
Obrigado...



Avelino Sampaio   25/04/2012 06:14:29

Ivair,

não me agradou vc fechar e abrir o Outlook. Não faz muito sentido. Mantenha o outlook sempre aberto, mesmo antes de mandar o primeiro email. Na seção Dicas, eu tenho um artigo de como vc investiga se o outlook está aberto. Tente criar um intervalo entre um email e outro.

Use a função Kill() para deletar o arquivo de PDF.

Sucesso!

Ivair   29/04/2012 17:36:04

Boa Noite Avelino
Obrigado.
Vou dar uma olhada na Seção Dicas.

Abraços...

Claudio   14/05/2012 19:48:13

Avelino,

gostaria de saber se seria possivel ao clicar no botão enviar o pdf para impressão e ao mesmo tempo enviar um email para o destinário fixo

Claudio   25/05/2012 08:09:42

Caro Avelino, mais uma ajuda se possivel eu coloquei a função "objmail.To = email" para mandar o email porém o campo email está em outra tabela, na tabela principal só guarda o código, como faço para buscar o campo email.

tentei fazer uma consulta de acrescimo porém fica pedindo para o usuário confirmação para atualizar o campo.

abs,




Claudio   25/05/2012 17:29:53

complementando eu tentei usar este código porém não funciona.
objmail.To = DLookup("email_gestor", "gestor", "codigo =’" & Me.Gestor & "’")

abs,

Avelino Sampaio   28/05/2012 05:59:33

Claudio,

se o seu código for do tipo número, tire os apóstrofes.

objmail.To = DLookup("email_gestor", "gestor", "codigo =" & Me!Gestor)

Sucesso!

Alvaro   21/06/2012 19:09:41

Boa noite,
Alguem me pode ajudar,
tenho base de dados access de clientes e quero imprimir automaticamente o relatorio para cada cliente e enviar.
Não sei se é possível.
Abraço Pedro

Fabricio Roger   13/07/2012 10:31:37

Avelino, sou um grande fão seu... e aplico diversas soluções propostas por você em meus aplicativos, porém tenho uma dúvida que acredito que para vc seja simples, mais tenho alguma dificuldade.
O exemplo aplicado é referente a um determinado relatório, gostaria que a função fosse aplicada ao relatório que estivesse aberto.

Ex: Docmd.OutputTo acOutputReport,"(Relatorio que esta aberto no momento)",acformatPDF,strLocal

Como ficaria o codigo?

Desde já agradeço.

Fabricio Roger   13/07/2012 11:33:09

Avelino, bom dia! Já consegui uma solução, posto aqui como ficou meu código caso alguém já tenha tido a mesma dúvida:

Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
For Each obj In dbs.AllReports
If obj.IsLoaded = True Then
'TxtNArquivo, vem de uma text box do frmgerar
DoCmd.OutputTo acOutputReport, obj.Name, acFormatPDF, Me.TxtNArquivo.Value & ".pdf"
End If
Next obj

Avelino Sampaio   13/07/2012 14:10:28

Fabricio,

fico muito agradecido pela sua contribuição.

Se tiver sempre com um único relatório aberto, talvez assim possa funcionar:

DoCmd.OutputTo acOutputReport, reports(0).name, acFormatPDF, Me.TxtNArquivo.Value & ".pdf"

Sucesso!

Douglas Andrade   23/07/2012 11:23:57

Bom dia Avelino,

Gostaria de saber se pode me ajudar..

Estou utilizando o OutputTo para um relatório, e o tamanho dele está com basicamente 300kb.
Eu precisava diminuir esse tamanho, já retirei a imagem de logotipo para testar, porém continua quase a mesma coisa..

O que eu fiz para testar foi imprimir o relatório utilizando o cutePDF (impressora pdf), e ai o tamanho ficou bom, foi pra 71kb, porém o relatório tem que ser gerado automaticamente, da mesma forma como o OutputTo faz.. Tem alguma dica pra mim?

Obrigado!

Claudinei A Santos   23/07/2012 17:58:49

Boa tarde!
Sei que esse topico e antigo eu utlizo o seguinte código ( envia em formato do word) poderia me ajudar a implementa-lo par ser enviado em pdf?
Dim strstrSaudacao As Variant
If Time() > #6:00:00 PM# Then
strstrSaudacao = "Boa Noite! " & vbCrLf & Forms!Orcamento.Contato & "." & vbCrLf
ElseIf Time() > #12:00:00 PM# And Time < #6:00:00 PM# Then
strstrSaudacao = "Boa Tarde! " & vbCrLf & Forms!Orcamento.Contato & "." & vbCrLf
Else
strstrSaudacao = "Bom Dia! " & vbCrLf & Forms!Orcamento.Contato & "." & vbCrLf
End If

DoCmd.SendObject acReport, "Orçamento", "RichTextFormat(*.rtf)", Forms!Orcamento.Email, , , "Pedido n.º " & Forms!Orcamento.CpNotaFiscal, strstrSaudacao & vbCrLf & "Segue em anexo cópia do pedido descrito no campo assunto dessa mensagem, para sua conferência." & vbCrLf & vbCrLf & vbCrLf & " Atenciosamente " & vbCrLf & vbCrLf & Forms![Menu Principal].Nomeusu & vbCrLf & "Depto de Vendas " & vbCrLf & "Churrasqueiras Assa-KI" & vbCrLf & vbCrLf & " Fone (43)3258-2549" & vbCrLf & "comercial@refrichopp.com.br", True, ""


DoCmd.Close acForm, "Caixa de DiálogoOrçamento"
DoCmd.Close acForm, "Complemento"
DoCmd.OpenForm " Menu Principal"

Avelino Sampaio   25/07/2012 08:20:13

Douglas,

A única dica para o OutPutTo que vejo é vc baixar a qualidade de impressão, usando o argumento acExportQualityScreen , na última linha.

Sucesso!

Avelino Sampaio   25/07/2012 08:29:59

Claudinei,

Basta trocar para acFormatPDF

DoCmd.SendObject acReport, "Orçamento", acFormatPDF, Forms!Orcamento.Email, , , "Pedido n.º " & Forms!...

Lembrando que na versão 2007 do Office é preciso atualizar com o pacote Sp2 ou Sp3, para funcionar o PDF.

Sucesso!

Claudinei A Santos   25/07/2012 15:10:22

Muito obrigado!
Era esse o problema eu eatava usando o access 2003 e não funcionava
Agora deu certo

Limark Matos   06/08/2012 13:29:15

Caro amigo Avelino, parabens pela postagem... e gostaria de saber como criar um campo com o email de um cliente (es) por exemplo e ao clicar no botao altomaticamente encaminhe o email. vamos supor que tenhamos 03 funcionarios, sendo que cada um utiliza um ramal diferente, e ao final do mes seja gerado uma fatura com as ligações de cada ramal, porem preciso que para cada funcionario seja encaminhado o relatorio por email de uma unica vez... contato: limark.souza@gmail.com.
no mais agradeço a atenção.

Roxo   07/08/2012 20:19:42

Avelino, primeiro gostaria de agradecer pela ajuda, pois já está funcionando para gerar o relatório em PDF. Só que quando gero o relatório ele gera e salva na pasta direto, tem como quando gerar o relatório ele fique aberto na tela ( Desktop ), em PDF. Pois então o usuário tem a opção de imprimir, anexar ao e-mail ou simplesmente só fechar e deixar salvo na pasta. Pode ser antes de salvar ou depois de salvar, mas gostaria de ter acesso direto ao relatório ser ter que ir na pasta e localizar.

Roxo

Avelino Sampaio   08/08/2012 06:52:10

Roxo,

use o comando FollowHyperlink para abrir o PDF. Exemplo:

application.FollowHyperlink strlocal

Sucesso!

Roxo   09/08/2012 00:09:00

Avelino !
Excelente, muito obrigado
Coloquei a funcionar o e-mail também, só me ficou uma duvida
No forms Clientes tenho um campo [E-mail], onde cadastro o end. eletronico do cliente, é possivel o access colocar o endereço do e-mail do cliente referente ao orçamento direto no outlok, desta forma é só clicar em enviar e pronto.


Avelino Sampaio   09/08/2012 06:12:49

Roxo,

vale apena vc passar pela seção DICAS aqui do site e ler o artigo Access x Outlook

objMail.To = ... 'destinatário
objMail.CC = ... 'com cópia
objMail.BCC = ... 'Com cópia oculta

Bom estudo!

Leandro Romariz   16/08/2012 23:07:09

Boa Noite Avelino,
Estou tentando rodar o BD de exemplo (email_Outlook.accdb), contudo ao clicar no botão enviar relatório no formado .pdf aparece o erro ( 2501 A ação OutputTo foi cancelada ) ainda não consegui resolver o problema. Fiz o download no desktop do meu notebook, poderia me ajudar por favor ?

Patricia   14/09/2012 20:45:34

Tem como se controlar se todos emails que eram para ser enviados, realmente foram, ou se algum falhou?

Por exemplo, caso algum destinatario da lista de email for invalido, ou nulo, assinalar em uma tabela ou algo do tipo?

Grata

Marcelo Santos    21/09/2012 11:17:34

Bom dia estou com a seguinte duvida estou precisando fazer um relatorio de debito e credito
onde debito pego de uma tabela e credito de outra tabela para dar o resumo no final

alguem pode me ajudar como fazer isso

Obrigado

Clineo França   15/10/2012 17:15:00

A função para enviar email automático é a seguinte:
Adicione o arquivo MSOUTL.OLB na pasta c:\arquivo de programas\microsoft office/offfice14
Inclua na referencia o Microsoft Outlook 14.o Object Library

Function EnvioAutomaticoDeEmail(assunto, mensagem, destinatario)
'By JPaulo ® Maximo Access
Dim strAplicacao As Outlook.Application
Dim objMail As Outlook.MailItem
Dim strFicheiro As String

Set strAplicacao = New Outlook.Application
Set objMail = strAplicacao.CreateItem(olMailItem)
strFicheiro = "\\storage1\usuarios\# Sistema Bolsistas\ImpostoRenda_Email.pdf"
With objMail
.Subject = assunto
.Body = mensagem
.To = destinatario
.Attachments.Add (strFicheiro)

On Error Resume Next
.Send

If Err.Number = 287 Then
End
End If
End With
End Function

Paulo Cesar   09/11/2012 14:03:16

Adaptei o codigo que foi utilizado nesse tutorial no meu banco de dados e funciona perfeitamente. Obrigado pela contribuição.
Gostaria entretanto de implementar, quando fosse aberto a janela de mensagem do outlook já com o anexo em pdf, sairia preenchido o endereço de e-mail (coipado do formulário), o assunto e dizeres no campo da mensagem. Assim, só precisava enviar a mensagem. É possivel adicionar nesse codigo?
Obrigado e parabéns pelo trablaho

Avelino Sampaio   11/11/2012 18:21:41

Paulo Cesar,

vá na seção Dicas aqui do site e veja o artigo "Access 2007 x Outlook 2007"

Bom estudo!

Henrique   07/12/2012 11:38:30

Bom dia, cara me ferrei muito, mas agora parece que esta funcionando, porem, aind é viavel ao abrir a nova mensagem do e-mail, colocar um texto padrão? trazer de uma tabela um, ou uma lista de endereços de e-mail?

Pust este material que você disponibilizou na net, me ajudou muito, fico grato, e caso ainda possa me ajudar com estas duas questões a mais.


Avelino Sampaio   10/12/2012 07:22:07

Henrique,

vá na seção "Dicas" aqui do site e leia o artigo "Access x Outlook".

Bom estudo!

André Lindolfo   18/12/2012 18:47:04

Oi Mestre Avelino,
Você me deu uma grande ajuda uma vez e por isso volto a postar.
Tenho um formulário (em branco) e nele tenho vários subs, alguns como formulário simples, outros como folha de dados e outros como gráfico dinâmico. Todos estes subs tem como origem uma pesquisa, que se desdobra em outras para poderem gerar os subs.
Estou basicamente com 2 problemas:
1º -> Algumas vezes quando executo o formulário alguns subs não apresentam informação, ficam em branco. Coloco para executar novamente (sem mudar nenhum critério) e aparecem. Os subs ficam aparecendo e desaparecendo do formulário principal.
2º --> Quando mando gerar este formulário (com os subs dentro dele) em PDF através do comando DoCmd.OutputTo acOutputForm, "Sumario-Regional", acFormatPDF, .... não aparece a maioria dos Subs, até fica a borda onde eles deveriam aparecem, mas sem informação dentro.

Avelino, não sei se tem como aumentar o tempo de processamento para dar mais tempo para o access reunir as informações antes de aparecer na tela. Acho que é muita informação para ele processar num curto espação de tempo.
Tem alguma solução para este problema?
Grd abraço
André Lindolfo

Fernando Franco   24/02/2013 07:31:48

O artigo está mt bom. Implementei DoCmd.OutputTo acOutputReport, "Arq_PDF", acformatPDF, CurrentProject.Path & "\" & Arq_PDF só que ele abriu uma caixa para seleecionar o formato. Estou com access 2000, como posso instalar o formato acformatPDF?

Avelino Sampaio   26/02/2013 06:29:19

Fernando,

a opção do PDF só funciona para as versões 2007 em diante.

Pesquise no site do Lebans que lá tem a rotina para usar o PDF na versão 2000

Copie e cole o endereço abaixo no seu navegador:

http://www.lebans.com

Sucesso!

André Lindolfo   04/03/2013 16:11:04

Oi Avelino, tenho relatório que exporto em pdf. Este relatório não está referenciado com nenhuma tabela ou consulta, na realidade criei apartir de um relatório em branco. Nele tem uns 5 sub-relatórios e estes sim estão vinculados a alguma consulta. O meu problema é que não estou conseguindo colocar o nome de acordo com o cliente. Tenho um formulário que tem os códigos dos clientes e aperto o botão para gerar estes relatório. Preciso colocar no nome o nome do cliente.
Abç
Parabéns pelo excelente tutorial.

Dirceu Albrecht   25/03/2013 01:54:04

Boa noite Avelino,

Estou usando com o Access RT 2010 e mesmo informando o formato acformatPDF, na hora de gerar ele exibe a tela para selecionar o formato. Sabe se no RT a variavel é outra?

Desde já agradeço qualquer informação.

Dirceu

Dirceu Albrecht   25/03/2013 02:33:52

Já descobri porque acontece....

é porque estou compilando no access 2000 entao nao existe a variavel acformatPDF declarada, para nao dar erro eu tinha declarado ela como String, neste cenário ele me pedia o formato... agora já está Ok..

Valew, parabens pelos artigos e posts.

Dirceu

silva   26/03/2013 03:21:57

queria saber como faz em arquivo.bat : pega a data do computador compara com a minha data especifica ex: 25/03/2013 se for a mesma deleta o arquivo banco de dados valor.mdb

sem usar o gerenciador de tarefas

Avelino Sampaio   26/03/2013 11:06:54

Silva,

copie ecole o link abaixo no seu navegar e garimpe o desejado

http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=arquivo+BAT

Sucesso!

PAULO HENRIQUE SOARES AMARO   05/04/2013 20:07:25

Gostei do exemplo, porém, tenho um relatório com 100 páginas, para 100 clientes, queria que cada página fosse salva com um nome específico para cada cliente.

Damaris Yuri Saito   11/04/2013 21:15:15

Cara, pode me tirar uma duvida... Tenho um Banco com Form no Access. e preciso que uma macro envie por email o form. Quando executo a macro ele gera um arquivo Pdf com todos os Formularios da banco. Como faço para a Macro enviar apenas 1 Form por email?

Avelino Sampaio   12/04/2013 10:26:32

Paulo Henrique,

entre em contato pela seção "Contato" aqui do site, para eu obter o seu email. Preciso de mais alguns detalhes, pois não ficou muito claro para mim.

No aguardo

Avelino Sampaio   12/04/2013 10:30:51

Damaris,

use o mesmo código adotado aqui neste artigo. No lugar do relatório, vc chamará o formulário com os dados já previamente filtrados.

Observe como ficaria a linha do outPutTo

Docmd.OutputTo acOutputForm ,"NomeDoFormulário", acFormatPDF, strLocal


Sucesso!

Valter   07/05/2013 00:37:40

usei os codigos vba daqui para gerar um arquivo pdf e anexar no outlook mas não esta dando certo gera um erro 429 ativex não pode criar objeto atualizei as referencias ao outlook 14.0 library mas não funcionou.

Avelino Sampaio   08/05/2013 06:18:17

Valter,

ao rodar o código em qual parte apresenta o erro, ou seja, fica marcado na cor amarela ?

Aguardo

Justino   19/05/2013 14:26:45

Muito obrigado Avelino você esta me ajudando muito com seus tutoriais.
Bom eu quero compra o seu produtos, mais tenho problema com internet, aqui no amazonas onde mora é muito lenta, para baixar os produtos depois de comprado.
Justinoguimaraes@gmail.com

NUNO   27/05/2013 11:34:56

Tenho uma duvida. tenho uma base de dados caseira que envia email atraves do Outlook. Funciona em alguns PC s e noutros não. Como posso contornar isso?

Run Time Error `429
ActiveX x componente can´t create object.

Ivan Allessi   10/07/2013 14:47:28

Olá Avelino, como vai?

Mais uma vez preciso de uma ajudinha sua.

Observe o codigo abaixo:

Dim strArquivo As String
Dim strLocal As String

strArquivo = "ROTEIRO " & Me!cli_Cidade & ".pdf"
strLocal = CurrentProject.Path & "\SK\Roteiro\" & strArquivo

'Abre o relatório devidamente filtrado e oculto

DoCmd.OpenReport "rltRoteiro", acViewPreview, , "idCidade=" & Me.idCidade, acHidden

' icCidade esta em um campo texto, é o código referente ao nome da cidade.

'Gera arquivo pdf do relatório previamente aberto e filtrado.

DoCmd.OutputTo acOutputReport, "rltRoteiro", acFormatPDF, strLocal

'Fecha o relatório

DoCmd.Close acReport, "rltRoteiro"


Quando filtrado apenas um registro no formulario, ele gera o PDF normalmente.

Mais eu preciso que filtre varios registros e salve em um PDF apenas.

Tem alguma dica ou artigo onde posso resolver esse problema ?

Alberto Pires   21/08/2013 17:01:49

Amigo estou com o seguinte erro, inclusive já atualizei a versão do office para SP3. O que devo fazer, já que isso não resolveu?
Segue o erro:
Você está tentando enviar o objeto atual em um formato que não é válido para esse tipo de objeto, ou os formatos que lhe permitem enviar os dados como Microsoft Excel, RTF, texto do MS-DOS ou arquivo HTML não estão presentes no Registro do Windows. Execute a Instalação para reinstalar o...

Avelino Sampaio   21/08/2013 17:06:58

Alberto,

SP3 de que Office ? 2003 ? Só funciona do 2007 em diante

Para o 2003 terá que usar programas externos. Tem exemplo no site do Lebans

http://www.lebans.com/toc.htm

Copie e cole o endereço no seu navegador.

Sucesso!

Alexsandro   26/08/2013 13:19:03

É possível enviar as mensagens de erro por e-mail?
Como se pode fazer isso?

Alexsandro   26/08/2013 13:19:19

É possível enviar as mensagens de erro por e-mail?
Como se pode fazer isso?

Everson Fernandes   26/08/2013 21:46:16

Sr. Avelino, primeiramente parabéns pelos seus posts, dicas preciosíssimas.
Gostaria de uma ajuda sua.

Tenho uma tabela com as seguintes colunas
Agencia; conta; cpf; contrato; modelo.

Gostaria de saber se é possível automatizar o processo, ou seja, preciso gerar um relatório para cada Agencia e consequentemente enviar o email para esta.

A referencia para o email seria o código da agencia também.

Exemplo: O sistema gera o relatório a agencia 500 e em seguida envia o email para esta. Os e-mails da agencias sempre começam com o seu numero, ou seja 500@banco.com.br.

tenho em media mil agencias dia, gostaria que o sistema gerasse estes mil relatórios e os enviassem automaticamente.

Obrigado.

Everson   28/08/2013 14:12:49

Everson Fernandes 26/08/2013 21:46:16

Sr. Avelino, primeiramente parabéns pelos seus posts, dicas preciosíssimas.
Gostaria de uma ajuda sua.

Tenho uma tabela com as seguintes colunas
Agencia; conta; cpf; contrato; modelo.

Gostaria de saber se é possível automatizar o processo, ou seja, preciso gerar um relatório para cada Agencia e consequentemente enviar o email para esta.

A referencia para o email seria o código da agencia também.

Exemplo: O sistema gera o relatório a agencia 500 e em seguida envia o email para esta. Os e-mails da agencias sempre começam com o seu numero, ou seja 500@banco.com.br.

tenho em media mil agencias dia, gostaria que o sistema gerasse estes mil relatórios e os enviassem automaticamente.

Se puder enviar algo no meu email agradeço.
everson2805@ig.com.br

Obrigado.

Samuel Lemos   28/08/2013 15:59:45

Avelino,

Seu site foi o único que jogou um pouco de luz na minha escuridão! risos...

Estou com um problema justamente pare executar aquilo que você menciona neste tópico - rodar uma consulta parametrizada de forma oculta e exportá-la de acordo com o parâmetro que o usuário utilizou.
Entendo um pouco de SQL, mas quase nada de VBA. Estou digitando o seguinte comando:

Function Macro1_Sub1()
On Error GoTo Macro1_Sub1_Err

DoCmd.SetParameter "SIGLA UPAG (* para todas):", Forms!Formulário1!Combinação0
DoCmd.OpenQuery "Consulta_DAS_por_UPAG", acViewNormal, acReadOnly
DoCmd.OutputTo acOpenQuery, "Consulta_DAS_por_UPAG", "ExcelWorkbook(*.xlsx)", "", False, "", , acExportQualityPrint


Macro1_Sub1_Exit:
Exit Function

Macro1_Sub1_Err:
MsgBox Error$
Resume Macro1_Sub1_Exit

End Function

Porém quando executo, o Access retorna a mensagem "O Microsoft Access não pôde localizar o nome 'SFA' inserido na expressão.
Onde estou errando?
meu email é habibs.samuk@gmail.com, mas caso você responda nesta página, estarei acompanhando aqui também.

Grato!

Hugo Furtado   20/09/2013 08:10:41

Estou com dúvida no inicio da pagina aquele código serve para guardar pdf numa pagina sempre que faço uma impressão?

Hugo furtado   20/09/2013 08:12:41

enganei me era pasta e não pagina
Estou com dúvida no inicio da pagina aquele código serve para guardar pdf numa pasta sempre que faço uma impressão?

Felipe Almeida   23/10/2013 11:42:51

Na linha em que gera o relatório e o nomeia, sempre está sendo salvo o relatório com todos os registros. O relatório não está sendo filtrado. Há alguma dica ou campo que eu tenha que revisar para conserta isso? Obrigado desde já.

Avelino Sampaio   24/10/2013 19:09:22

Felipe,

cole aqui a sua chamada do relatório para que eu identifique o erro na forma de filtragem.

Observe que no meu exemplo eu uso o filtro: "nProposta=" & Me!nProposta

DoCmd.OpenReport "rltProposta", acViewPreview,,"nProposta=" & Me!nProposta

No aguardo

Felipe Almeida   05/12/2013 14:53:39

Olá Avelino, gostaria apenas de filtrar o relatório e salvá-lo filtrado.
Para cada relatório, um pdf diferente salvo na mesma pasta. Pode me ajudar?

Att.

Douglas   13/12/2013 10:43:40

Seguindo este codigo:

Private Sub Comando49_Click()
On Error GoTo Err_Comando49_Click


Dim stDocName As String

stDocName = "Seu Chamado"
DoCmd.SendObject acReport, stDocName

Exit_Comando49_Click:
Exit Sub

Err_Comando49_Click:
MsgBox Err.Description
Resume Exit_Comando49_Click

End Sub

(Como consigo preencher os campos "Assunto" e "corpo do E-mail no momento do envio do relatorio "Seu Chamado"

Alessandra Mendes   04/01/2014 19:34:37

Boa Noite Avelino

Eu tenho a necessidade de salvar o PDF em pastas diferentes, como fazer?

Agradeço desde já!

Att.

patricia   23/01/2014 09:00:31

não consigo envia meus relatorios para minha supervisora pode me dize o passo a passo

Avelino Sampaio   24/01/2014 06:58:14

Patricia,

o passo a passo está no artigo. Você precisa ser detalhista no que está ocorrendo, para que eu possa ajudar efetivamente.

No aguardo

WAGNER GILSON   26/01/2014 21:30:26

Olá.
Gero no access 2013 consultas e relatórios como por exemplo, ofícios. Meu desejo é ao clicar um botão este enviaria automaticamente o ofício gerado via e-mail sem o outlook para uma determinada pessoa.

WAGNER GILSON   26/01/2014 21:30:39

Olá.
Gero no access 2013 consultas e relatórios como por exemplo, ofícios. Meu desejo é ao clicar um botão este enviaria automaticamente o ofício gerado via e-mail sem o outlook para uma determinada pessoa.

Avelino Sampaio   27/01/2014 05:08:53

Wagner,

leia o tutorial "Como enviar emails, via SMTP, usando o CdoSys"

Experimente também o comando Docmd.SendObject

Bom estudo!

wagnergilson@hotmail.com   14/02/2014 16:57:19

WAGNER GILSON 12/02/2014 20:38:57

Boa tarde amigos mestres.
Estou tentando enviar um relatório do access 2013 via email com o código abaixo.

DoCmd.OutputTo acOutputReport, "comunicação interna teste", "PDFFormat(*.pdf)", CurrentProject.Path & "\Relatórios\" & Format(Now, "mm-yyyy") & ".pdf", False, "", 0, acExportQualityScreen

O arquivo pdf está sendo gravado normal na pasta indicada mas eu gostaia que depois de gravado, fosse enviado por email do tipo "xxxx.mg.gov.br"
saudações.

Avelino Sampaio   14/02/2014 17:09:07

Wagner,

vá na seção DICAS aqui do site e veja o artigo Access x Outlook. Lá tem os códigos necessários.

Sucesso!

Fábio Kienen   24/02/2014 21:19:36

Olá, fiz o seguinte codigo no evendo sair do campo que checa se o memso está preenchido.
Private Sub TELEFONE_CONTATO_Exit(Cancel As Integer)

If IsNull(TELEFONE_CONTATO) Or TELEFONE_CONTATO = "" Then Exit Sub

Select Case Len(TELEFONE_CONTATO)
Case 8
TELEFONE_CONTATO = Format(TELEFONE_CONTATO.Text, "0000-0000")
Case 9
For x = 1 To 9
If Mid(TELEFONE_CONTATO, x, 1) = Asc("-") Then
Exit Sub
End If
Next x
TELEFONE_CONTATO = Format(TELEFONE_CONTATO.Text, "00000-0000")
Case 10

TELEFONE_CONTATO = Format(TELEFONE_CONTATO.Text, "(00) 0000-0000")
Case 11
For x = 1 To 11
If Mid(TELEFONE_CONTATO, x, 1) = Asc("-") Then
Exit Sub
End If
Next x
TELEFONE_CONTATO = Format(TELEFONE_CONTATO.Text, "(00) 00000-0000")
Case 14
For x = 1 To 14
If Mid(TELEFONE_CONTATO, x, 1) = Asc("-") Then
Exit Sub
End If
Next x
TELEFONE_CONTATO = Format(TELEFONE_CONTATO.Text, "(00) 00000-0000")
Case 15
For x = 1 To 15
If Mid(TELEFONE_CONTATO, x, 1) = Asc("-") Then
Exit Sub
End If
Next x
TELEFONE_CONTATO = Format(TELEFONE_CONTATO.Text, "(00) 00000-0000")




Case Else
MsgBox "Preenchimento incorreto.", vbCritical, "Erro entrada"
TELEFONE_CONTATO.SetFocus
DoCmd.CancelEvent
End Select

End Sub

William   06/06/2014 20:14:09

É muito bom o conteúdo do seu site, Avelino. Está de parabéns!
Especificamente estes códigos para enviar relatórios por e-mail, praticamente funcionam com qualquer objeto. Só tem que se atentar para trocar os tipos de objetos.
Muito bom mesmo!

Leandro   08/06/2014 12:14:46

Bom Dia,
Primeiro queria dar parabens pelo conteúdo e explicações do forum.
Sou realizando minhas primeiras implementações em Access e o site tem sido muito util.

Queria aproveitar ainda para perguntar se é possível enviar email com um relatório sempre que atualizado um campo de uma tabela.

Agradeço antecipadamente.

Fernanda Aguiar   17/07/2014 12:12:49

Bom dia Avelino, estive olhando seus posts e são ótimos, principalmente para alguém que não tem muita experiência com códigos. Estou precisando finalizar um sistema para a empresa onde trabalho. A questão é a seguinte.
Tenho um formulário onde faço um orçamento. Esse formulário traz informações de duas tabelas (produtos e orçamento). Preciso que nesse formulário de orçamento eu consiga fazer 2 coisas:

1º Ele me dê a opção de salvar o formulário como um arquivo normal (aparecendo cx de diálogo para escolher local e definir o nome para esse orçamento), pois são muitos orçamentos a serem feito, me permitindo então que possa abri-lo depois e editá-lo.

2º Que nele tenha um botão ou algo do tipo que me permita abrir o mesmo formulário só que em branco, me permitindo então começar a fazer um novo formulário.

Espero que me ajude Avelino, e desde já agradeço!

Avelino Sampaio   17/07/2014 13:55:16

Fernanda,

vá na seção BLOG aqui do site e baixe o aplicativo Telemax do artigo "Uma ajuda para quem está começando um negócio ou um projeto". Lá tem ótimos exemplos de como montar formulários de consultas a Pedidos e Ordens de Serviço e que irão servir como modelo para montagem do seu orçamento.

Bom estudo!


Tomé Vicente   22/09/2014 19:17:24

Artigo muito interessante,

Como posso enviar 2 anexos no mesmo mail ?

Aveino Sampaio   23/09/2014 04:44:21

Tomé,

você pode criar um laço com o FOR ou com DO WHILE e dentro deste laço utilize o método "objAnexo.Add" para ir adicionando os anexos.

Sucesso!

Felipe   02/10/2014 15:19:48

Sr. Avelino, à partir do seu código fiz uma macro para o excel para envio automático do e-mail. Porém ela funciona em alguns computadores, e em outros não. O erro é o "429 - componente ActiveX".

Já procurei todas as soluções em foruns mas nenhuma me serviu. Você poderia ajudar?

PS: os computadores são da empresa, será que as permissões de segurança estão influenciando?

Avelino Sampaio   02/10/2014 17:25:40

Felipe,

verifique se estão atualizados com o pacote (SP) mais recente. Se for a versão 2007, atualize com o Sp3

No aguardo

Madson   19/11/2014 16:45:03

Avelino,

Como vc faria para tratar um erro gerado pelo OutputTo? Tipo, se o relatório não tiver nenhum dado ou algum erro ao gerar o relatório.

Preciso tratar o erro, para parar a rotina, pois estou usando uma rotina onde uma das etapas é gerar o pdf, enviar por email, registrar o envio no banco de dados.

MILTON PEREIRA DOS SANTOS   20/02/2015 19:42:49

qual a sintaxe para usar o argumento acExportQualityScreen?

ADRIANO CÉSAR LUIS   23/02/2015 05:19:16

GOSTO MUITO DESTE PROGRAMA. OBRIGADO

Avelino Sampaio   23/02/2015 06:55:50

Milton

Experimente desta forma:

DoCmd.OutputTo acOutputReport, "rltProposta", acFormatPDF, strLocal, OutputQuality:=acExportQualityScreen

Sucesso!

Diego Silva   25/02/2015 21:22:05

Boa noite, graças ao forum consegui enviar meus relatórios por email

Tem algum comando que posso inserir pra evitar que eu volte em cadastro de cliente pra buscar o endereço de email do cliente?

Desde já agradeço pela atenção de todos aqui no UsandoAccess

Dimas Andrade   13/04/2015 16:56:23

Boa tarde!
É possível anexar um arquivo PDF em um e mail no access 2000?

Grato

Avelino Sampaio   14/04/2015 07:59:32

Dimas

vá no site do Lebans que lá tem o código para vc gerar PDF na versão 2000 do Access.

http://www.lebans.com

Sucesso!


RONALDO MONTEIRO   02/05/2015 12:47:40

Boa tarde!
Muito bom o seu exemplo e funcionou perfeitamente no meu sistema.
Gostaria de saber se é possível fazer com que o endereço de e-mail seja colocado no outlook (Para... e Cc...) automaticamente. Ou seja, puxar automaticamente do campo no formulário do aacces ou relatório.

Se for possível inserir um texto padrão também seria muito legal!

Jaime Dornelas   12/05/2015 11:28:22

Olá Avelino,

Tenho uma BD de recepção e envio de equipamento ( carros, trato, caminhões em geral...) com um formulário e dois sub-formulários, para gerar o relatório preciso de 7 botões para imprimir as 7 folhas que ele gera, 2 folha são dos 2 sub-formulários, uma folha para cada. O ID do relatório amarra eles!!!

Há alguma forma de usar um único botão e imprimir/gerar as 7 páginas de uma vez em um único arquivo e em uma sequência da capa, fl01, fl02, fl03,....fln???

Segue imagem da tela

Desde já o meu muito obrigado!!!

Att,

Jaime Dornelas


Jeferson Soares    19/05/2015 12:27:38

Tenho um Projeto para fazer, basicamente esta tudo pronto, só preciso fazer um botão para enviar um registro por email em pdf.. a pergunta e como fazer!!!!


Ana Carolina   05/06/2015 03:48:43

Tenho um relatório com diversos clientes. Preciso exportar em pdf um relatorio para cada cliente.
Exemplo: tenho o relatorio A. Preciso exportar o relatorio A divido por cliente. Como faco? Desde ja, obrigada pela ajuda.

Carol Lellis   24/07/2015 10:38:18

Bom dia!
Estou querendo enviar um formulário no corpo do e-mail, através do access, porém só consigo exportar para pasta na rede formatos que não aceitam como imagem. Consigo exportar e enviar como anexo, mas gostaria de enviar no corpo do e-mail. Será que tem como?

Desde já, Grata.

Avelino Sampaio   24/07/2015 10:54:26

Carol,

vá na seção DICAS aqui do site e veja o artigo "Access X Outlook (troca de contas, anexos, relatório no corpo, PDF, ...)"

Bom estudo!

Carol Lellis   28/07/2015 12:01:23

Avelino, Obrigada pela informação.

Teria algum exemplo de exportar relatório ou formulário em formato de imagem?
Ex: Tenho um relatório que gostaria de exportar para rede no formato .jpg ou .jpeg.

Desde já, Grata.

Fabricia Lima   17/11/2015 00:32:04

Eu sempre usei esse seu exemplo em meus projetos, mas agora fui desafiada a inserir o relatorio no corpo do email.

Avelino tem como adptar esse exemplo com codigo html de envio do mesmo relatorio no corpo do email?

Avelino Sampaio   17/11/2015 05:42:53

Fabricia,

vá na seção DICAS aqui do site e encontre o artigo ACCESS x OUTLOOK. Lá tem o código necessário para inserir o relatório no corpo do e-mail.

Sucesso!

Felipe Sagres   26/11/2015 14:49:09

Prezado Avelino, como colocar 2 / 3 e até 4 anexos no mesmo email?

Obrigado

Avelino Sampaio   26/11/2015 15:01:44

Felipe,

vá na seção DICAS aqui do site e leia o artigo: Access X Outlook (troca de contas, anexos, relatório no corpo, PDF, ...)

Bom estudo!

Marcelo Motta   03/12/2015 11:40:11

Olá Avelino, consegui usar boa parte do seu código em meu projeto, mas o OutLook 2007, que está instalado e com uma conta de email IMAP configurada, se recusa a funcionar, apresenta o erro "erro em tempo de execução '429':
O componente activeX náo pode criar o objeto...e ao clicar em "depurar"
Set objOut = CreateObject("Outlook.application")... esta destacado em amarelo;

Não sou programador, apenas um usuário aplicado e focado, meu mísero conhecimento em access está baseado em tutorias e foruns pela net...

Onde estou errando???

Marcelo Motta   03/12/2015 11:46:31

...Utilizei a dica de "Como saber se o Outlook está instalado e aberto?", e a menssagem "O Outlook não está instalado..." sempre aparece!!!!

sandracem@live.com   27/12/2015 09:44:45

orçamentos da reforma do banheiro valor total=1.800.00

Robson Rosseto   18/05/2016 12:47:10

Boa tarde Avelino,

Utilizei suas dicas para salvar em PDF e enviar por e-mail via smtp.
Porém, ao abrir o PDF em outra máquina, o mesmo abre em Branco, todas as páginas em branco, mas em minha máquina visualizo normalmente o pdf gerado.

-------------
Public Function SendPdfEmail()

Dim strArquivo As String
Dim strLocal As String
Dim strRelAberto As String
Dim strNomeRel As String
Dim strRelCap As String

strRelAberto = Application.CurrentObjectName
strRelCap = Reports(strRelAberto).Caption
strNomeRel = InputBox("Informe o nome do relatório a ser salvo", "Salvar PDF", strRelCap & " " & Replace(Date, "/", "-"))
strArquivo = strNomeRel & ".pdf"
strLocal = CurrentProject.Path & "\enviados\" & strArquivo

'Gera arquivo pdf do relatório previamente aberto e filtrado.
DoCmd.OutputTo acOutputReport, strRelAberto, acFormatPDF, strLocal

'Anexa o PDF para envio via SMTP
DoCmd.OpenForm "frmEmail", acNormal
Forms!FrmEmail!lstAnexos.AddItem strLocal & ";" & strArquivo
Forms!FrmEmail!lstAnexos.Requery
Forms!FrmEmail!txtAssunto = strNomeRel

End Function

---------------


Tem alguma idéia do que pode estar acontecendo?


Um grande abraço e parabéns pelo site.

Robson Rosseto   18/05/2016 15:14:46

Avelino,

Identifiquei a origem do problema, mas não sem solução.
O problema está no envio via Smtp quando esta anexo somente 1 arquivo (pdf, xls e etc), quando tem mais de 1 anexo o destinatário recebe os arquivos normalmente.
A estrutura do envio via Smtp eu usei a da dica: "Como enviar emails, via SMTP, usando o CdoSys - por Valdino Campos".
Vou estudar mais um pouco sobre esse procedimento e caso não resolva, posto a dúvida direta na dica de SMTP.

Obrigado novamente,

Sergio Viel   26/10/2016 16:44:25

Boa tarde, adaptei esse exemplo na minha aplicação e inseri o seguinte:

With objmail
.body = "Segue anexo o pedido nº " & [num_ped] & "
End With

Com isso ele não está mais inserindo a assinatura de email padrão existente no Outlook

Como faço para manter a assinatura padrão de email e inserir ao mesmo tempo o texto acima ?

Marcelo Souza   27/11/2016 09:06:05

Prezado Avelino,
Parabéns pelo seu desprendimento em ajudar as pessoas, "Fazer o bem sem medir a quem!"

Eu realizei alguns ajustes no seu código, pois minha necessidade é gerar Relatórios em PDF por setores, pois cada setor tem um tarefas específicas. No código abaixo, eu até consigo gerar os relatórios, mas a cada novo setor o Access me solicita que informe o parâmetro, que é o mesmo que já consta na instrução Rs!lotacao.

Segue o código:

im rs As Recordset
Set rs = CurrentDb.OpenRecordset("Unidades")

Do While Not rs.EOF
DoCmd.OpenReport "Relatório2", acViewPreview, , "Lotacao=" & rs!lotacao, acHidden
DoCmd.OutputTo acOutputReport, "Relatório2", "PDFFormat(*.pdf)", CurrentProject.Path & "\RelatóriosSemanais\" & rs!lotacao & ".pdf", False, "", 0, acExportQualityPrint
DoCmd.Close acReport, "Relatório2"
rs.MoveNext
Loop

MsgBox "Os registros foram exportados para PDF", vbInformation, "Concluído"

rs.Close
Set rs = Nothing

Eu preciso de com apenas um clique no botão gerar os 60 relatórios de tarefas individualizados para cada setor.

agradeço desde já

Sidney Rodrigues   07/12/2016 08:02:14

Cara, muito bom!

Excelente explicação e de facil entendimento. Parabens professor.


Envie seu comentário: