Notifications
Clear all

Enviar Email - Direto do Excel

26 Posts
4 Usuários
0 Reactions
4,458 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa Tarde

Sou novo no fórum, e gostaria de saber se existe alguma maneira de enviar e-mail diretamente do Excel, sem depender do Outlook. Por exemplo criar um botão na planilha que envie a mesma para uma lista de emails, sem depender de nenhuma configuração a não ser o Excel.

Encontrei este código em um outro fórum, peço desculpas por não me recordar o nome do fórun

Option Explicit

Sub EnviarEmail()
    ' Esta rotina envia todo o arquivo por email
    ActiveWorkbook.SendMail "xxx@xxx.com", "Título do Email"
End Sub

Sub EnviarEmailPlanilhaEspecifica()
Dim NovoArquivoXLS As Workbook
Dim sPlanAEnviar As String
Dim sExcluirAnexoTemporario As String

'Define a planilha que será enviada por email. Ex.: Plan1, Balancete, Lista De Nomes, etc
 sPlanAEnviar = "Plan2"

 'Cria um novo arquivo excel
 Set NovoArquivoXLS = Application.Workbooks.Add

 'Copia a planilha para o novo arquivo criado
 ThisWorkbook.Sheets(sPlanAEnviar).Copy Before:=NovoArquivoXLS.Sheets(1)

 'Salva o arquivo
 NovoArquivoXLS.SaveAs ThisWorkbook.Path & "" & sPlanAEnviar & ".xls"
sExcluirAnexoTemporario = NovoArquivoXLS.FullName

 'Envia o email
 NovoArquivoXLS.SendMail "xxx@xxx.com", "Título do Email"

 'Fecha o arquivo novo
 NovoArquivoXLS.Close

'Exclui o arquivo criado apenas para ser enviado.
Kill sExcluirAnexoTemporario

End Sub

Porém sempre que tento criar o botão para enviar o arquivo tenho o retorno:

Erro de tempo de execução 1004 - Falha no sistema de e-mail. Verifique a instalação do sistema de e-mail.

Em anexo segue a planilha.

Desde já agradeço a ajuda

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/01/2017 1:55 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá camposcc, tudo bem...

Respondendo sua pergunta, Sim, existe sim a possibilidade do próprio Excel fazer o envio para o e-mail sem a necessidade do Outolook porém, você vai precisar informar todas as configurações do e-mail Remetente no código do VBA. Pois neste caso, o próprio Excel fará o papel do gerenciador de e-mails.

Agora, se me permite eu expressar minha opinião...
Eu, particularmente não gosto desta maneira de enviar e-mail não, Eu, prefiro que o Excel faça o envio através do Microsoft Outlook, pois no Outlook vai ter todo o registro do envio (Data/Hora, Assunto, Destinatário) e principalmente vai ter o retorno casa haja algum problema com o e-mail do destinatário.
Quando comecei a fazer o Excel enviar os e-mails pramim, eu utilizei igual você está precisando, direto do excel sem registro de envio sem nada, até o dia em que estava passando por uma auditoria e precisei comprovar os envios destes e-mails, e aí... eu não tinha como provar... então tive que rever esse processo e utilizar o Outlook para manter os registros histórico dos envios.

Entre nesse tópico (viewtopic.php?f=10&t=23362) que solicito help para temporizar um intervalo no disparos entre os e-mails. (em anexo a planilha que eu utilizo atualmente).

Espero te ajudado...

At;
Danilo.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/01/2017 11:45 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa Noite

Obrigado pela resposta Danilo, gostaria de enviar direto do Excel mesmo, como a planilha que vou enviar não precisa, de retorno gostaria que fosse o mais simples possível, preencher e enviar sem a necessidade de mais nenhum, outro processo a não ser o Excel.

Muito obrigado por disponibilizar sua planilha também.

Atenciosamente

Rodrigo

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/01/2017 4:56 pm
(@miguel-70)
Posts: 207
Estimable Member
 

