Gerar relatórios em pdf e enviar por email
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
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 já 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!
Artigos Relacionados
Como saber se o Outlook está instalado e aberto?
Access X Outlook (troca de contas, anexos, relatório no corpo, PDF, ...)
156 comentários MARLO 25/07/2023 00:16:14 Estou tentando adaptar a parte de cima dessa aula. Tenho um formulario de filtro, onde tenho um campo não associado que chamo de "txtAno", onde eu digito o ano o qual será o filtro do meu relatorio, e no relatorio tenho um Campo, também não associado que se chama txtAno, onde ira receber a informação do formulario quando for aberto, e assim poder fazer um filtro em subrelatorio que tenho dentro do relatorio. Em relatório normal, dentro do Access, eu consigo de boa, mas desejo que esse seja emitido em PDF. Como o codigo abaixo, gera o relatorio mais não funciona o filtro, pois não consegue achar o txtAno do relatorio. Dim strLocal As String strLocal = "C:\BaseIML\SeuRelatorio.pdf" 'Abre o relatório devidamente filtrado e oculto DoCmd.OpenReport "relExameCidade", acViewPreview, , "txtAno =" & [Forms]![frmRelatorioExames]![txtAno], acHidden 'Gera arquivo pdf do relatório previamente aberto e filtrado. DoCmd.OutputTo acOutputReport, "relExameCidade", acFormatPDF, strLocal, True 'Fecha o relatório DoCmd.Close acReport, "relExameCidade" Preciso de ajudar sandracem@live.com 27/12/2022 09:44:45 orçamentos da reforma do banheiro valor total=1.800.00 Sidney Rodrigues 07/12/2022 08:02:14 Cara, muito bom! Excelente explicação e de facil entendimento. Parabens professor. Marcelo Motta 03/12/2022 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!!!! Marcelo Motta 03/12/2022 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 Souza 27/11/2022 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á Avelino Sampaio 26/11/2022 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! Felipe Sagres 26/11/2022 14:49:09 Prezado Avelino, como colocar 2 / 3 e até 4 anexos no mesmo email? Obrigado Avelino Sampaio 17/11/2022 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! Fabricia Lima 17/11/2022 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? Sergio Viel 26/10/2022 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 ? António Carlos 20/10/2022 16:02:07 Parabéns pelo artigo Avelino. Está me ajudando muito. Estou gerando uma consulta.pdf, porém não tem espaço para todas colunas, ele gera no formato A4 e modo retrato, tem como gerar o documento consulta.pdf em formato de paisagem? Carol Lellis 28/07/2022 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. Avelino Sampaio 24/07/2022 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 24/07/2022 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. Ana Carolina 05/06/2022 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. Jeferson Soares 19/05/2022 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!!!! Robson Rosseto 18/05/2022 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, Robson Rosseto 18/05/2022 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. Jaime Dornelas 12/05/2022 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 RONALDO MONTEIRO 02/05/2022 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! Avelino Sampaio 14/04/2022 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! Dimas Andrade 13/04/2022 16:56:23 Boa tarde! É possível anexar um arquivo PDF em um e mail no access 2000? Grato Diego Silva 25/02/2022 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 Avelino Sampaio 23/02/2022 06:55:50 Milton Experimente desta forma: DoCmd.OutputTo acOutputReport, "rltProposta", acFormatPDF, strLocal, OutputQuality:=acExportQualityScreen Sucesso! ADRIANO CÉSAR LUIS 23/02/2022 05:19:16 GOSTO MUITO DESTE PROGRAMA. OBRIGADO MILTON PEREIRA DOS SANTOS 20/02/2022 19:42:49 qual a sintaxe para usar o argumento acExportQualityScreen? André Lindolfo 18/12/2021 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 Douglas 13/12/2021 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" Avelino Sampaio 10/12/2021 07:22:07 Henrique, vá na seção "Dicas" aqui do site e leia o artigo "Access x Outlook". Bom estudo! Henrique 07/12/2021 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. Felipe Almeida 05/12/2021 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. Madson 19/11/2021 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. Avelino Sampaio 11/11/2021 18:21:41 Paulo Cesar, vá na seção Dicas aqui do site e veja o artigo "Access 2007 x Outlook 2007" Bom estudo! Paulo Cesar 09/11/2021 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 24/10/2021 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 23/10/2021 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á. Clineo França 15/10/2021 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 Avelino Sampaio 02/10/2021 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 Felipe 02/10/2021 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? Aveino Sampaio 23/09/2021 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! Tomé Vicente 22/09/2021 19:17:24 Artigo muito interessante, Como posso enviar 2 anexos no mesmo mail ? Marcelo Santos 21/09/2021 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 Hugo furtado 20/09/2021 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? Hugo Furtado 20/09/2021 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? Patricia 14/09/2021 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 Samuel Lemos 28/08/2021 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! Everson 28/08/2021 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. Everson Fernandes 26/08/2021 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. Alexsandro 26/08/2021 13:19:19 É possível enviar as mensagens de erro por e-mail? Como se pode fazer isso? Alexsandro 26/08/2021 13:19:03 É possível enviar as mensagens de erro por e-mail? Como se pode fazer isso? Avelino Sampaio 21/08/2021 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! Alberto Pires 21/08/2021 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... Leandro Romariz 16/08/2021 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 ? Avelino Sampaio 09/08/2021 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! Roxo 09/08/2021 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 08/08/2021 06:52:10 Roxo, use o comando FollowHyperlink para abrir o PDF. Exemplo: application.FollowHyperlink strlocal Sucesso! Roxo 07/08/2021 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 Limark Matos 06/08/2021 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. Claudinei A Santos 25/07/2021 15:10:22 Muito obrigado! Era esse o problema eu eatava usando o access 2003 e não funcionava Agora deu certo Avelino Sampaio 25/07/2021 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! Avelino Sampaio 25/07/2021 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! Claudinei A Santos 23/07/2021 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" Douglas Andrade 23/07/2021 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! Avelino Sampaio 17/07/2021 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! Fernanda Aguiar 17/07/2021 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 13/07/2021 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! Fabricio Roger 13/07/2021 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 Fabricio Roger 13/07/2021 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. Ivan Allessi 10/07/2021 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 ? Alvaro 21/06/2021 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 Leandro 08/06/2021 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. William 06/06/2021 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! Avelino Sampaio 28/05/2021 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! NUNO 27/05/2021 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. Claudio 25/05/2021 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, Claudio 25/05/2021 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, Justino 19/05/2021 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 Claudio 14/05/2021 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 Avelino Sampaio 08/05/2021 06:18:17 Valter, ao rodar o código em qual parte apresenta o erro, ou seja, fica marcado na cor amarela ? Aguardo Valter 07/05/2021 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. Ivair 29/04/2021 17:36:04 Boa Noite Avelino Obrigado. Vou dar uma olhada na Seção Dicas. Abraços... Avelino Sampaio 25/04/2021 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 24/04/2021 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 24/04/2021 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 23/04/2021 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 22/04/2021 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! Avelino Sampaio 21/04/2021 18:01:51 Sofia, acesse o tutorial "Como enviar email, via SMTP ..." ,aqui do site. Bom estudo! Sofia 21/04/2021 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 Ivair 20/04/2021 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... Avelino Sampaio 20/04/2021 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 Martins 19/04/2021 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 16/04/2021 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! danilo 15/04/2021 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!!! danilo 15/04/2021 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!!! Avelino Sampaio 12/04/2021 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! Avelino Sampaio 12/04/2021 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 Damaris Yuri Saito 11/04/2021 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? PAULO HENRIQUE SOARES AMARO 05/04/2021 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. Avelino Sampaio 26/03/2021 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! silva 26/03/2021 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 Dirceu Albrecht 25/03/2021 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 Dirceu Albrecht 25/03/2021 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 André Lindolfo 04/03/2021 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. Carlos Eduardo 28/02/2021 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 27/02/2021 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! Avelino Sampaio 26/02/2021 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! Carlos Eduardo 25/02/2021 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... Fábio Kienen 24/02/2021 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 Fernando Franco 24/02/2021 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 22/02/2021 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 Sérgio de Faria 21/02/2021 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 19/02/2021 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! Clairton Alves 18/02/2021 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 14/02/2021 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! wagnergilson@hotmail.com 14/02/2021 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 31/01/2021 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! Eder 30/01/2021 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 27/01/2021 05:08:53 Wagner, leia o tutorial "Como enviar emails, via SMTP, usando o CdoSys" Experimente também o comando Docmd.SendObject Bom estudo! WAGNER GILSON 26/01/2021 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. WAGNER GILSON 26/01/2021 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. Avelino Sampaio 24/01/2021 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 patricia 23/01/2021 09:00:31 não consigo envia meus relatorios para minha supervisora pode me dize o passo a passo Roni 12/01/2021 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. Roni 11/01/2021 18:49:57 Obrigado Avelino! Já estou fazendo o download. Abraço! Avelino Sampaio 11/01/2021 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/2021 18:33:43 Avelino, O arquivo é este? The 2007 Microsoft Office Suite Service Pack 3 (SP3) Pois, tem varios... Avelino Sampaio 11/01/2021 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/2021 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! Alessandra Mendes 04/01/2021 19:34:37 Boa Noite Avelino Eu tenho a necessidade de salvar o PDF em pastas diferentes, como fazer? Agradeço desde já! Att. Avelino Sampaio 16/11/2020 20:09:12 Arilson, pode usar outro provedor. Na seção "tutoriais" aqui do site tem um artigo sobre CDO. Bom estudo! ARILSON 16/11/2020 18:44:20 Olá posso usar outro provedor de e mail ou somente o outlook? Avelino Sampaio 08/11/2020 18:00:22 Cleber, vá no artigo, que indiquei acima, para o nosso amigo Ivan. Bom estudo! Cleber Caetano 08/11/2020 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/2020 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! Ivan Allessi 06/11/2020 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 25/08/2020 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 Lívia Ferreira 25/08/2020 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 Marcos Rocha 19/08/2020 15:59:07 Várias vezes repete "nproposta" nProposta = " & Me!nProposta qual a finalidade desse comando Marcos Rocha 19/08/2020 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 Avelino Sampaio 12/08/2020 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! Avelino Sampaio 12/08/2020 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! Fabrício Papa 12/08/2020 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. sandra Padilha 11/08/2020 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 Rodrigo Oliver 07/06/2020 18:00:38 Muito bom! Avelino Sampaio 01/06/2020 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! Ivan 31/05/2020 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/05/2020 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 30/04/2020 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" Ivan 30/04/2020 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. Avelino Sampaio 29/04/2020 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 28/04/2020 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 Luís Augusto 07/04/2020 21:05:31 Excelente explicação Avelino, tentarei implementareste artigo ao meu projeto. Obrigado. Avelino Sampaio 31/01/2020 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 Célia Castro 31/01/2020 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 01/01/2020 15:25:03 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! |