... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Access 2007 X Outlook 2007

Novos recursos do Outlook 2007 e do Access 2007 permitiram uma melhoria significativa na automação entre as duas ferramentas.  Vamos usar o Access para ganhar acesso aos métodos do Outlook 2007 para realizar o envio de mensagens de forma programática.  

Foi montado um arquivo  exemplo, que você poderá baixar e verificar na prática o que iremos explicar aqui.  

Ao final desta dica você terá visto os seguintes recursos:

1) Como referenciar o Outlook 2007 no Access 2007.
2) Como desabilitar o aviso de segurança do Outlook, quando se envia email pelo Access.
3) Uso do Richt text para formatação da mensagem no corpo do email.
4) Como adicionar um ou mais anexos.
5) Envio de propaganda em Html, no corpo do email.
6) Envio de relatórios, em diversos formatos, com destaque para o envio em PDF.
 

Para ganharmos o acesso aos métodos do Outlook precisamos referenciá-lo no Access.  Vamos ver então como fazer isso:

Abra qualquer módulo do Visual Basic, do banco de dados, e selecione FERRAMENTAS > REFERÊNCIAS. 

Usando Access

 

Procure e marque o item MICROSOFT OUTLOOK 12.0 OBJECT LIBRARY, conforme figura abaixo.

Usando Access

 

Com isso, o Visual basic, terá à disposição todos as classes do Outlook. Usaremos algumas delas no exemplo.

Antes de prosseguirmos com a programação, faremos uma modificação na configuração do Outlook 2007, que nos permitirá enviar mensagens pelo Access, sem que o aviso de segurança do Outlook seja ativado.  Veja como é o aviso:

Usando Access

 

Abra o Outlook e no menu FERRAMENTAS selecione CENTRAL DE CONFIABILIDADE.

Usando Access

 

Clique em ACESSO DE PROGRAMAÇÃO e selecione uma das opções marcadas abaixo:

Usando Access

 

Agora com o Access e com o Outlook devidamente configurados, podemos por em prática, nosso projeto. 

Veja abaixo o formulário exemplo, feito no Access 2007, para o envio de mensagens e arquivos:

Usando Access

 

Observe que iremos manipular os principais itens de um email, como se estivéssemos no Outlook. 

Carregando, através do uso de variáveis, algumas das classes do Outlook,  teremos à nossa disposição, propriedades e métodos, que nos permitirá  o envio de mensagens e arquivos.  

Veja um trecho do código, que se encontra no evento Ao clicar do botão enviar e preste bastante atenção nos comentários.

Private Sub btEnviar_Click()
 
'----------------------------------------------
'Criando as variáveis que irão assumir as 
'propriedades e métodos das classes do outlook
'----------------------------------------------
Dim objOut As Outlook.Application
Dim objMail As Outlook.MailItem

'---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'---------------------------------------------
Set objOut = New 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)

'-----------------------------------------------------------------------
'Passando os valores do formulário exemplo para os itens de email
'-----------------------------------------------------------------------
objMail.To = Me!txPara 'destinatário
objMail.CC = Nz(Me!txCc, "") 'com cópia
objMail.BCC = Nz(Me!TxCco, "") 'Com cópia oculta
...
'--------------------------------------------
'Usando o método enviar, da classe de itens
'--------------------------------------------
objMail.send

End Sub

Agora que você aprendeu como é fácil enviar um email de forma programática, pelo Access 2007, vamos explicar como manipular alguns desses itens (propriedades) que serão de vital importância na automação de projetos.

O item corpo do email (BODY) pode ser modificado, de modo que possamos redigir texto, com formatação aprimorada.  Temos então três possibilidades de configuração : Texto puro, Rich Text ou HTML.  

O Formato Rich Text também foi inserido nos campos memorando do Access 2007.  Aproveitamos então esta novidade para dar uma qualidade de formatação nas mensagens enviadas. 

Observe na figura abaixo o campo mensagem, configurado para a formatação Rich Text.

Usando Access

 

A formatação do campo memorando por ser modificada através da propriedade TextFormat ,  0 (zero) configura o campo memorando sem formatação e 1 configura o campo com a formatação Rich Text

me!txmensagem.TextFormat = 1 'configurado com a formatação Rich text

O item que permite escolher a conta que enviará a mensagem (SendUsingAccount) e a nova classe contas (Accounts), inseridas  no Outlook 2007, são novidades  bem-vindas.  Vamos demonstrar aqui como carregar as contas existentes, criadas no Outlook, numa caixa de combinação.

Observe na figura baixo, a caixa de combinação, com os nomes das contas do Outlook.

Usando Access

 

Veja o código abaixo de como foi carregada a caixa de combinação

Private Function fncCarregaContas()
 
Dim objOut As Outlook.Application
Dim objConta As Outlook.Account
On Error Resume Next
'------------------------
'Carrega o Outlook
'------------------------
Set objOut = New Outlook.Application
'-------------------------------
'Limpa lista caixa de combinação
'-------------------------------
Me!txContas.RowSource = ""
'-----------------------------------------------
'Captura todas as contas criadas no Outlook
'e adiciona na caixa de combinação
'-----------------------------------------------
For Each objConta In objOut.Session.Accounts
  If objConta.AccountType = olPop3 Then
    Me!txContas.AddItem objConta
  End If
Next
'----------------------------------------------
'carrega o primeiro nome da conta como
'valor padrão
'----------------------------------------------
Me!txContas.DefaultValue = "'" & Me!txContas.Column(0, 0) & "'"
'-----------------------------------
'Limpa os objetos da memória
'-----------------------------------
Set objConta = Nothing
Set objOut = Nothing
End Function

Em função da escolha da conta, pela nossa caixa de combinação, podemos então indicar ao Outlook a conta que enviará a mensagem. 

Veja, em vermelho, as linhas acrescentadas no código do botão Enviar:

Private Sub btEnviar_Click()
 
'----------------------------------------------
'Criando as variáveis que irão assumir as 
'propriedades e métodos das classes do outlook
'----------------------------------------------
Dim objOut As Outlook.Application
Dim objMail As Outlook.MailItem
Dim objContas As Outlook.Accounts

'---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'---------------------------------------------
Set objOut = New 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)

'-----------------------------------------------------------------------
'Passando os valores do formulário exemplo para os itens de email
'-----------------------------------------------------------------------
objMail.To = Me!txPara 'destinatário
objMail.CC = Nz(Me!txCc, "") 'com cópia
objMail.BCC = Nz(Me!TxCco, "") 'Com cópia oculta
...
'-----------------------------------------
'Seleciona a conta que enviará a mensagem
'-----------------------------------------
.SendUsingAccount = objOut.Session.Accounts(Me!txContas.Value)
'--------------------------------------------
'Usando o método enviar, da classe de itens
'--------------------------------------------
objMail.send

End Sub

			

Adicionar anexos a mensagem, sem dúvida é um dos itens mais importantes de se aprender.  Para isso iremos utilizar a classe anexos (Attachments), que contém o método Adicionar Anexo (Add).  Basta então indicarmos o caminho do arquivo que o método adicionará o arquivo à mensagem.