Disponho de um modelo que envia direto do excel com anexo PDF e outro xlsm

 
Postado : 29/01/2017 2:38 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia Miguel

Você poderia me disponibilizar o modelo de sua planilha.

Desde já Agradeço

Atenciosamente

Rodrigo

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/01/2017 11:35 pm
(@miguel-70)
Posts: 207
Estimable Member
 

Ola boa noite camposcc, não conseguir achar o meu arquivo mas poste um modelo da sua planilha.

 
Postado : 30/01/2017 6:56 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia a todos

Encontrei o código que disponibilizo abaixo no site : http://www.exceldoseujeito.com.br/2012/ ... m-o-excel/

Este código atende a minha necessidade de enviar o email direto do Excel, a minha pergunta é como, fazer para que as células onde ficará a planilha depois de pronta seja enviada no corpo do e-mail Range (A11:F17)

S

ub EnviarEmail()
Dim objEmail As clsEmail
Dim sh As Worksheet
On Error GoTo Erro_Sub

    Set objEmail = New clsEmail     'Inicializa a classe clsEmail
    Set sh = Sheets("Plan1")        'Define a planilha
    
    With objEmail
        .setConfEmailServidor = "smtp.seuservidor.com.br"       'Servidor de saída de emails. Ex: smtp.uol.com.br
        .setConfEmailPorta = "25"                               'Porta. Padrão é a porta 25
        .setConfEmailSSL = False                                'Se necessita conexão segura SSL
        .setConfEmailFrom = "seu-email@seuservidor.com.br"      'Seu email: O remetente do email. Ex: seunome@uol.com.br
        .setConfEmailSenha = "sua-senha"                        'Sua senha: A senha que você usa para acessar seus emails
        .setConfEmailFromNome = "Seu Nome"                      'Seu nome: O nome que será exibido no campo De:
        .Configurar     'Executa a configuração
        
        .setEmailTo = sh.Range("C8")                            'Email do Destinatário
        .setEmailToNome = sh.Range("C6")                        'Nome do Destinatário
        
        .setEmailTitulo = "Aprendendo a enviar emails diretamente do Excel"     'Título da mensagem
        
        'Aqui, você deve digitar o conteúdo. Pode utilizar formatação HTML.
        .setEmailConteudo = "Olá, <strong>" & .getEmailToNome & "</strong>.<br><br>Estou aprendendo muito aqui no site <a href="""http://www.exceldoseujeito.com.br"">Excel" do Seu Jeito</a>." _
                            & "<br><br>Acesse <a href="""http://www.exceldoseujeito.com.br"">http://www.exceldoseujeito.com.br</a>" e fique expert no Excel."
        
        .EnviarEmail
    
    End With
    
    Set objEmail = Nothing
    Set sh = Nothing
    
    MsgBox "Email enviado com sucesso!", vbInformation
    
Exit Sub
Erro_Sub:
    MsgBox Err.Description, vbExclamation
    Exit Sub
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 31/01/2017 3:36 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Tente assim:

.Body = sh.Range(A11:F17).Value

At;
Danilo.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 31/01/2017 4:44 am
(@miguel-70)
Posts: 207
Estimable Member
 

Olá, ainda não entendi a tua dúvida.
Este código pode ti ajudar. Ele envia uma cópia da planilha com as macros para ate vários destinatários.
1- Cole em um módulo da planilha.
2 - caso não enviar vc precisa ativar
a) acessar as configurações do e-mail; b) Login e Segurança; c)Permitir aplicativos menos seguros: ATIVADA

Sub Salva_Cópia_da_Planilha()
    On Error GoTo debugs
    Set objWS = CreateObject("WScript.Shell")
    ActiveWorkbook.SaveCopyAs Filename:= _
    objWS.SpecialFolders("mydocuments") & "Arquivo " & Format(Date, "  dd-mm-yyyy") & ".xlsm"
    Call EnviarEmailCDO
    End
debugs:
 MsgBox "ARQUIVO NÃO FOI SALVO . ", vbCritical, "ATENÇÃO"
End Sub
Sub EnviarEmailCDO()
    On Error Resume Next
    Dim oMensagem As Object
    Dim oConfiguração As Object
    Dim sCorpo As String
    Dim vFields As Variant
    Dim objWS As Object
    Dim strCaminho As String
   On Error GoTo debugs
    Set objWS = CreateObject("WScript.Shell")
    strCaminho = objWS.SpecialFolders("mydocuments") & "Arquivo " & Format(Date, "  dd-mm-yyyy") & ".xlsm" _
   'linha em branco
    Set oMensagem = CreateObject("CDO.Message")
    Set oConfiguração = CreateObject("CDO.Configuration")
     oConfiguração.Load -1 'Padrões CDO
        Set vFields = oConfiguração.Fields
        With vFields
            .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.live.com" 'se for gmail usar "smtp.gmail.com"
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 'e-mail cadastrado for gmail usar 465
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = "true"
            .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "e-mail-remetente@hotmail.com" 'e-mail remetente
            .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "senha-email-remetente" 'senha do e-mail remetente
            .Update
        End With
        With oMensagem
        Set .Configuration = oConfiguração
        .To = "destino-do-email@gmail.com" 'mude aqui para alterar o destinatário
        .cc = ""
        .BCC = ""
       .From = "<e-mail-remetente@hotmail.com>" 'e-mail remetente
        .Subject = "Cópia da Planilha" 'Título do e-mail que tambem pode ser, range("A11")
        .TextBody = sCorpo
        .AddAttachment strCaminho
        .Send
        MsgBox "E-mail enviado com sucesso, cópia da planilha"
    Call excluir_Arquivo_Enviado
    Exit Sub
debugs:
    If Err.Description <> "" Then MsgBox Err.Description, vbCritical, "Alerta  de  Erro  de  Envio  do  E-mail  ! ! ! ! ! ! ! ! ! ! "
    Set objWS = CreateObject("WScript.Shell")
    On Error Resume Next
    Kill objWS.SpecialFolders("mydocuments") & "Arquivo " & Format(Date, "  dd-mm-yyyy") & ".xlsm" _