Primeiro capturamos o arquivo e guardamos o seu caminho completo e o seu nome numa caixa de listagem, conforme exemplo na figura abaixo.

Usando Access

 

Com a lista dos arquivos anexos salva no campo Anexos, fica bem fácil adicioná-los ao email. 

Veja as linhas, em vermelho, adicionadas no código do botão enviar.

Private Sub btEnviar_Click()
 
'----------------------------------------------
'Criando as variáveis que irão assumir as 
'propriedades e métodos das classes do outlook
'----------------------------------------------
Dim objOut As Outlook.Application
Dim objMail As Outlook.MailItem
Dim objContas As Outlook.Accounts
Dim objAnexo As Outlook.Attachments

'---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'---------------------------------------------
Set objOut = New 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)

'-----------------------------------------------------------------------
'Passando os valores do formulário exemplo para os itens de email
'-----------------------------------------------------------------------
objMail.To = Me!txPara 'destinatário
objMail.CC = Nz(Me!txCc, "") 'com cópia
objMail.BCC = Nz(Me!TxCco, "") 'Com cópia oculta
...
 
'---------------------------------
'Adicionando os anexos
'---------------------------------
For j = 1 To Me!txAnexo.ListCount
 objAnexo.Add Me!txAnexo.Column(0, j - 1),olByValue,1,Me!txAnexo.Column(1,j-1)
Next
 
.SendUsingAccount = objOut.Session.Accounts(Me!txContas.Value)
'--------------------------------------------
'Usando o método enviar, da classe de itens
'--------------------------------------------
objMail.send

End Sub

			

Vejamos agora como inserir propagandas ou comunicados, elaborados em HTML.   A vantagem do uso de Html são inúmeras , principalmente se o que você deseja apresentar ao seu cliente, estiver em jogo a qualidade visual

Uma observação - o uso de imagens, geralmente é travado no momento da exibição da mensagem, atrapalhando o objetivo da propaganda ou comunicado.  O pessoal então apela para uso de Estilo que também deixa o visual da mensagem bastante chamativo.

Observe na figura abaixo, a opção propaganda selecionada:

Usando Access

 

O segredinho aqui é usarmos uma função que leia o arquivo html para tê-lo inserido no corpo da mensagem.  Veja a função que faz a leitura do arquivo:

Public Function fncLerArquivo(ByVal LocalArquivo As String) As String
 
Dim objfso As Object
Dim objts As Object
 
On Error Resume Next
 
Set objfso = CreateObject("Scripting.FileSystemObject")
Set objts = objfso.GetFile(LocalArquivo).OpenAsTextStream(1, -2)
fncLerArquivo = objts.readall
 
objts.Close
Set objfso = Nothing
 
End Function

Utilizamos então, a função acima  para carregar o arquivo no corpo do email.

...
.BodyFormat = olFormatHTML
.HTMLBody = fncLerArquivo(fncLocalBD & "\propagandas\" & Me!Lista.Column(1))
...

Veja a propaganda na mensagem do Outlook:

Usando Access

 

Enviar relatórios do Access por email é a automação que mais uso para os meus clientes.  O envio de  orçamentos, propostas e pedidos de compra encabeçam a lista.   O maior desafio é gerar um arquivo do relatório, que seja possível ao cliente fazer a leitura do mesmo, sem a necessidade de se ter Access, além, é claro, de não se perder a formatação original do relatório.  O formato PDF é o preferido para isso.  

Finalmente, após a atualização do Access 2007, com o pacote SP2, temos à nossa disposição a exportação de relatórios, usando o formato PDF, sem o uso de qualquer suplemento.

Veja no figura abaixo as opções de formato que você pode escolher para o envio de seus relatórios:

Usando Access

 

O mecanismo usado aqui é o seguinte:  

é gerado um arquivo do relatório com a formatação escolhida e é armazenado em uma pasta, usando  o comando OutPutTo;

gravamos o caminho e o nome do arquivo gerado na lista de anexos.

...
'-------------------------------------------
'Indicamos o caminho e o nome do arquivo
'a ser gerado
'-------------------------------------------
strCaminho = fncLocalBD & "\enviados\" & Me!Lista & ".pdf"
'------------------------------------------------------
'Gerando o arquivo no formato PDF no caminho indicado
'------------------------------------------------------
DoCmd.OutputTo acOutputReport, Me!Lista.Column(1), acFormatPDF, strCaminho, 0
'---------------------------------------------------
'Grava caminho e nome do arquivo na lista de anexos
'---------------------------------------------------
Me!txAnexo.AddItem strCaminho & ";" & Me!Lista, 0
...

Veja a mensagem lida no Outlook com o anexo do relatório em PDF.  Outra novidade no Outlook 2007 é que ele permite visualizar o anexo.

Usando Access

 

No caso do arquivo, no formato HTML , optamos por enviar o relatório no corpo do email e não como um anexo, utilizando a função fncLerArquivo já descrita .

Observe na figura abaixo o relatório em html, inserido no corpo da mensagem, lida no Outlook:

Usando Access

Espero que o exemplo ajude a você.

Bom estudo!


 

 


109 comentário(s)

Maurício dos Santos   25/07/2009 09:33:41

Avelino,

Parabéns!!!!! Parabéns mesmo!!!!!

Um dos mais procurados temas de discussão em access explicado de forma simples e direta.
Tutorial excelente com uma didática excelente e de uma simplicidade excelente.
Mais uma vez, parabéns!!!

Maurício dos Santos.

Avelino Sampaio   27/07/2009 18:01:10

Maurício,

Muito obrigado pelo seu apoio.

Sucesso

Alexandre   23/09/2009 00:40:00

muito bom!

Leonardo Fantin   03/10/2009 17:20:34

Caro amigo, este é um exemplo muito bom!

Vc tem algum exemplo para o 97? estou tentando criar um comando que anexe o relatório e gere um emial automático com alguns destinatários, só que o sistema operacional de msg não é o Outlook.
Por exemplo, o access tem a opção em personalizar >> barra de ferramentas onde tem um botão para enviar o relatório que está na tela em forma de anexo. É isso que necessito, mas com alguns destinatários já listados no email.

Obrigado,

Leonardo
n13543@cst.com.br

Estevam   11/01/2010 13:28:37

Muito interessante. Obrigado pela dica.
Dentro deste assunto tenho uma dificuldade. Fiz uma macro "enviar Objeto".
Uso o Outlook 2007
Preenchi tudo direitinho. Ao rodar a macro vem uma mensagem:
O Microsoft Office Access não pode enviar este email. Configure o computador parqa enviar e receber email.
Acontece que está configurado. Uso o Outlook ormalmente.
Não sei como resolver

Avelino Sampaio   12/01/2010 08:04:08

Olá Estevam

1) Qual objeto está enviando ? relatório ? É pra eu simular um teste parecido com o seu
2) Mantenha o Outlook aberto e minimizado
3) Use o argumento "Editar mensagem" para sim - isso é pra ver se ele vai abrir a formulário de envio do Outlook
4) No Outlook, vá em: ferramentas > central de confiabilidade e verifique se não há nada configurado que possa esta interferindo no envio
5) Agora um chute - seu antivírus pode estar interferindo
6) Sua conta no Outlook é de que provedor ? Hotmail ?

Fiz testes aqui com este comando e funcionou.

Aguardo mais informações.

Utilize o link "contato" e me passe o seu email

Sucesso
Avelino sampaio

Estevam   12/01/2010 17:47:04

Olá Avelino
Grato pelo seu interesse em ajudar. Veja só:
Sobre: "Qual objeto está enviando ? relatório ?" - Isso é um relatório
Sobre:"Use o argumento "Editar mensagem" para sim" - está assim mesmo.
Sobre:"Sua conta no Outlook é de que provedor ? Hotmail ?" - O provedor é o OUL
Sobre: "No Outlook, vá em: ferramentas > central de confiabilidade..." - já analisei tudinho e não encontro nada que possa está impedindo.

O mais interessante aconteceu hoje: Abri uma nova conta no OutLook e NÃO defini com coanta padrão. Veja que ele abriu para enviar com a conta anterior do OUL.
Rodei a macro - deu certo - abriu a tela do OutLook normalmente. Porém........ foi uma única vez. Depois não vai mais. Nem definindo esta conta como padrão.
É um mistério Avelino - um mistério. Acho que é alguma configuração da minha máquina, do meu OutLook ou de eu e-mail no uol.

Vamos continuar tentado.
Grato
Estevam

Avelino Sampaio   12/01/2010 18:48:31

Estevam,

você atualizou o seu Office com o pacote SP2 ?


GILBERTO   15/07/2010 18:55:02

MUITO BOM, ME ATENDEU COMPLETAMENTE

Denis   23/07/2010 10:10:32

Avelino,
Muito obrigado pelo exemplo ! Tenho uma única questão. Não consegui fazê-lo funcionar com o outlook fechado. Há alguma maneira de reverter isto ?

Grato,

Rafael   09/11/2010 13:23:51