''''''''''
    End With
End Sub
Sub excluir_Arquivo_Enviado()
   Set objWS = CreateObject("WScript.Shell")
   On Error Resume Next
   Kill objWS.SpecialFolders("mydocuments") & Format(Date - 1, "  dd-mm-yyyy") & ".xlsm" _
   'linha vazia
 End
End Sub

Enviar cópia da planilha para outro e-mail não é interessante porque tua senha e códigos vão junto então seria somente para a sua própria conta.

 
Postado : 31/01/2017 10:42 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa Noite Miguel

A planilha vai ser uma planilha de ocorrências, o corpo dela deve ser enviado no e-mail, e este corpo contemplam as células de A11:F17, já consegui configurar o email para enviar a planilha porém não consigo enviar o corpo da planilha no e-mail.

O código abaixo atendeu bem o meu propósito, porém não sei o que tenho que incluir para no corpo da mensagem contemplar as células A11:F17. Quanto ao email, vai ser criado um e-mail somente para ocorrências, e a planilha irá disparar os e-mails.

Sub EnviarEmail()
Dim objEmail As clsEmail
Dim sh As Worksheet
On Error GoTo Erro_Sub

Set objEmail = New clsEmail 'Inicializa a classe clsEmail
Set sh = Sheets("Plan1") 'Define a planilha

With objEmail
.setConfEmailServidor = "smtp.seuservidor.com.br" 'Servidor de saída de emails. Ex: smtp.uol.com.br
.setConfEmailPorta = "25" 'Porta. Padrão é a porta 25
.setConfEmailSSL = False 'Se necessita conexão segura SSL
.setConfEmailFrom = "seu-email@seuservidor.com.br" 'Seu email: O remetente do email. Ex: seunome@uol.com.br
.setConfEmailSenha = "sua-senha" 'Sua senha: A senha que você usa para acessar seus emails
.setConfEmailFromNome = "Seu Nome" 'Seu nome: O nome que será exibido no campo De:
.Configurar 'Executa a configuração

.setEmailTo = sh.Range("C8") 'Email do Destinatário
.setEmailToNome = sh.Range("C6") 'Nome do Destinatário

.setEmailTitulo = "Aprendendo a enviar emails diretamente do Excel" 'Título da mensagem

'Aqui, você deve digitar o conteúdo. Pode utilizar formatação HTML.
.setEmailConteudo = "Olá, <strong>" & .getEmailToNome & "</strong>.<br><br>Estou aprendendo muito aqui no site <a href="""http://www.exceldoseujeito.com.br"">Excel" do Seu Jeito</a>." _
& "<br><br>Acesse <a href="""http://www.exceldoseujeito.com.br"">http://www.exceldoseujeito.com.br</a>" e fique expert no Excel."

.EnviarEmail

End With

Set objEmail = Nothing
Set sh = Nothing

MsgBox "Email enviado com sucesso!", vbInformation

Exit Sub
Erro_Sub:
MsgBox Err.Description, vbExclamation
Exit Sub
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 31/01/2017 3:45 pm
(@miguel-70)
Posts: 207
Estimable Member
 

Mescla as celulas; Range(A11:F17) para
.Body = sh.Range("A11")

 
Postado : 31/01/2017 3:56 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom dia Miguel

Sou novato em macros, e não faço a menor ideia de onde coloco esta linha de código. Estou enviando a planilha formatada, a informação que preciso que seja enviada, está nas células A9:F15

Se não for pedir muito pode me passar o passo a passo do procedimento citado.

Atenciosamente

Rodrigo

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 01/02/2017 1:26 am
(@miguel-70)
Posts: 207
Estimable Member
 

Ola bom dia,
No seu modelo postado não conseguir mandar todas as células no corpo do e-mail apenas uma célula, então fiz outro modelo que envia no formato PDF.
Você pode modificar o exemplo que estou ti enviando aumentar as linha, o zoom redefinindo o pdf.
Altere as linhas do código no UserForm1 então vc consegue enviar o email com anexo pdf.

Click ALT+F11 vai abrir visual basic, depois
Duplo Click encima UserForm1, depois
Modifica as 3 linhas;

 "fulano@hotmail.com" 'email remetente
"senha-email" 'senha email remetente
<fulano@hotmail.com>" 'email remetente

Caso Vc usar o Gmail modificar as duas linhas acima instrução nas linhas de cor verdes.
Também vc precisa entrar na conta gmail, depois; minha conta, login e segurança, Permitir aplicativos menos seguros: ATIVADA.

 
Postado : 02/02/2017 6:04 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá Rodrigo, tudo bem...

Você pode inserir dentro do:

With objEmail
.setConfEmailServidor = "smtp.seuservidor.com.br" 'Servidor de saída de emails. Ex: smtp.uol.com.br
.setConfEmailPorta = "25" 'Porta. Padrão é a porta 25
.setConfEmailSSL = False 'Se necessita conexão segura SSL
.setConfEmailFrom = "seu-email@seuservidor.com.br" 'Seu email: O remetente do email. Ex: seunome@uol.com.br
.setConfEmailSenha = "sua-senha" 'Sua senha: A senha que você usa para acessar seus emails
.setConfEmailFromNome = "Seu Nome" 'Seu nome: O nome que será exibido no campo De:
.Configurar 'Executa a configuração

.setEmailTo = sh.Range("C8") 'Email do Destinatário
.setEmailToNome = sh.Range("C6") 'Nome do Destinatário

.setEmailTitulo = "Aprendendo a enviar emails diretamente do Excel" 'Título da mensagem

.Body = sh.Range(A11:F17).Value 'Conteúdo para o Corpo do e-mail.

At;
Danilo.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/02/2017 10:40 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa Tarde Miguel

Muito Obrigado pela ajuda era exatamente o que eu precisava

Atenciosamente

Rodrigo

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 06/02/2017 2:28 pm
Página 1 / 2