Olá,
Eu tenho uma aplicação que rodava em windows XP com outlook express. No entanto, após instalar o windows 7 a aplicação não funciona mais, pois a microsoft descontinuou o outlook express =(
Vc sabe como fazer a automação entre o access e o windows live mail.

Valeu!


Avelino Sampaio   10/11/2010 08:56:23

Rafael,

veja se o código no link abaixo te ajuda. Se não ajudar , procure no google por "smapi.dll"

http://us.generation-nt.com/answer/live-mail-smapi-dll-windows-7-help-198730131.html

Sucesso

Márcio Melo - Rio de Janeiro/RJ   27/11/2010 23:58:12

Aproveite também imprementei o recurso de e-mail que é super interessante e útil, fiz um from p cadastrar as propagandas e um outro para coletar os e-mail com ; vai dar para fazer uma super mala direta, expetacular... e por hoje é só... Forte abraço Avelino.

Carlos Filipe   08/12/2010 08:41:25

Eu achei bastante interessante, e estou com uma dúvida referente à e-mails, se você puder me ajudar, ficarei bastante agradecido.

No meu caso eu gostaria de fazer o contrário, ao invés de enviar e-mails pelo Access, eu gostaria de recebê-los. Para isso eu vinculei uma tabela do Access com o Outlook, porém eu só recebo os dados das mensagens, mas não consigo receber os anexos no Access.

Abs.

Raul Nunziato   11/12/2010 14:14:00

olá,
tenho o codigo:

Function enviaform()
On Error GoTo enviaform_Err

user1 = [Forms]![lista de e-mails]![userinvent1]
user2 = [Forms]![lista de e-mails]![userinvent2]
user3 = [Forms]![lista de e-mails]![userplanej1]
user4 = [Forms]![lista de e-mails]![usercontrol1]
user5 = [Forms]![lista de e-mails]![userplanej2]
user6 = [Forms]![lista de e-mails]![usersolic]

emails = user1

DoCmd.SendObject acReport, "Solicitação de AD", "PDFFormat(*.pdf)", (user1 + ";" + user2 + ";" + user3 + ";" + user4 + ";" + user5 + ";" + user6), "", "", "Nova AD Criada", "Uma nova AD foi Criada", True, ""


enviaform_Exit:
Exit Function

enviaform_Err:
MsgBox Error$
Resume enviaform_Exit

End Function

Minha ideia era pegar os e-mails de um formulário carregado. nas variaveis o VB até reconhece os valores, mas quando abre o outlook o campo "Para" fica em branco. como resolver isso?

Raul Nunziato   13/12/2010 07:24:41

Olá novamente. Consegui resolver, segue o codigo:

Function enviaform()
Dim emails As String, user1 As String, user2 As String, user3 As String, user4 As String, user6 As String, user5 As String
On Error GoTo enviaform_Err

user1 = [Forms]![lista de e-mails]![userinvent1]
user2 = [Forms]![lista de e-mails]![userinvent2]
user3 = [Forms]![lista de e-mails]![userplanej1]
user4 = [Forms]![lista de e-mails]![usercontrol1]
user5 = [Forms]![lista de e-mails]![userplanej2]

enviaform_Err:
If user5 = "" Then
user5 = user3
End If

user6 = [Forms]![lista de e-mails]![usersolic]

emails = user1 + "; " + user2 + "; " + user3 + "; " + user4 + "; " + user5 + "; " + user6

DoCmd.SendObject acReport, "Solicitação de AD", "PDFFormat(*.pdf)", emails, "", "", "Nova AD Criada", "Uma nova AD foi Criada", True, ""


End Function

Avelino Sampaio   14/12/2010 06:17:16

Raul,

obrigado pelo retorno.

Sucesso

Marcelo   16/03/2011 18:50:21

Achei muito bom, mas baixei o sistema e não veio os códigos, nem mesmo dos módulos, não sei se foi uma versão antiga, pois não tem a opção PDF, se possivel gostaria que pudesse me mandar um link

marcelo.evento@terra.com.br

Grato

Avelino Sampaio   17/03/2011 09:17:06

Marcelo,

baixei aqui o exemplo em duas máquinas diferentes e está tudo normal(com os códigos). Tente baixar novamente.

Para obter a opção do PDF é necessário instalar o pacote de atualizações Sp2 do Access 2007.

Sucesso

Adriano Santana   25/03/2011 15:59:17

O Tutorial está perfeito,

Apenas me ocorreu uma duvida.
Como colocar no corpo do email a assinatura cadastrada no outlook?


Avelino Sampaio   28/03/2011 08:26:29

Adriano,

Teria que envestigar na classe do outlook se tem esta opção. Eu não sei te dizer

Uma alternativa é inserir direto no corpo do email. Algo assim:

...
.HTMLBody = [corpo do email] [comando de pular linha] [sua assinatura]
...

Sucesso

Francisco Degrazia   08/04/2011 14:24:49

Avelino,

Parabéns pelo tutorial, está excelente!

A propósito, existe alguma forma de que a caixa vinculada do Outlook no ACCESS também tenha as formatações HTML, anexos, etc? Ou seja, usar as tuas orientações para leitura e visualização de anexos também, além da possibilidade de enviar.

Abraço,


Avelino Sampaio   11/04/2011 06:17:50

Francisco,

Já li em algum fórum esta possibilidade mas eu não tenho como te ajudar nessa, pois me falta tempo para pesquisar. Vc mesmo pode tentar descobrir os recursos do outlook, usando o pequisador de objetos do VBA. Tenho um tutorial ensinado como usá-lo.

Sucesso

ezequias santos de souza   11/05/2011 09:08:35

quero anexar com meu email cartas para enviar aos meus contatos mais nao estou conseguindo por favor me explique como fazer isto

Ivair Bezerra   08/06/2011 15:07:50

Avelino, tentei enviar as mensagem do form frmEmail do seu bd email_Outlook usando uma caixa de correio generica que so manda para os e-mails internos aqui na empresa. A mensagem de erro no access é -2147024809 Nao foi possivel concluir a operacao. Um ou mais valores do parametro nao sao validos. o nome da conta é 990311774@corp1.rc.itau / ATENDIMENTOAGIREMPRESAS@correio.itau.com.br. quando faço pela opção do Access "Coletar Dados" --> "Criar Email", eu consigo enviar sem problemas.

Avelino Sampaio   08/06/2011 17:47:49

Ivair,

Fica um pouco complicado pra mim como foi configurado o outlook para uso interno.

Uma tentativa é a troca da linha abaixo.

If objConta.AccountType = olPop3 Then

por essa:

If objConta.AccountType = ollmap Then

Sucesso!

fabio ferraz   09/06/2011 17:58:34

gostaria de receber no meu pc e blakberry o mesmo email quando recebo um email no outllok nao recebo ele no celular e vice e versa ok gostariade uma resposta paraisso o que falta configurar para receber nos 2 lugares ok

Avelino Sampaio   10/06/2011 04:32:43

Fabio,

configure o seu outlook para deixar uma cópia das mensagens no servidor durante uns 3 dias. Assim dá tempo suficiente para receber todas as mensagens no seu blakberry.

menu ferramentas > configurações de conta > marque uma conta e clique em alterar > clique no botão "mais configurações" > selecione a guia avançado > Marque "Deixar uma cópia das mensagens no servidor"

Sucesso

JEFFERSON ALMEIDA   15/06/2011 17:25:23

Avelino,
Você pode me ajudar? O que está errado no código abaixo?
Estou conseguindo enviar o e-mail, mas quando acrescento a linha para anexar está dando erro.


Private Sub btEnviar_Click()
Dim objOut As Outlook.Application
Dim ObjMail As Outlook.MailItem
Dim objAnexo As Outlook.Attachments

Set objOut = New Outlook.Application
Set ObjMail = objOut.CreateItem(olMailItem)

ObjMail.To = "jefferson.x.almeida@gmail.com"

objAnexo.Add "C:\Teste\Teste.txt", olByValue, 1, "TESTE"

ObjMail.Send

End Sub




DESDE JÁ AGRADEÇO!

Avelino Sampaio   15/06/2011 18:59:07

Jefferson,

acrescente a seguinte linha:

Set objAnexo = ObjMail.Attachments

logo abaixo da linha:

Set ObjMail = objOut.CreateItem(olMailItem)

Sucesso!

Marcio   17/06/2011 15:46:23

Avelino

Estou usando seu bd email_Outook, mas gostaria de usar gravando dados no bd, mas no campo anexo, quando eu coloco ele acoplado a tabela/anexo ele não grava os nomes dos arquivos que selecionei, como faço.

Marcio Gomes   17/06/2011 16:20:13

Tem um modelo do Access 2007 chamado tarefas, vc pode até baixar ele aí no seu pç, lá tem tudo que eu quero só que no campo anexo os arquivos que seleciono não querem ir para o outlook, como faço, pode me ajudar?

Avelino Sampaio   18/06/2011 08:02:00

Marcio,

acredito que só conseguirá mediante uma programação de extração do arquivo. Veja no meu tutorial sobre ribbons "Imagens de campo tipo anexo". Lá eu uso o método SaveToFile para a extração do arquivo e o coloco numa pasta temporária. Passo então a manipular o arquivo da pasta temporária.

Sucesso!

Cida   24/06/2011 12:52:11

Avelino

Usando seu bd email_Outook, mas gostaria de usar gravando dados no bd, mas no campo anexo, quando eu coloco ele acoplado ao campo da tabela ele não grava os nomes dos arquivos que selecionei, como faço para acloplar ele.

Avelino Sampaio   25/06/2011 03:58:46

Cida,

você está querendo gravar os arquivos selecionados num campo tipo anexo? Por favor, entre em contato usando a seção "contato" aqui do site e me passe mais detalhes do que deseja.

Alexandre Santos   26/06/2011 01:05:12

Avelino
Criei este codigo, porem preciso enviar um relatorio especifico para cada nome. Nao consigo resolver o filtro na consulta para pegar o nome da pessoa, esta mandando o mesmo relatorio para todo mundo quando ou manda o relatorio vazio.

Private Sub Comando0_Click()

Dim RS As DAO.Recordset
Dim Email As String

Set RS = CurrentDb.OpenRecordset("TabelaEmail")

Do Until RS.EOF
Email = RS("Email")
NomeEmail = RS("NomeEmail")


DoCmd.SendObject acReport, "Meta_Email", "PDFFormat(*.pdf)", Email, "", "", "Meta Boletao : " & NomeEmail, "Meta de Controle de Boletao" & "Sistema Access Tec", False, ""

RS.MoveNext
Loop

Set RS = Nothing


End Sub

Cida   27/06/2011 09:34:30

Avelino
E isso mesmo, eu só queria que gravasse os arquivos anexos no banco de dados, só, porque todos os campos ficam acoplados, mas o anexo não.

Avelino Sampaio   27/06/2011 09:46:51

Cida,

procure no help do VBA por LoadFromFile

Ou pelo google com a frase "loadfromfile Access 2007"

Sucesso!

Avelino Sampaio   30/06/2011 07:21:23

Alexandre Santos,

entre em contato , pela seção "contato" do site, para eu lhe oferecer um esclarecimento pelo seu email.

No aguardo

João   04/07/2011 05:18:02

Olá. Eu estou a estagiar, e o meu projecto é criar uma base de dados em access, para a frota, que é a parte de automoveis da empresa. Então a base de dados tem que ter muitas informaçoes, por exemplo quando estiver a chegar a inspecção de um automovel, receber um email com essa informação para saber que se tem que levar o carro à inspecçao? Alguém me sabe dizer como posso fazer? Agradeço ajuda, obrigado.

mauricio    14/09/2011 00:09:23

Avelino, muito bom mesmo
Trabalho bastante com vba no excell e consigo atraves do offset realizar repeticoes de envio de um mailing list.
To montando um form de envio no access e gostaria de uma rotina. Partindo dos recorde gravados em um tabela e ele fosse ate o último registro. Como posso fazer?
Obrigado

Avelino Sampaio   14/09/2011 05:55:21

Mauricio,

use o código abaixo para realizar um loop pelos registros da tabela.

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("NomeDatabela")
Do While Not rs.EOF
' aqui vc tem a disposição os campos do registro
' exemplo: rs!Email, rs!NomeCliente

rs.MoveNext
Loop
rs.Close
Set rs = Nothing

Sucesso!

Mauricio   15/09/2011 01:00:56

Mas me diga se puder se eu posso enxugar este código

Usei muito a mescla da sintaxe do VBA para o Excel

Private Sub Sendmail_Click()
Dim rs As DAO.Recordset
Dim email As String
' acrescentei os temas abaixo
Dim Nomeemail As String
Dim copiado As String
Dim corpo As String
Set rs = CurrentDb.OpenRecordset("TBMail")
Dim db As Database
Dim regt As Recordset
Dim Index As String
Dim IdCode As Integer

' Step 1
DoCmd.GoToRecord , "", acFirst
Do While Not rs.EOF
email = rs("Email")
Nomeemail = rs("Destino") & "-" & rs("IdUser")
corpo = rs("texto")
copiado = rs("copia")
Set appOutLook = CreateObject("Outlook.Application")
Set MailOutLook = appOutLook.CreateItem(olMailItem)
With MailOutLook
.to = email
.cc = copiado
.Subject = Nomeemail
.body = corpo
.Attachments.Add "C:\VBA\texto.txt"
.Send
End With
' Set 2 - flag indicando que o Status do envio


rs.MoveNext
Set db = CurrentDb()
Set regt = db.OpenRecordset("TbMail", dbOpenTable)
regt.Index = "IdCode"
regt.Seek "=", IdUser
DoCmd.GoToControl "Status"
Me.Status.SetFocus
Me.Status.Value = "Ok enviado em - " & Cdate(Now())
DoCmd.GoToRecord , "", acNext
Loop
rs.Close
Set rs = Nothing
' ok final
MsgBox "Emails enviados" & Chr(13) & Chr(13) & "Total: " & Dcount("IdUser", "TbMail"), vbOKOnly, " Mail Informa"
End Sub

jurandy   12/10/2011 00:20:37

muito legal...

Parabéns pelo conteúdo.

abs.

vicente   30/11/2011 13:47:15

Infelizmente passaram tudo aqui na empresa para Google, e no access perdi a função de enviar email que eu utilizava com o outlook.
como configuro agora para o access reconhecer o google como sendo o veículo para enviar email?
Grato

Demetrius Sampaio Felinto   30/11/2011 19:12:29

Avelino, gostaria de saber onde encontro as outras opções do objmail.
Deixa eu explicar: gostaria de fazer algumas configurações automáticas, tipo: enviar como alta prioridade, confirmar recebimento e leitura, incluir a assinatura.
Busquei no pai dos burros virtual (Google) mas não encontrei nada do gênero.
Obrigado pela atenção.
Namastê!

Avelino Sampaio   02/12/2011 17:16:30

Demetrius,

acesse o tutorial "como estudar com o pesquisador de objetos" e assista ao vídeo. Basta marcar a referência "MICROSOFT OUTLOOK 12.0 OBJECT LIBRARY" e você terá acesso a classe pelo pesquisador de objetos.

Bom estudo!

Luciana Rodrigues   24/01/2012 10:55:44

Muito bom mesmo seu tutorial, me ajudou muito. Obrigada por compatilhar conosco.

Luciana

Rodolfo Santos   25/02/2012 00:33:26

Parabéns! Simples e funcional.

Cristiano Mendes   07/03/2012 22:33:10

Olá Avelino,

Parabéns pela atitude de compartilhar seu conhecimento.

O envio do e-mail só está funcionado com o Outlook aberto. Como posso alterar isto ?

Desde já obrigado.

Avelino Sampaio   08/03/2012 04:48:51

Cristiano,

Veja a resposta no artigo "Como saber se o Outlook está instalado e aberto"

Bom estudo!

Devid Wellton   12/03/2012 12:28:25

Caro Avelino,

Estou com uma duvida e se meu relatorio imprime para cada pagina um resultado de um cliente tem como eu criar um pdf para cada pagina com o cod do cliente. uso access 2010

A inlutração acima ficou exelente parabens, perfeito

Avelino Sampaio   13/03/2012 08:15:30

Devid,

não consegui entender bem a sua necessidade. Vá pela seção "Contato" aqui do site e me forneça mais detalhes.

Veja se o tutorial aqui do site "Gerar relatório em PDF e enviar por email" atende a sua necessidade.

Sucesso!



Alegna   14/03/2012 07:09:11

Gostaria de criar um e-mail personalizado onde no meio do texto vou solicitar informações sobre clientes (um cliente por e-mail) e preciso do retorno num banco de dados.

O Access permite a coleta dessas informações de forma muito fácil e prático, porém gostaria de fazer o e-mail sem o assistente e com o VBA.

Pode ajudar Avelino?

Já procurei no Google e não encontrei nada a respeito.

Abaixo o link para uso do assistente para melhor entendimento:

http://office.microsoft.com/pt-br/access-help/coleta-de-dados-por-meio-de-mensagens-de-email-HA010015427.aspx



Obrigado!


Ediel Clamoroska   16/03/2012 20:50:37

Avelino,

Como posso ajustar o For Each que puxa as contas de email, para puxar e carregar a combobox com os contatos do Outlook?

Desde já obrigado!

Avelino Sampaio   19/03/2012 07:01:42

Ediel,

estude o código do link abaixo e veja se atende:

http://www.access-programmers.co.uk/forums/showthread.php?t=189050&highlight=list+contact+outlook

Copie e cole o link no seu nevegador para ter acesso.

Sucesso!

Thiago César   12/04/2012 11:58:15

Avelino,

Primeiramente, Parabéns pelo site!
minhá dúvida é: Gostaria de enviar alguns indicadores que estão em pdf no corpo do E-mail, mantendo toda a formatação original do pdf, é possível?

Claudio   21/05/2012 13:01:08

Caros, como consigo colocar o campo subject nesse script para mandar uma mensal padrão e se possivel colocar uma mensagem padrão no corpo do email.

Reginaldo   23/05/2012 00:10:01

Avelino,

Parabéns pelo tutorial.
Tenho uma dúvida;
Como posso selecionar uma conta de email, se estou usando um botão associado a uma macro incorporada?

Muito obrigado.

Avelino Sampaio   23/05/2012 04:06:13

Claudio,

vc pode adicionar os valores originários de campos.

objMail.HTMLBody = Me!txCorpo & "< BR >< BR >" & Me!txAssinatura
objMail.Subject = Nz(Me!txAssunto, "Newsletter de Claudio")

Sucesso!

Avelino Sampaio   23/05/2012 04:20:54

Reginaldo,

não entendi muito bem a sua questão.

Bom, vc pode chamar funções públicas pela macro, usando o comando "Executar Código". Basta então indicar o nome da função. =NomeDaFunção()

Sucesso!

Hélio   24/05/2012 08:57:14

Avelino,

Antes de mais, parabéns pelo excelente artigo que me ajudou bastante na minha BD.
No entanto, apesar de o código estar funcionando, dá erro em computadores com versões do outlook diferentes. O problema é que a referência que adicionei no projeto (MS Outlook 14.0) não está presente nesses computadores... Tem como tornar a referência dinâmica por forma a que em cada computador a referência utilizada seja a adequada?

Muito obrigado

Hélio   24/05/2012 08:58:13

Avelino,

Antes de mais, parabéns pelo excelente artigo que me ajudou bastante na minha BD.
No entanto, apesar de o código estar funcionando, dá erro em computadores com versões do outlook diferentes. O problema é que a referência que adicionei no projeto (MS Outlook 14.0) não está presente nesses computadores... Tem como tornar a referência dinâmica por forma a que em cada computador a referência utilizada seja a adequada?

Muito obrigado

Avelino Sampaio   24/05/2012 09:52:10

Hélio,

Neste seu caso, sugiro trabalhar sem referenciar o Outlook, ou seja, use como OBJECT. Veja neste meu outro artigo como é usado o Object.

http://www.usandoaccess.com.br/tutoriais/tuto12.asp?id=1#inicio

Copie e cole o endereço acima no seu navegador

Bom estudo!

Fabio   14/06/2012 19:09:32

Olá Avelino, por favor me ajude.

Fiz uma macro com ação "enviar objeto" para enviar e-mail a partir de um relatório.
Funciona tudo corretamente, abre e-mail com o arquivo em *.pdf já anexado, tudo ok, mas acontece que depois de enviar o e-mail o access trava. Já verifiquei tudo e não consigo encontrar uma solução.

Agradeço se tiver alguma idéia do que possa ser.

tome vicente   27/06/2012 07:39:12

Muito bom!

Rogger   06/07/2012 10:33:14

Bom dia Avelino,

Tenho um formulário que preciso enviar a imagem dele no corpo da mensagem por outlook. É possível? Se sim, você poderia postar o VBA para eu adaptar?

Para enviar a imagem do formulário por e-mail, deve ser um processo automático, não precisando abrir o outlook para enviar a msg.

Muito Obrigado,
Rogger Placencio

Patricia   20/09/2012 10:06:00


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



Avelino Sampaio   21/09/2012 06:23:54

Patrícia,

experimente enviar algo para um email inválido. Se o Access gerar uma mensagem de erro, vc então poderá controlar o erro.

Algo assim:

on error resume next
...
objMail.send
if err.number > 0 then
Aqui vc salva o emial invalido para um tabela ou gera uma mensagem
err.clear
end if

Sucesso!

Alexandre   22/09/2012 12:14:17

Avelino, fiz o processo para tirar o aviso, na hora de enviar email pelo acess, porem no meu outlook, na tela de Seguranca de Acesso de Programacao, as tres opçoes estão travadas/bloqueadas (nao consigo selecionar a opçao). Onde sera que é o problema? Esta com a primeira opçao selecionada, porem continua pedindo a confirmacao no envio do email. No campo "Status da protecao antivirus : Invalido"

jrm-ajuda sff   01/10/2012 19:12:40

Boa noite Avelino

Estive a ver o seu exemplo e acho espectacular, estou tentando adapta-lo para o que eu pretendo, mas estou com alguma dificuldade.
Vou explicar o meu problema, eu criei uma consulta que devolve os registos em que pelo menos uma das datas de documentos esta caducada, para cada registo tenho que verificar 4 datas, se uma estiver caducada queria enviar um email ao fornecedor correspondente a esse registo usando par envio o email cadastrado nesse registo e enviando uma mensgem do tipo: "o seu documento Bi esta caducado envio copia de documento valido, mas o meu problema é que este fornecedor pode ter mais que um docummento caducado e ai o texto teria que mudar par incluir todos os documentos caducados, isso pode ser feito tambem com um relatorio ou formulario, com os documentos caducados, solicitado que envie novos documentos. Espero que me possa ajudar.Obrigado.

André Lindolfo   02/10/2012 17:02:38

Oi Avelino,

Estou usando o código abaixo. Configurei para enviar por uma conta que não é a padrão no meu outlook, mas o access está enviando pela conta padrão.
Onde estou errando?

' Enviar email
Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.CreateItem(olMailItem)
Set myAttachments = myItem.Attachments
With myItem
.SendUsingAccount = "PP-ControleeInformacao@zz.net.br"
.To = "fulano@zz.net.br"
.Subject = "Arquivo Resumo de operações"
.Body = "Oi," & vbCrLf & "Segue o arquivo detalhado do resumo de operações."
.Save
myAttachments.Add "\\netprd03\suprimentos\Novo_Resumo.xlsb"
.Send
End With

Avelino Sampaio   02/10/2012 17:26:58

André,

vc deve usar o "nome da conta" , configurado no seu Outlook e não o email da conta que deseja enviar.

Supondo que o nome da conta para o seu email "PP-ControleeInformacao@zz.net.br" seja "Controle"

.SendUsingAccount = objOut.Session.Accounts(“Controle”)

Obs. O Nome da conta é Case Sensiteve (Controle diferente de controle).

Sucesso!


André   04/10/2012 19:57:28

Oi Avelino,
Uso o Access 2010 e estou tendo dificuldades de exportar um relatório em formato HTML. Ele contem 3 sub-formulários que são gráficos dinâmicos.
O Access informa que não pode exportar sub-formulários.

Você tem alguma dica para solucionar isso?

Abç

Gustavo   16/11/2012 13:56:09

É sobre a exportação dos emails para o Access ou Excel. tenho uma dúvida cruel. Quando exportamos os emails para uma tabela, só me vem os campos "de" que é o nome da pessoa que enviou o email por extenso, o campo "corpo" que vem parte do corpo do email, e alguns outros campos. Eu gostaria de trazer o campo "email" com o email da pessoa, e não com o nome. É possível? Aguardo resposta.

tania   27/02/2013 11:16:36

Avelino, montei uma formulario com informações de orçamento. Preciso enviar um email para que o solicitante aprove uma das tres opçoes que foram enviadas. É possivel realizar esta função? Obrigada

Avelino Sampaio   28/02/2013 08:29:30

Tania,

tem um artigo na seção "Tutorias" que ensina como gerar arquivo em PDF e enviar por email. Vc então deve criar o relatório e deste relatório será gerado o PDF para ser enviado.

Bom estudo!

Adelor da Silva   04/03/2013 13:53:28

Baixei seu modelo, e agradeço por compartilhar o seu conhecimento. Mas meu windows é 64 bits e da a seguinte mensagem de erro:

O código desse projeto deve ser atualizado para uso em sistemas de 64 bits. Analise e atualiza as instruções Declare e, em seguida, marque-as com o atributo PtrSafe

Se puder me ajudar ficaria grato!

Avelino Sampaio   04/03/2013 14:45:40

Adelor,

vá na seção tutoriais aqui do site e leia o artigo "64 bits - Seus aplicativos no futuro do presente". Lá tem como proceder para adicionar o atributo Ptrsafe.

Bom estudo!

Daniel Fonseca   05/03/2013 08:20:30

Bom Dia Avelino

Estou precisando de uma grande ajuda.... pois não consegui achar em nenhum lugar....

Em meu outlook eu tenho 4 contas de e-mail, sendo uma particular e 3 de serviço...

o código a baixo ele faz a leitura dos e-mail que sejam iguais a um determinado titulo e ai ele faz a inclusão em um banco de dados.

Private Sub ReadInbox()

Dim TempRst As DAO.Recordset
Dim Rst As DAO.Recordset
Dim OlApp As Outlook.Application
Dim Inbox As Outlook.MAPIFolder
Dim InboxItems As Outlook.Items
Dim Mailobject As Object
Dim db As DAO.Database
Dim dealer As Integer

Set db = CurrentDb

Set OlApp = CreateObject("Outlook.Application")
Set Inbox = OlApp.GetNamespace("Mapi").GetDefaultFolder(olFolderInbox)
Set TempRst = CurrentDb.OpenRecordset("TBL_MAIL")

With TempRst
.MoveFirst
End With

Set InboxItems = Inbox.Items

For Each Mailobject In InboxItems
If Mailobject.UnRead Then
With TempRst
If Mailobject.Subject = "ASSUNTO 1" Or Mailobject.Subject = "ASSUNTO 2" Then
.AddNew
!Subject = Mailobject.Subject
!from = Mailobject.SenderName
!To = Mailobject.To
!Body = Mailobject.Body
!DateSent = Mailobject.SentOn
.Update
Mailobject.UnRead = False
End If
End With
End If
Next

Set OlApp = Nothing
Set Inbox = Nothing
Set InboxItems = Nothing
Set Mailobject = Nothing
Set TempRst = Nothing

End Sub

O problema que ele só verifica a caixa principal que é a particular e não olha as outras.

Saberia como resolver esse problema....

Gustavo Antonio   24/05/2013 11:34:34

Avelino, muito bom seu exemplo. Eu consegui montar todo o processo mas preciso do inverso também. Preciso, quando receber esses formulários de volta, conseguir importar as informações preenchidas pelas pessoas e jogar numa tabela, para conseguir filtrar. Por exemplo: Conseguir saber, através de uma lista de distribuiçao, quem dessa lista respondeu ou não meu email. Há algum processo referente a isso? Muito obrigado. Aguardo informações.

Vanderlei Alves   04/06/2013 10:12:57

Olá Avelino
Adquiri seu MontaRibbon e estou maravilhado com tamanho conhecimento em access

Quanto ao outlook x access, gostaria de saber se é possível inserir vários email diretamente do cadastro do cliente para o formulário de envio de mensagens

aguardo

Avelino Sampaio   05/06/2013 08:14:35

Vanderlei,

sim é possível. Faça um loop nos regisitros com o recordset e vá concatenando os email's, separando-os com o Ponto e Virgula (;).

Sucesso!

Dênis Pimenta   02/07/2013 17:14:50

Avelino, veja se consegue me ajudar:

Preciso listar os e-mails do OUTLOOK em um Form do Access e, ao clicar sobre uma linha desta lista, abrir o e-mail. Tem como?

Mais uma vez, parabéns pelo belo trabalho.

Obrigado.

Hugo   27/09/2013 06:12:15

Bom dia Avelino,

Tenho uma duvida se eu instalar o serviço pack 2 vai alterar as minhas base de dados?

Avelino Sampaio   27/09/2013 07:38:29

Hugo,

O Access 2007 foi lançado apresentando vários bugs. Sugiro vc atualizar com o pacote SP3 que será a última atualização. Não creio que vá afetar nada do seu projeto mas trará benefícios com a possibilidade de se gerar PDF sem aplicativos de terceiros.

Copie e cole o endereço abaixo no seu navegador, para baixar a versão Sp3.

http://www.microsoft.com/pt-br/download/details.aspx?id=27838

Sucesso!

Hugo   27/09/2013 11:33:59

Boa tarde Avelino,
Fiz o que me dizes te e fui testar só não consigo enviar pdf diz sempre "2501 access ação outputto foi cancelada" será que me pode ajudar? De resto está a funcionar consigo enviar texto e anexos, só não consigo enviar pdf.

Walter Florêncio   11/10/2013 14:36:39

Boa tarde Avelino. Parabéns novamente pelo belíssimo trabalho. Minhas dúvidas:
1- Testei as formas de envio de e-mail com a assinatura, porém não visualizo a assinatura nos e-mails recebidos. O que será?

2- As pastas "Assinaturas, enviados e propaganda" devem ser criadas nos .fe ou vc acha que devo criá-las no .be e depois vinculá-las? Qual o mais correto?

Parabéns e aguardo retorno.

Walter Florêncio   30/10/2013 00:25:40

Boa noite Avelino. Apesar de seguir as suas instruções, não consigo fazer com que o Outlook fique minimizado e sem o foco = Call Shell("Outlook.exe", vbMinimizedNoFocus). Ele insiste em receber o foco e sobrepor a janela do aplicativo. Vc tem alguma sugestão?

Avelino Sampaio   30/10/2013 08:58:16

Walter,

Substitua o call Shell() para este código abaixo:

Dim objws As Object
Set objws = CreateObject("wscript.shell")
objws.Run "outlook.exe", 2, "false"

Sucesso!

Walter Florêncio   30/10/2013 21:48:48

Caro Avelino. Obrigado pela atenção. Apesar de substituir , conforme sua orientação, o Outllok ainda inicia sobrepondo-se à aplicação. A partir da segunda execução (envio de e-mail), como eu deixo o Outlook minimizado, já não ocorre mais. Alguma outra sugestão? Obrigado.

André Goulart   02/12/2013 09:41:20

Bom Dia

Avelino existe a possibilidade de enviar um email da minha conta "Andre" mais o destinatário receber com o nome "Sistema Automático" por exemplo? porque são varias pessoas que enviam o email de varias maquinas para a mesma pessoa.

vanderlan   13/01/2014 23:21:39

Como faço para saber se eu tenho uma conta no outlook ?

Leo   04/02/2014 11:52:33

Olá Avelino,

Como faço para que a mensagem do e-mail seja o resultado de uma query ou relatório ?

wagnergilson@hotmail.com   05/02/2014 11:03:33

Tenho um relatório no access, baseado em uma consulta de várias tabelas, que imprimo e envio cópia a um usuário. Gostaria de mandá-lo via email ao clicar um botão no formulário, sem utilizar o outlook. Não estou conseguindo fazer isso.

Ronilson   17/02/2014 17:57:14

Avelino bom dia primeiramente obrigado pelas dicas deixou meu código mais limpo.

Estou com o mesmo problema do Alexandre Santos na hora de fazer o loop pelos recorset o mesmo relatório (boleto cef) e enviado, como estou fazendo teste estou utilizando minha conta todo o processo funciona perfeitamente o que acontece é que o mesmo relatório fica alocado na memoria sendo assim durante o loop o primeiro relatório é enviado a todos os email da lista, cheguei esta conclusão pois utilizei os vários métodos de percorrer o recorset como (move.next, acCmdRecordsetNext, ate mesmo acCmdDeleteRecord para eliminar o registro e captura o próximo mas nada funcionou. Tem alguma ideia do que pode estar mantendo este registro na memoria evitando a leitura e envio do próximo.

Obrigado;

[]'s Ronilson Silva

André Silveira   27/03/2014 11:06:31

Parabéns pelo post.

Tenho um grupo de representantes, e cada representante tem um grupo diferente de clientes. A base é única e atualizada semanalmente. Consigo gerar um relatório agrupando os clientes por representante. Agora preciso que o Access gere o relatório, mas anexe apenas a parte específica do primeiro representante enviando para o e-mail correspondente desse representante. Em seguida, o Access deve fazer o mesmo procedimento para o próximo representante, assim sucessivamente até o final. Alguém saberia me ajudar a automatizar esse procedimento?

Helder Fran   04/05/2014 17:33:43

Excelente! Consegui resolver o meu problema em enviar a partir de contas diferentes da conta padrão que utilizo no Outlook. Muitíssimo obrigado!

Daniel   26/08/2014 10:20:17

Muito bom o Post, mas gostaria se existe a possibilidade de arrastar um email diretamente do outlook para um campo tipo Anexo em um formulário, sem a necessidade de salvar e depois procurar o arquivo para anexar. ou se possivel simplesmente com CTRL+C e CTRL+V do Outlook para Access

Ediel Clamoroska   23/02/2015 09:29:24

Avelino bom dia,

Como se desativa a segurança do Outlook 2010 para não aparecer o alerta de envio de email?

Grato

Ediel Clamoroska

Eduardo Gomes   06/03/2015 11:56:50

Olá, Alguém pode me ajudar
Eu tenho uma aplicação que rodava em windows 7 com access 2007 com microsoft outlook No entanto, após instalar o windows 8.1 single a aplicação não funciona mais. a referencia MICROSOFT OUTLOOK 12.0 OBJECT LIBRARY você habilita e depois que o aplicativo reinicia ela não se encontra mais habilitada

Avelino Sampaio   07/03/2015 06:49:36

Eduardo,

bem louco este comportamento !

Pelo que eu entendi vc realizou a instalação do 8 sobre o 7. Minha sugestão é que vc use o REPARAR do Office 2007

Vá em Opções do Access > Recursos > Clique no botão Diagnosticar

Sucesso!

Paulo C. Amaral   19/03/2015 19:40:20

Usava esse código baseado nos riquíssimos ensinamentos do Mestre Avelino, que funcionava corretamente, até então. Após usar o Windows 8.1, começou a dar erro no envio na linha ".To", Alguém pode me ajudar? Uso o Access versão 2010.

Private Sub PDFEmail_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

If IsNull(Me!Código) Then Exit Sub
Set objOut = CreateObject("Outlook.application")
Set objmail = objOut.CreateItem(olMailItem)
Set objAnexo = objmail.Attachments
strArquivo = "Orçamento" & Me!Código & ".pdf"
strLocal = CurrentProject.Path & "\Enviados\" & strArquivo
If Me.Dirty Then DoCmd.RunCommand acCmdSaveRecord
DoCmd.OpenReport "OrçamentoVincPDF", acViewPreview, , "Código = " & Me!Código, acHidden
DoCmd.OutputTo acOutputReport, "OrçamentoVincPDF", acFormatPDF, strLocal
DoCmd.Close acReport, "OrçamentoVincPDF"
objAnexo.Add strLocal, olByValue, 1

With objmail
.To = Me.[E-mail]
.Subject = "Orçamento Nº " & Me.Código
.Body = "Olá " & Me.Contato & vbCrLf & vbCrLf & _
"Segue em anexo o orçamento solicitado." & vbCrLf & vbCrLf & _
"Atte." & vbCrLf & Me.Vendedor2 & vbCrLf & "EMPRESA1" & vbCrLf & "Av. Jose, 690" & vbCrLf & "Telefone: (11) 2666-0666" & vbCrLf & "Visite nosso site: www.empresa1.com.br" & vbCrLf & Me.Email2
End With

objmail.Display
Set objAnexo = Nothing
Set objmail = Nothing
Set objOut = Nothing
End Sub

Obrigado pela paciência e grandiosidade de nos ajudar


Bertozo   22/06/2015 18:53:30

Boa noite Avelino. Primeiramente, parabéns pelo seu tutorial.
Estou pesquisando e até o momento não encontrei nada.
O que estou querendo fazer é adicionar 2 anexos no mesmo email, através de uma macro enviar objeto.
Por exemplo, a macro contém uma consulta no formato .xlsx e um relatorio em .pdf, ao clicar no botão enviar, a macro abre um email com a consulta, e depois abre outro email com o relatorio. É possível colocar a consulta e o relatorio em apenas um email?

desde já agradeço!!!

Avelino Sampaio   24/06/2015 08:15:26

Bertozo,

Salve primeiro os arquivos em uma pasta, para depois então anexa-los. Para salva-los em uma pasta, utilize o comando OutPutTo. Veja no meu turorial "Gerar relatórios em pdf e enviar por email"

Bom estudo!

Diego Miranda Lopes   12/08/2015 18:31:20

Olá, existe alguma informação mais avançada sobre Vinculo entre o ACCESS x Contatos do Outlook.
O básico, que é fazer o vinculo, já consegui.
Porém tem ocorrem varias incompatibilidades que não encontro solução. E gostaria de optar por mais campos à serem vinculados.
Alguém sabe algo a respeito?
Obrigado

Luciana Souza   10/11/2015 15:21:21

Agradeço muito pelo artigo, me ajudou muito, porém ao enviar o email, é exibida uma mensagem:
Erro 2147024809 - Um ou mais argumentos são inválidos...
Você pode me informar o motivo e uma solução para este problema

Eric Hasobe   30/12/2015 12:31:59

Galera preciso utilizar o botão Verificar Nomes do Outlook a partir de código no access. Alguém pode me ajudar?

Sergio   22/08/2017 09:54:34

Boa tarde Avelino!

Tem como utilizar a rotina de envio de e-mail usando RunTime 2007?!

Dá erro informando que a referência msoutl.olb não existe!!


Envie seu comentário: