Oi pessoal.
Vou mostrar uma macro para enviar suas planilhas por email diretamente pelo Excel. Então você poderia me dizer: “Ah!!! Mas o Excel já me permite fazer isso através do menu Arquivo > Enviar para…“. E eu lhe digo: “Com toda razão, meu caro!”. Mas diga-me, se por um acaso, você desejasse enviar apenas uma planilha da sua pasta de trabalho, o que você faria? Copiaria essa planilha em um novo arquivo, salvaria este novo arquivo, para só depois enviá-lo. Estou certo?! Então. Esse é só um dos casos que esta macro lhe ajudaria.
Essa rotina que irei descrever pode ser adaptada para diversas situações. Você, como programador, entenderá o seu funcionamento e saberá ajustá-la para a sua necessidade, de acordo com o seu projeto. Seja para enviar automaticamente ao concluir alguma etapa do seu programa, seja para enviar planilhas seletivamente, para enviar para destinatários já cadastrados em algum banco de dados, enfim, use sua criatividade e obtenha os mais fantásticos resultados.
Primeiro, crie um módulo global para escrever a rotina de envio de emails. Vamos chamá-la de EnviarEmail.
Sub EnviarEmail()
ActiveWorkbook.SendMail "email_do_destinatário@email.com", "Título do Email"
End Sub
O código acima dispensa maiores explicações. Ele serve para enviar todo o arquivo (pasta de trabalho) por email.
A partir dele você pode começar a se divertir, adicionando modificações que atenderão ao seu projeto, em particular. Suponha que sua necessidade seja de enviar apenas uma planilha específica dentre as inúmeras planilhas que você possui no seu arquivo. Você pode fazer assim:
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 "email_do_destinatário@email.com", "Título do Email"
'Fecha o arquivo novo
NovoArquivoXLS.Close
'Exclui o arquivo criado apenas para ser enviado.
Kill sExcluirAnexoTemporario
End Sub
Esta macro salvará em um novo arquivo excel somente a planilha informada e a enviará por email.
Espero que gostem.
Abraços.
Show
Como faço para criar uma fx que me busque os valores da seguite forma:
Na Plan1 tenho vária colunas e em cada uma dela tem um código. e no final a descirção.
Coluna A1 = 101 – C1 = 102 – F = 103 – H1 = Lápis
Já na plan2 na coluna A1 vou digitar 102 e quero que venha a descrição.
Sei que tem exixte o procv mas as formulas ficaria muito grante tem como fazer uma função
que fizesse isso, eu tente mais não consegui.
Obrigado
Cara, pelo que entendi, você quer pesquisar tendo mais de uma coluna para pesquisar…
PROCV é o mais indicado, existem outras maneiras também, cada uma depende da forma que deseja obter os resultados.
Ou seja, cada caso é um caso.
Não sei bem o que você quer. Mas acho que seria caso de PROCV mesmo. É uma solução mais geral.
Abraço.
Muito Boa essa dica.
Tem como incrementar após o envio a exclusão do arquivo? Só da plan nova que ele criou.
Tú é muito inteligente
Gladson, você pode fazer assim:
Adicione uma variável do tipo string para armazenar o endereço do arquivo gerado dinamicamente:
Dim sExcluirAnexoTemporario As String
Em seguida, após a instrução para salvar este arquivo (NovoArquivoXLS.SaveAs …) atribua o path do arquivo à variável criada:
sExcluirAnexoTemporario = NovoArquivoXLS.FullName
Finalmente, após fechar o arquivo do anexo (NovoArquivoXLS.Close), escreva a instrução para excluí-lo:
Kill sExcluirAnexoTemporario
Vou atualizar o código do artigo com esta instrução, ok!
Abraço.
Cara esse código ficou ótimo.
Tenho duas dúvidas.
A primeira e mais simples: Como faço para enviar a planilha para vários destinatários?
Asegunda dúvida: tenho uma formatação condicional na planilha, seria possível a planilha ser enviada automaticamente sempre que essa condição fosse atendida. Por exemplo tenho uma planilha cujo uma célula possui uma formatação condicional que me mostra que uma data está vencida, assim eu queria que aparecendo a expressão vencida o email já fosse desparado. Tem como?
Em termos de otimização não seria ideal.
Mais vantajoso seria criar uma rotina que fosse acionada pelo usuário e fizesse uma varredura de todas as condições que fossem satisfatórias e então, disparasse o email.
Abç
Deu tudo certo aqui, só falta uma coisa:
Como faço para colocar um texto padrão no corpo de todos os emais que eu for enviar
ex:
Boa tarde,
Seguem dados bla bla bla
Gabriel,
O método SendMail não fornece suporte a esta funcionalidade.
Você conseguirá isto usando chamadas as dll’s do MAPI ou CDO. Assim que eu tiver uma oportunidade, escreverei algo bem interessante sobre este assunto, ok.
Abrç
Olá,
Tem como eu mandar por email apenas uma linha (com mais uma célula) da planilha?
Obrigada.
Tereza, esta função é específica para enviar arquivos, ou seja, planilhas.
Se você quiser enviar apenas um linha da planilha, deverá enviá-la através de uma planilha contendo apenas a linha que deseja.
Veja. No exemplo do artigo, é criado um novo arquivo apenas com a planilha que deseja enviar. Numa adaptação para o seu caso, a clonagem desta planilha seria substituída apenas pela clonagem da linha desejada, entendeu?
Exemplo: Altera a linha 13 do código por estas abaixo.
Selection.Copy
NovoArquivoXLS.Sheets(1).Range(“A1”).Paste
Application.CutCopyMode = False
Pronto. Sempre que você chamar a função para Enviar, ANTES disso, SELECIONE o intervalo de células que deseja clonar e enviar por email.
Será feita uma cópia deste intervalo em um novo arquivo e enviado por email.
Espero que ajude.
Abraço.
Olá amigo, demorei mas achei alguem competente para me salvar com essas macros !! ( rsss ) mas o problema que encontrei foi o seguinte: por motimo que deconheço, não está colando !!!! está dando erro !!! quando eu chamo para enviar o e-mail, aparece “erro de tempo na execução ‘438’ O objeto não aceita esta propriedade ou método.” ae eu vou em depurar, no depurador aparece a linha ” NovoArquivoXLS.Sheets(1).Range(“A1″).Paste ” em destaque, suponho que o erro esteja ae !!! favor me ajudar, sei q o post é antigo… mas se puder… Obrigado >>> segue o código inteiro que estou fazendo o teste >>>
Sub Retângulo6_Clique()
Dim NovoArquivoXLS As Workbook
Dim sPlanAEnviar As String
Dim sExcluirAnexoTemporario As String
sPlanAEnviar = “Plan1”
Set NovoArquivoXLS = Application.Workbooks.Add
Selection.Copy
NovoArquivoXLS.Sheets(1).Range(“A1”).Paste
Application.CutCopyMode = False
NovoArquivoXLS.SaveAs ThisWorkbook.Path & “” & sPlanAEnviar & “.xls”
sExcluirAnexoTemporario = NovoArquivoXLS.FullName
NovoArquivoXLS.SendMail “email_do_destinatário@email.com”, “Lançar OP”
NovoArquivoXLS.Close
Kill sExcluirAnexoTemporario
End Sub
Reescrevendo seu código:
Dim NovoArquivoXLS As Workbook
Dim sPlanAEnviar As String
Dim sExcluirAnexoTemporario As String
Dim wbVoltar As String
sPlanAEnviar = “Plan1”
wbVoltar = ThisWorkbook.Name
Selection.Copy
Set NovoArquivoXLS = Application.Workbooks.Add
Windows(NovoArquivoXLS.Name).Activate
ActiveSheet.Paste Destination:=Worksheets(1).Range(“A1”)
Application.CutCopyMode = False
Windows(wbVoltar).Activate
NovoArquivoXLS.SaveAs ThisWorkbook.Path & “” & sPlanAEnviar & “.xls”
sExcluirAnexoTemporario = NovoArquivoXLS.FullName
NovoArquivoXLS.SendMail “email_do_destinatário@email.com”, “Lançar OP”
NovoArquivoXLS.Close
Kill sExcluirAnexoTemporario
Abç
Ola tudo bom,
Entao sou iniciante em programação, eu copie a macro e ok deu tudo certo. No entando gostaria de colacar um texto no escopo do e-mail do tipo: “boa tarde, segue a planilha em anexo”.
Poderia me ajudar.
Cara, infelizmente eu ainda não consegui, não teve jeito mesmo, poderia por favor postar para download a planilha com a macro; igual aos outros posts ???? se não for abusar da boa vontade… hehe… Obrigado.
Postei o arquivo fonte lá.
Olha só, eu tenho essa macro que copiei para envio de email, no entanto no escopo do email (message, aparece tambem um texto: “O documento anexado possui uma lista de circulação. Ao terminar de revisá-lo, escolha Próximo Destinatário da Lista de Circulação no menu Enviar para do menu Arquivo do Microsoft Office Excel para retornar o documento ao remetente”. Como faço para tirar essa mensagem
Sub RouteActiveWorkbook()
With ActiveWorkbook
With .RoutingSlip
.Delivery = xlAllAtOnce ‘codigo que permite enviar todos de uma só vez
.Recipients = Array(“andref@xxxxx.com.br”, _
“adailton@xxxxxx.com.br”, “joao@xxxxx.com.br”)
.Subject = “teste”
.Message = “TESTE DE E-MAIL AUTOMÁTICO”
End With
.Route
End With
End Sub
Olá Reinaldo, tudo bem?
Gostei muito da primeira macro para envio de planilha excel anexa ao e-mail… no meu caso, gostaria que no campo (Assunto) do e-mail aparecesse a informação de duas celulas que consta na planilha o qual anexei, tem como?
Obrigado
Tem sim.
Substitua o “Titulo do Email” por algo como:
Sheets(“Nome da Planilha que contem a informação do titulo”).Range(“Informe a célula. Ex: A1”)
Abraço.
Amigo você pode me ajudar!!! O código funcionou direito, mas queria colocar como “assunto” do email uma célula. Já tentei o descrito acima, mas sem sucesso! Por favor me ajude! obrigado.
estou querendo enviar para vários emails diferentes, não estou conseguindo, me ajude!!!
Olá,
Primeiro de tudo,parabéns pelo site maravihoso..mais a macro não “rodou” no meu pc,eu baixei o anexo copiei as macros e editei o e-mail : [editado pelo moderador] e não dá certo
Sugestão:
https://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/
Sub EnviarEmail()
‘ Esta rotina envia todo o arquivo por email
ActiveWorkbook.SendMail “[editado pelo moderador]”, “Faturamento Mês”
End Sub
Bom Dia
Nao tenho conseguido colar no corpo do E-mail a planilha (pode ate ser como figura).
Nao encontro a solucao em lugar algum.
Alguem tem uma luz para esta questao !?
Tenho uma planilha que baixo do sistema que utilizo na empresa que trabalho, nela são geradas itens em pedido cujas ordens de compra estão em atraso e ainda não foram recebidas, toda semana preciso enviar perto de 50 emails para cada um dos fornecedores em atraso listando ordens de compra que precisam ser embarcadas, como deveria ser a macro para enviar a cada um deles as respectivas linhas em atraso com um text padrão tipo: “Ordens de compra em atraso”. Estou levando em consideração que para cada linha no excel estaria disponibilizando o email do meu contato.
No aguardo.
Obrigado!!!
Acresentando, seria algo como:
CODIGO FORNECEDOR NOME FORNECEDOR ITEM DESCRIÇÃO UNIDADE DATA ENTREGA ORDEM DE COMPRA LINHA PEDIDO QUANTIDADE SOLICITADA QUANTIDADE RECEBIDA QUANTIDADE PENDENTE Email to
111111 TESTING CORPORATION YXZ TESTE UN 01/10/2010 123456 1 100 60 40 myself@hotmail.com
111111 TESTING CORPORATION YXZ TESTE UN 15/10/2010 123456 2 200 0 200 myself@hotmail.com
222222 TRYOUT INCORPORATED TBD PROTOTYPE CT 20/10/2010 654321 1 1 0,1 0,9 me@hotmail.com
222222 TRYOUT INCORPORATED TBD PROTOTYPE CT 22/10/2010 654321 2 2 0 2 me@hotmail.com
222222 TRYOUT INCORPORATED TBD PROTOTYPE CT 24/10/2010 654321 3 3 0 3 me@hotmail.com
Ninja,
Boa noite!
Tua macro é show! Me diz se dá pra fazer o que quero?
– Uma macro como essa tua que envia e-mail com planilha direto do Excel só que preciso de uma “macro mãe”, ou seja, nessa tua eu fixo uma planilha e pronto: Ela envia aquela planilha. Então se eu tiver uma macro que faça isso mas me permita definir antes do envio qual planilha quero enviar naquele momento seria a solução para meus problemas de envio de relatórios.
Conto contigo!
Franklin
Uma maneira mais flexivel de enviar emails pelo Excel:
https://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/
Sera que alguem tem uma macro que salva os dados de uma planilha XLS em TXT?
POR FAVOR PRECISO DE AJUDA.
Veja uma solução aqui:
https://www.exceldoseujeito.com.br/2010/12/22/macro-para-salvar-uma-planilha-xls-em-txt/
Abraço
Esta macro é exelente, e poderá me ajudar muito, o problema é seguinte: eu tenho uma planilha de despesas separada por gerencia e todo mes tenho que criar email para cada gerencia que não são poucas, e cada planilha talves possa me ajudar, tentei utiliza sua macro para fazer este trabalho por mim, porem se eu tento enviar para mais de dois emails diferente a macro não copia a terceira e da um erro de exucução ‘9’ na linha
Sheets(sPlanAEnviar).Copy Before:=NovoArquivoXLS.Sheets(1) caso possa me ajuda eu agradecria muito.
Boa tarde
eu fiz uma macro pra enviar uma pasta de trabalho, consegui fazer isso perfeitamente, mas essa pasta está indo como anexo, porém gostaria que fosse enviada no corpo do e-mail, tem como fazer??
Desde já agradeço
Segue a macro que fiz
Sub Envio_Automático1()
Dim strDate As String
Dim MyArr As Variant
MyArr = Sheets(“mail”).Range(“a1:a99”)
Sheets(“Rel Cob+1-V”).Visible = True
Sheets(“Rel Cob+1-V”).Select
ActiveSheet.PivotTables(“Tabela dinâmica2”).PivotCache.Refresh
Sheets(Array(“Rel Cob+1-V”)).Copy
strDate = Format(Date, “dd-mm-yyyy”) & ” Hora ” & Format(Time, “hh-mm-ss”)
ActiveWorkbook.SaveAs “Planilha de Cobrança ” _
& ” Data ” & strDate & “.xls”
ActiveWorkbook.SendMail MyArr, _
“Planilha de Cobrança de ” & ” ” & strDate
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
ActiveWorkbook.Close False
Sheets(“Rel Cob+1-V”).Visible = False
End Sub
Reinaldo,
veja se pode me ajudar: Tenho uma planilha com as datas de vencimento de contratos de estagiários, e gostaria que o excel enviasse para o meu e-mail somente as linhas que trazem os nomes do estagiários e as datas de vencimento do mês subsequente ao atual, porém não como anexo e sim como texto e também sem que o excel fosse aberto.
Tem como me ajudar?!
Abs,
Sem abrir o Excel, impossível, pois, a programação da macro está no Excel…
Olá!
Sou portugues, e embora seja triste, mas é quase impossivel encontrar informacoes deste tipo em sites mesmo de portugal, o que torna complicado visto que voces ai usam termos ligeiramente diferentes dos nosso, como por exemplo: enquanto ai chamam de “planilha”, aqui chamamos de “folha”.
Será que o facto de eu não conseguir que me seja possivel utilizar este método, se deva ao nome das folhas?
Aparece-me este erro ‘runtime error ‘9’ – out of range,
Nesta linha:
Sheets(sSheetToSend).Copy Before:=NovoArquivoXLS.Sheets(1).
já tentei alterar o nome desta forma
Sheets(sSheetToSend).Copy Before:=NovoArquivoXLS.Sheets(“NotaEncomenda.XLSX”).Range(“A4:N111”)
mas continua a dar o mesmo erro.
É possivel saber o meu erro?
Olá Nuno,
Não há diferenças quanto ao termo planilha/folha pois o código VBA é escrito com os termos da própria linguagem. Os termos que estão digamos “Traduzidos” são apenas referências, não influencia a estrutura das funções internas, apenas ajuda o nosso entendimento na leitura.
O acerto que você tentou fazer não ajudou muito.
Como você postou somente a linha que deu erro não tem como dizer o que pode estar errado, pois percebi que fez alterações no código.
Mas acredito que pode estar no termo “sSheetToSend”. Você deve definir o nome da folha previamente, assim:
Exemplo
sSheetToSend = “Folha1”
Não sei se fez isso.
De qualquer forma, se quiser postar todo o código, fique a vontade.
Olá Reinaldo tudo bem, muito bom o seu site sobre VBA.
Tenho uma duvida referente a esse codigo de enviar e-mail tem como anexar um arquivo txt, onde tem outra macro que pega dados do excel e salva em txt e mandaria automaticamente o e-mail com o arquivo anexado.
Obrigado
Leia
https://www.exceldoseujeito.com.br/2012/07/24/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel-parte-2/
OLA…TENHO UM BANCO DE DADOS DE CLIENTES E TENHO QUE PASSAR EMAIL TODO DIA PARA ELES CADA CLIENTE TEM UM CODIGO ONDE EU DIGITO O MESMO E OS TODOS OS DADOS APARESEM, GOSTARIA DE SABER COMO FAÇO OU SE JA TEM UM PROGRAMA OU UM MACRO QUE FUNCIONE DA SEGUINTE MANEIRA: QUE QUANDO EU CLICAR NO LINQUE DE EMAIL (DE UM BANCO DE DADOS DE EMAIL) ELE ABRA O OUTLOOK COM O ARQUIVO OU PLANILHA JA ANEXADA E O EMAIL DO DESTINATARIO JA PREENCHIDO SEM QUE EU PRECISE FICAR DIGITANDO O EMAIL TODA HORA.
Bom dia !
Amigo, estou precisando de uma ajuda! existe comando para o meu caso abaixo ?
Tenho um arquivo com o nome (exe:) 123456.xls, preciso de uma macro que vai ler em uma determinada celula de outro arquivo este nome 123456.xls e terá que abrir este arquivo, depois salva-lo com outro nome, desde já obrigado.
Ludwig
Leia:
Salvar cópia do arquivo atual
Criar um novo arquivo excel dinamicamente
É só adaptar às suas necessidades.
Abç
Parabéns!!!
Muito obrigado pelo MACRO!!!
Era isso que eu precisava e os arquivos em anexo são de grande valia!!!
Amigo, eu tenho um problema que pode ser resolvido com o codigo acima, mas não sei direito se me serve.
Eu tenho uma planilha que é basicamente toda feita em vba, tenho uma caixa de combinação onde se escolherá o email do destinatário e um botão ao lado de enviar. Eu consigo abrir uma nova mensagem no outlook do windows, com o destinatáio escolhido na caixa de opção, mas preciso mandar esta mesma planilha por anexo. È preciso salvar a planilha e fechar(em codigo vba) ou pode ser feito com a planilha aberta, como solucionar meu problema???
grato
Junior
Pode ser feita com o arquivo aberto.
Olá Reinaldo
Como ficaria minha macro usando uma caixa de combinações para escolher o email a quem deseja enviar e anexando a propria planilha?
Eu consegui até agora somente abrir uma nova msg no outlook com o endereço do destinatário selecionado na caixa de combinação.
Boa tarde,
Estando o EXCELL e OUTLOOK abertos, tem alguma forma de definir uma data futura no EXCELL e quando da chegada da mesma seja enviado ao OUTLOOK uma mensagem pré-definida e disparada a alguns emails cadastrados?
Se sim, como posso fazer isso?
Atenção, desejo somente que seja enviado uma mensagem e não a planilha.
Obrigado
Existe a possibilidade de criar uma rotina, onde todo dia em um determinado horário, a macro rode e envie um email ?
1 – Para enviar para vários destinatários, como devo separá-los na macro?
2 – Ao invés de colocar o e-mail na macro, poderia formar um banco de dados, e, no lugar do e-mail, colocar a referência da célula onde se encontra este e-mail? Explicando: Tenho a necessidade de enviar a planilha para vários destinatários, que se alteram dependendo das informações. Desta forma, eu colocaria informações e elaboraria uma forma de me indicar para qual destinatário a planilha será enviada. A macro reconhece o local onde o e-mail está inserido ou apenas o e-mail escrito?
Leia aqui:
https://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/
Amigo estava querendo uma ajuda, onde vejo que vc consegue desenvolver atributos entre outlook e excell, pois bem estava precisando de algo assim: Quando em uma determinada planilha TESTE.xls por exemplo, tenho varias linhas com conteudo e tive que incluir uma linha e fiz algumas alterações tenho como colocar em alguma celula o nome de uma determinada pessoa que está envolvida diretamente e enviar do excell clicando no nome da pessoa as alterações por email e para o email dela.
Agradeço a ajuda…….
Bom dia trabalha em uma empresa e preciso utilizar a macro para encaminhar emails, ate ai tudo bem ja consegui fazer enviar os emails pela macro,
a grande dificuldade minha é “preciso enviar junto no corpo do email a Logo ou Assinatura da empresa” como posso enviar essa logo sem ser como anexo, e sim no corpo do email.
Att.:
Grato desde ja
Boas.
Tentei adaptar o código às minhas necessidades mas não consegui 🙁
Eu tenho uma folha em excel com diversos dados.
Esses dados têm que ser dividos em 2 para serem enviados..
Exemplo: Coluna Encomenda e Mercado têm que ser enviados para teste@mail.com
Coluna Cliente e Data enviado para teste2@mail.com.
No código que retirei daqui, a folha que ele envia vai em branco apesar da folha original não estar.
Se alguém me puder ajudar, agradecia.
Cumprimentos.
Poderia por gentileza me ajudar ?
Gostaria de saber se é possível, e em caso positivo, como fazer para receber um e-mail com todas as modificações realizadas em uma planilha bem como a data e hora das mesmas.
Sou leigo em VBA, então precisaria do código completo =\
Obrigado
Melhorando um pouco mais…
Estando o EXCELL e OUTLOOK(fico na dúvida se é necessário mantê-lo aberto ou se somente o excell é suficiente) abertos, tem alguma forma de definir uma data futura no EXCELL e quando da chegada da mesma seja enviado pelo OUTLOOK uma mensagem pré-definida e disparada a alguns emails cadastrados?
Na realidade, não desejo o envio da planilha e sim quando chegar uma determinada data definidada na planiha, seja enviado uma resposta automática aos emails já pré-definidos.
Quanto ao macro, tem como definir horário de envio também.
Como posso fazer isso. Se possível envie o macro, pois não entendo muito.
Marotondo
Pessoal, boa tarde.
Alguém pode me ajudar. Eu copiei este código para envio de e-mails através do excel.
O Código funciona, e envia o e-mail. Entretanto, não anexa a planilha qual eu estou utilizando. Ou seja, manda o e-mail, sem nenhum anexo.
Alguém sabe o que está falatando neste código?
Sub Mail_Selection_Range_Outlook_Body()
‘ Don’t forget to copy the function RangetoHTML in the module.
‘ Working in Office 2000-2007
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
Set rng = Nothing
On Error Resume Next
‘Only the visible cells in the selection
Set rng = Selection.SpecialCells(xlCellTypeVisible)
‘You can also use a range if you want
‘Set rng = Sheets(“YourSheet”).Range(“D4:D12”).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If rng Is Nothing Then
MsgBox “The selection is not a range or the sheet is protected” & _
vbNewLine & “please correct and try again.”, vbOKOnly
Exit Sub
End If
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
Set OutApp = CreateObject(“Outlook.Application”)
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = “xxxxxx.xxxx@xxxxx.com.br”
.CC = “”
.BCC = “”
.Subject = “Relatório de Consumo”
.Send ‘or use .Display
End With
On Error GoTo 0
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Use este código aqui. Vai direto, sem intermédio do Outlook.
https://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/
Abç
Gostaria de sua ajuda, tem como anexar um E-mail do Outlook dentro de um arquivo do Excel para abrir em outra máquina?
Grato,
Wesley
como faço pra enviar um email dentro do excel
brigado boa boite
Muito Obrigada pelas dicas!!! Foram muito boas!Parabéns pela iniciativa !
Fico no aguardo de mais novidades para colocar texto ao email.
Estou ,somente, com uma dificuldade , alterar o ”titulo de texto ” para informação especifica da célula. Alguém, por gentileza, pode me ajudar?
Obrigada!
Olá
Gostaria de Códido em macro, somente pra enviar a planilha única, sendo que preciso que tenha mais de um endereço de e-mails, e se possivel o assunto ser igual ao nome do arquivo, pois existe um arquivo base e com uma macro que irá salvar conforme dados na celula por exemplo na A25.
Obrigado
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 = “Imprimir”
‘Cria um novo arquivo excel
Set NovoArquivoXLS = Application.Workbooks.Add
‘Copia a planilha para o novo arquivo criado
Sheets(sPlanAEnviar).Copy Before:=NovoArquivoXLS.Sheets(1)
Nessa Última Linha Apresenta o Erro:
“Erro em Tempo de Execução 9 – Subiscrito Fora do intervalo”
o Nome da Planilha que pretendo enviar é esse “Imprimir”.
O que devo Fazer?
Valeww
Ola…eu não consegui fazer a macro de enviar por e-mail diretamente do excel como o exemplo no começo da página. O que estou fazendo errado?: eu peguei os códigos exatamente como estão e criei a macro dentro da minha planilha que gera o erro na linha: Sheets(sPlanAEnviar).Copy Before:=boletimXLS.Sheets(1). Onde que devo alterar para que funcione na minha planilha.
Grato
Sidnie,
Não sei o que você exatamente modificou no código.
Onde você diz “boletimXLS” – no exemplo está NovoArquivoXLS – é um objeto que faz referência a um novo documento excel criado pela macro.
Você não pode deixar de instanciá-lo conforme foi feito no exemplo:
Set boletimXLS = Application.Workbooks.Add
E outro caso pode ser a informação da planilha que você deseja enviar:
No exemploestá na linha sPlanAEnviar = “Plan2”
Substitua “Plan2” pelo nome da planilha que deseja enviar.
Espero que ajude.
—————————————-
Não deixe de nos seguir no Twitter – twitter.com/exceldoseujeito
Olá amigo.
Estou precisando de algo parecido.
Preciso colocar um hiperlink em uma planilha para que a pessoa clicando nele, abra um email novo, com um texto padrao neste corpo de email.
Como posso fazer isso?
Abraços,
Wagner,
Sem o usar macro do VBA, você pode utilizar o recurso mailto através de um hiperlink.
Use a fórmula na célula A1, por exemplo, para montar um link onde o email estará na célula B1, o título, em C1 e o conteúdo em D1.
=HIPERLINK(“mailto:” & B1 & “?subject=” & C1 & “&body=” & D1;”Enviar Email”)
Contudo, ficaria mais interessante utilizando macros, ok.
Leia mais um pouco aqui:
https://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/
Abç
Tudo certo. Porém, os dados não estão sendo copiado para a planilha temporária. Quando vou abrir a planilha que chegou no e-mail, diz que está em formato diferente, e a planilha aparece em branco. O que pode ser?
Se você está trabalhando com Excel 2007 ou 2010, você pode salvar assim:
—— Para XLSX
NovoArquivoXLS.SaveAs ThisWorkbook.Path & “\” & sPlanAEnviar, xlWorkbookDefault
—— Para XLSM (Com Macro)
NovoArquivoXLS.SaveAs ThisWorkbook.Path & “\” & sPlanAEnviar, xlOpenXMLWorkbookMacroEnabled
Para versões 2003:
NovoArquivoXLS.SaveAs ThisWorkbook.Path & “\” & sPlanAEnviar, xlWorkbookNormal
Dessa maneira você não precisa definir a extensão e o Excel salva no formato correto.
Não sei se isto, mas, boa sorte aí, espero que ajude.
Abçs.
Está seguindo o @exceldoseujeito ? Então, o que está esperando?!!!
Achei um bugzinho no código…. já corrigi. Veja lá.
Tentei utilizar essa macro para enviar um arquivo excel após o preenchimento pelo Lotus Notes… ela roda corretamente, mas o arquivo que anexa fica em branco…
Será que estou fazendo alguma bobagem? vc tem como verificar para mim?
———————-
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 = “Plan1”
‘Cria um novo arquivo excel
Set NovoArquivoXLS = Application.Workbooks.Add
‘Copia a planilha para o novo arquivo criado
Sheets(sPlanAEnviar).Copy Before:=NovoArquivoXLS.Sheets(1)
‘Salva o arquivo
NovoArquivoXLS.SaveAs ThisWorkbook.Path & “” & sPlanAEnviar & “.xlsx”
sExcluirAnexoTemporario = NovoArquivoXLS.FullName
‘Envia o email
NovoArquivoXLS.SendMail “xxx@xxx.com”, “Pesquisa Satisfação xxx 1S2011”
‘Fecha o arquivo novo
NovoArquivoXLS.Close
‘Exclui o arquivo criado apenas para ser enviado.
Kill sExcluirAnexoTemporario
End Sub
Você está utilizando este código no projeto do Excel?
Este código foi escrito para rodar a partir da pasta de trabalho que você está enviando. Não sei bem como funcionaria esta integração com o Lotus Notes.
Mas acredito que se você referenciar a pasta de trabalho que está querendo enviar, funcione bem.
Neste código a planilha enviada chama-se “Plan1”.
Certifique-se que sua planilha tenha esso nome. Se não, altere no código pelo nome da planilha que você quer enviar.
E, se não estiver escrevendo o código no Excel, faça a referência completa do arquivo também. Nome do arquivo Excel + Nome da Planilha.
Não sei se fui claro. Passe mais informações.
Abçs.
Está seguindo o @exceldoseujeito ? Então, o que está esperando?!!!
A planilha é Plan1 mesmo… criei um botão e associei a macro… era para salvar e automaticamente anexar esse arquivo salvo num correio… e funciona bem… o problema é que o arquivo que anexa fica totalmente em branco… cria uma nova Plan1(2) no arquivo novo…
Realmente tem um bug no código.
Como ele cria uma nova pasta de trabalho, ele se auto referencia na Plan1….
Correção:
Onde está:
Sheets(sPlanAEnviar).Copy Before:=NovoArquivoXLS.Sheets(1)
Mude para:
ThisWorkbook.Sheets(sPlanAEnviar).Copy Before:=NovoArquivoXLS.Sheets(1)
Vou atualizar no site também…
Abç
Reinaldo, gostaria de enviar o que esta escrito em um grupo de celulas da planilha dentro do texto do email e não a planilha em anexo como faço isso ??
Abs
Edson
A macro funcionou perfeitamente. Parabéns!
Como eu faço para ela funcionar com outro gerenciador de e-mail que não o Outlook? Por ex: Eudora.
obrigado.
Olá Reinaldo, tudo bem?
Primeiramente muito obrigado pela aula.
Tenho algumas dúvidas que surgiram e a necessidade de soluções.
1° Quero escolher a pasta em que este arquivo será salvo e o nome do arquivo.
Ex:
Pasta C:\Orçamentos
Proposta 001-11
Proposta 002-11
Neste caso, se possível abrir uma caixa de diálogo para digitar o nome do arquivo ou até mesmo abrir a caixa de “salvar como” antes de enviar por e-mail.
3° Enviar para o e-mail o anexo em pdf do arquivo salvo. Apenas abrir a caixa de e-mail, para então eu escolher o destinatário e digitar o corpo do e-mail.
Por enquanto são estas. Muito obrigado desde já.
Arthur Leite
Boa tarde,
Seria possível dispara o envio de email à partir do resultado de uma célula em específico? Por exemplo, quando a célula A2 fosse maior que 1000, um email é automaticamente enviado.
Alex, é possível, contudo você precisa definir bem o que você quer e o que ficaria funcional para o seu projeto.
Ou seja, o que eu quero dizer com automaticamente? Seria sempre que o valor fosse alterado? (péssima idéia)
Seria quando a planilha fosse aberta e feita uma verificação no conteúdo da A2? (melhor)
Ou seria quando eu clicasse num botão e fosse executada essa verificação? (ideal)
Por quê? Dessa maneira, você teria controle de quando a macro seria executada e poderia recorrê-la a qualquer momento.
Leia este artigo e adapte a sua necessidade. Algo do tipo:
If Range(“A2”).value > 1000 then
Call EnviarEmail()
End if
Abç
Reinaldo,
gostei muito desta dica. mas minha duvida e a seguinte. é Possivel ter uma nova aba dentro desta planilha onde a propria macro possa puxar os emails necessarios que seja enviado dentro desta parte da macro.
‘Envia o email
NovoArquivoXLS.SendMail “email_do_destinatário@email.com”, “Título do Email”
Engraçado
Testei aqui mas não deu. essa macro serve pra enviar a planilha para um email do yahoo? No caso o meu mesmo. Fiz a titulo de teste e ñ consegui…
e puder me ajudar
Bom dia!
Tenho um arquivo XLSX com várias planilhas.
Em cada planilha tem uma tabela que precisa ser enviada para um destinatário de email.
Existe alguma macro que Imprima o arquivo em PDF (impressora virtual – DoPDF) e gere um email (anexando corpo de email modelo)?
Tem como enviar para mais de um destinatário?
Cara eu queria colocar uma macro que enviasse o e-mail automaticamente, porém, gostaria que ela gerasse uma InputBox para colocar os destinatários (mais de um), eu consegui fazer com 1 destinátario.
E para ela copiar algumas células e colar no corpo do e-mail.
Prezado,
Muito bom seu artigo.
Ver se você consegue em ajudar.
Eu precisava de uma macro que enviasse planilhas diferentes para e-mails diferentes.
Como que eu faço?
Fico no aguado.
Atenciosamente,
Tarcizio T.
Bem tenho algumas necessidades especívicas, minha planilha é um controle de disponibilização de arquivos em um FileServer, esses tem que ser armazenados por 30 dias e depois tenho que disparar um email com um aviso padrão.
Na planilha existe uma coluna com data de disponibilização e outra com data de expiração, preciso análizar essa condição para ver se vai ou não enviar o email.
Caso seja para enviar, existe uma coluna com a sigla do usuário que define seu email XXX@domínio.com.br e tb o link do arquivo \\servidor\dados$\XXX, logo preciso que a sigla, apontada como XXX, seja uma variável string.
Estou apanhando por causa da análise condicional e por causa da variável que não consigo implementar com sucesso.
Teria como me dar uma ajuda?
Reply,
Boa tarde,
Preciso de ajuda para enviar email através do excel, conforme exemplo abaixo:
Na planilha em questão consta a relação de email que precisa receber tais informações a partir de uma data com vencimento, como devo proceder?
Obrigado,
Tony Vitoria
Oi Tony,
O Excel não agenda envio de emails. O que você pode fazer é configurar uma verificação dessa tua lista ao abrir o arquivo em questão.
Se a data indicada correspondesse a data atual, o email seria disparado.
Em breve estarei postando outro artigo sobre envio de emails diretamente do Excel abordando mais funcionalidades.
Fique ligado pelo twitter ou pelo email.
Olá, gostei muito desta macro, gostaria de saber como faço para enviar para mais de 1 destinatário.
Att.
Olá
Gostaria de criar uma planilha que avaliace os vencimentos de determinados produtos e envia-se automaticamente um e-mail para avisar sobre tal vencimento.
Gostaria de saber se isso é possivel.
Se alguém puder ajudar ficare grato
Olá.
https://www.exceldoseujeito.com.br/2010/05/08/enviar-email-diretamente-do-excel-macro/comment-page-3/#comment-5084
https://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/
bom dia,sei qe o topico é antigo mas me interessou, utilizei seu codigo de enviar email diretamente do excel postado em 8/05/10, e me serviu muito, porem eu gostaria de uma ajuda sua em alem de mandar o anexo, este codigo me salve uma copia renomeado com a data do dia, em uma pasta no desktop.
obrigado
Michel,
Você pode obter este resultado alterando a linha 16 do código para:
NovoArquivoXLS.SaveAs “C:\PASTA_ONDE_QUERO_SALVAR\” & sPlanAEnviar & Format(Date, “DD-MM-YYYY”) & “.xls”
E excluindo a linha 26:
Kill sExcluirAnexoTemporario
Um abraço
Boa tarde.
Genial o seu código. Porém eu preciso da sua ajuda para modifica-lo. No Excel 2010 há uma opção de SALVE E ENVIAR>Enviar com link, nessa opção o Excel envia o o caminho onde esta salvo o arquivo numa pasta compartilhada.
Criei uma macro que executa vários processos e o ultimo queria que fosse esse de enviar como link, mas a macro não grava essa ação.
Tem como ajudar.
Desde já obrigado.
Muito bom o artigo.
Parabéns.
Boa tarde,
obrigado pela dicas mencionadas acima.
No excel 2010 existe uma função para salvar e enviar por e-mail como link, nesta função ele manda o caminho de uma pasta compartilhada onde esta salva a pasta de trabalho do excel. Basta clicar que abre o arquivo.
Teria como modificar o código para que mande apenas o link como nessa função???
Desde já obrigado.
Leia mais aqui:
https://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/
Abraços
Muito bom!
Pena que não está funcionando aqui no meu Excel2010.
Sempre dá erro quando vou rodar a macro.
“Erro em tempo de execução ‘1004’.
Erro de definição de aplicativo ou de definição de objeto.”
Abs
Boa noite.Pode me ajudar?
Fiz uma planilha no excel, preciso enviar esta para outra pessoa fazer uma alteração de dados.Como eu faço?
Não entendi sua dúvida.
Abç,
Reinaldo
Boa tarde!
Era isso mesmo que eu precisava, porem preciso enviar para mais um destinatario. como faço?
Muito Obrigado!
Rafael,
Para enviar para mais de um email use uma matriz de emails. Veja:
ThisWorkbook.SendMail Array(“email01@email.com.br”, “email02@email.com”), “Título do Email”
Abraços,
Reinaldo Coral
Já assinou nosso feed? Ou nos segue no twitter? Dá uma forcinha pra nós!!! E, de quebra, fique sempre atualizado com as novidades do site.
Assine nossa newsletter gratuitamente e receba todas as nossas novidades. Clique aqui.
Siga @exceldoseujeito
Ei, eu tenho uma planilha com datas de vencimentos de projetos e gostaria que fosse enviado um e-mail automaticamente assim que chegasse à data do vencimento. É possível fazer isso? Sabe me dizer como?
Grato desde já,
Ueritom
Você pode definir uma rotina para verificar as datas e compará-las a data atual no evento Ao Abrir O Arquivo do Excel: Workbook_Open. Ou seja, toda vez que o arquivo for aberto será executada uma verificação.
Veja um exemplo hipotético. Supondo que a data esteja na coluna A e que na coluna B escrevamos se já foi enviado um email para aquela linha.
Private Sub Workbook_Open()
For i = iLinhaInicial To iLinhaFinal
If Range("A" & i).Value >= Date And Range("B" & i).Value <> "Email Enviado" Then
Range("B" & i).Value = "Email Enviado"
Call EnviarEmail
End If
Next i
End Sub
Um abraço
Bom dia Reinaldo.
Aprovei 100% a VBA para encaminhar por e-mail o arquivo e já testei aqui e ficou show de bola, mas mesmo assim vou te chatear.
Tenho uma planilha que utilizamos para comunicação interna de nossa engenharia, e nem sempre é encaminhada para os mesmos destinatários. Minha pergunta é, na linha de comando, existe uma forma de fazer com que os nomes que eu selecionar na planilha tenham seus e-mails ativados na VBa?
Gostaria de te encaminhar a planilha para que analisasse, será que isso é possível?
Obrigado e logo que chegar em casa serei o mais novo seguir do seu blog.
Abraços.
Valeu,
Conforme já conversamos, em breve escrevei um artigo, disponibilizando a sua sugestão de adaptação neste código.
Abração
Estou fazendo a macro que envia uma das planilhas do arquivo por email porem esta dando erro na seguinte parte que assinalei com ***:
Sub enviaemailplanilhaespecifica()
Dim NovoArquivoXLS As Workbook
Dim sPlanAEnviar As String
Dim sExcluirAnexoTemporario As String
Dim NOVO As Worksheet
sPlanAEnviar = “ACC”
***ThisWorkbook.Sheets(sPlanAEnviar).Copy Before:=NovoArquivoXLS.Sheets(1)
NovoArquivoXLS.SaveAs ThisWorkbook.Path & “\” & sPlanAEnviar & “.xls”
sExcluirAnexoTemporario = NovoArquivoXLS.FullName
NovoArquivoXLS.SendMail “alexandra.pires@itau-unibanco.com.br”, “Status Carga e Validação”
NovoArquivoXLS.Close
Kill sExcluirAnexoTemporario
End Sub
O que fazer para consertar???? Alguem me ajuda????? Meu office é o 2010…
Oi Alexandra,
A planilha “ACC” precisa existir na sua pasta de trabalho. Foi o único possível problema que encontrei no seu código.
Ou seja, como no exemplo do artigo está a “Plan2” e ela existe na pasta, talvez você tenha esquecido de nomear sua planilha (aba) com o nome “ACC” igual ao descrito no seu código.
Espero que resolva.
Abç
Bom dia,
Pretendia usar esta macro em qualquer folha de qualquer livro. Como faço para isso acontecer?
Obrigado,
Paulo,
Para definir a planilha (folha) que deseja enviar pela macro, você pode definí-la na linha do código:
sPlanAEnviar = “Plan2” <--- Defina o nome da planilha aqui Se quiser enviar todo o arquivo excel, ou seja, a Pasta de Trabalho (livro), você pode usar o código: ActiveWorkbook.SendMail "email_do_destinatário@email.com", "Título do Email" Mas, pensando melhor, acho que você possa estar querendo enviar planilhas de outros arquivos externos, que não pertencam ao arquivo excel onde esteja a macro. Neste caso, você deverá mandar a macro abrir este arquivo externo. Faça assim: Declare uma variavel arqEnv:
Dim arqEnv as WorkBook
Antes da linha 10, mande abrir o arquivo que deseja enviar:
Set arqEnv = Application.Workbooks.Open("C:\Pasta_Onde_Esta_O_Arquivo_Excel\Nome_Do_Arquivo.xls")
No fim, após a linha 23, mande fechar o arquivo:
arqEnv.Close
Espero que tenha esclarecido sua dúvida.
Abç
Prezados amigos do Excel do Seu Jeito:
Sou um iniciante na área de programação, mas graças à internet e a pessoas solidárias como vocês do Excel do Seu Jeito o pouco que estou tentando fazer estou conseguindo.
Todavia, no momento estou com um problema.
Para realizar a automação de um documento do MSExcel 2007 de forma a enviá-lo imediatamente por e-mail inseri a macro:
Sub EnviarEmail()
ActiveWorkbook.SendMail “nome@gmail.com”, “Filmes para assistir na semana de / /2012 à / /2012”
End Sub
No MSExcel deu tudo certo, mas quando utilizo o Libre/OpenOffice Calc, na hora que clico para enviar o e-mail, o programa encaminha para o editor de macros do Calc e é exibida a seguinte mensagem VBA:
_________________________________________
LibreOffice 3.5
…………………………………..
(-) Erro em tempo de execução do BASIC.
‘423’
SendMail
[OK]
__________________________________________
Gostaria de saber se vocês poderiam me ajudar a solucionar este problema, pois não consegui encontrar a solução na internet.
Obrigado!
Manoel Marbrit
P.S.: Tenho MS Excel no meu notebook, mas no meu trabalho, por uma questão de corte de gastos, eles usam apenas o Libre/OpenOffice.
Bom dia Manoel.
Primeiramente, obrigado pelo comentário.
Infelizmente não possuo nenhum conhecimento do OpenOffice. Lamento.
Mas, fique a vontade para encaminhar qualquer dúvida em relação ao Excel, ok.
Abração.
Bom dia!!!
Gostei muito do seu material, parabéns!!!
Estou fazendo a macro para enviar por e-mail e funcionou perfeitamente, gostaria de saber como faço para ele perguntar o e-mail antes de enviar, ou seja, abrir uma tela para colocar o e-mail e depois enviar.
Um grande abraço,
Boa tarde, Cláudio.
Lá no código onde você informa o email do destinatário:
NovoArquivoXLS.SendMail “email_do_destinatário@email.com”, “Título do Email”
Substitua por um InputBox, assim:
NovoArquivoXLS.SendMail InputBox(“Informe o email:”, “Destinatário do Email”), “Título do Email”
Teste e veja o que acontece!
É claro que é apenas um exemplo, o ideal seria você colocar o resultado digitado numa variável, testar se é um email válido, e por aí vai…
Mas, a idéia é esta. Boa sorte aí.
Você já assinou nossa newsletter? É grátis! Assine aqui e não esqueça de confirmar a inscrição no email de confirmação que receberá em seguida ao se cadastrar, senão não ficará ativo para receber as novidades do site, ok.
Se quiser seguir no twitter também, eu agradeço, pois, ajuda a divulgar o site. Siga @exceldoseujeito
Abç
Olá amigo,
Em primeiro lugar meus parabéns, esse código me ajudou muito.
Para ficar perfeito preciso de sua ajuda no seguinte, vamos ver se é possível:
Tenho um arquivo de várias linhas onde cada uma delas é um contrato e cada linha verifica se esses contratos estão com o Status de “Vencido” ou “Atenção”. É possivel que a macro verifique as linhas que estão com esses dois status acima copiar somente essas linhas e enviar por e-mail?
Se conseguir isso me ajduará muito.
Grande abraço
Olá amigo,
Em primeiro lugar meus parabéns, esse código me ajudou muito.
Para ficar perfeito preciso de sua ajuda no seguinte, vamos ver se é possível:
Tenho um arquivo de várias linhas onde cada uma delas é um contrato e cada linha verifica se esses contratos estão com o Status de “Vencido” ou “Atenção”. É possivel que a macro verifique as linhas que estão com esses dois status acima copiar somente essas linhas e enviar por e-mail? També é possivel que a macro faça isso periodicamente de forma automática?
Se conseguir isso me ajudará muito.
Grande abraço
Renato,
Leia este artigo https://www.exceldoseujeito.com.br/2012/07/24/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel-parte-2/
Dentro do laço FOR você pode fazer esta verificação, da mesma maneira que fiz a verificação se o email havia sido informado em cada linha.
Quanto a questão da periodicidade, já falei sobre o assunto aqui nos comentários. Dá uma procurada aí. Só pra adiantar, o ideal seria associar essa automatização ao evento Open do arquivo.
Um abraço
Achei o material excelente, ótimo, no office 2010 funciona muito bem, só que no office 2003 da erro, voc~e pode me ajudar?
‘Envia o email
NovoArquivoXLS.SendMail “email_do_destinatário@email.com”, “Título do Email” dá esse erro de tempo de execução 1004, fala que woork book falhou.
grato,
e parabéns pelo site é ótimo.
Marco Antonio
Marco,
A macro foi desenvolvida para funcionar perfeitamente no Excel 2003.
Caso não tenha feito o download do arquivo de exemplo, faça e teste novamente.
Lembrando que, é necessário ter o Outlook, Live Mail, etc, configurados, para que o email seja enviado.
Em breve estarei postando outro artigo sobre envio de emails diretamente do Excel abordando mais funcionalidades.
Fique ligado pelo twitter ou pelo email.
Um abraço
Prezado Amigos, excelente trabalho!!!
Estou montando uma planilha de envio para email de vendedores, no entanto gostaria de colocar uma condicional para filtrar o envio, exemplo vendedor cod 86… enviar para esse vendedor, caso for outro codigo 130 enviar para esse vendedor.o relatorio seria enviado em .PDF, estou usando o excel 2010. existe essa possibilidade?
Se poder me ajudar ficaria bastante grato.
Tambem estou com a mesma duvida do Tiago. Tenho uma planilha com varias pendencias e códigos de usuario, gostaria que para as pendencias onde a linha tivesse com o usuario “X” fosse enviado para o e-mail “Y”.
Alex,
Leia este artigo https://www.exceldoseujeito.com.br/2012/07/24/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel-parte-2/
Dentro do laço FOR você pode fazer esta verificação, da mesma maneira que fiz a verificação se o email havia sido informado em cada linha.
Olá Reinaldo, primeiro, parabéns pelo site, show de bola.
Ainda estou meio noob em macros.
Gostaria de enviar minha aba ativa por email, porém esta aba em PDF, e esse arquivo com um nome que está em um célula específica. Dá?
abs!
Olá Thiago.
Tem uma maneira de fazer sim… Só que não utilizando este procedimento de envio Sendmail.
Em breve vou escrever um artigo ensinando outra maneira, mais completa, de trabalhar com emails no Excel.
Acompanhe-nos pelo twitter e por email para ficar atualizados das novas publicações aqui do site, ok.
Abraço
ola, bom dia, muito bom o material, sou totalmente novato no assunto, e esta me ajudando muito.
qdo coloquei a macro pra rodar ela da o seguinte erro: “erro em tempo de execução ‘1004’: não é possivel salvar esta pasta de trabalho com o mesmo nome de outra pasta de trabalho ou suplemento abertos. escolha um nome diferente ou feche o documento aberto antes de salva-lo”
Na macro fiz as modificações conforme abaixo…
Sub EnviarEmail()
Dim PEDIDOSXLS 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 = “PEDIDOS”
‘Cria um novo arquivo excel
Set FRIALTOTEMP2XLS = Application.Workbooks.Add
‘Copia a planilha para o novo arquivo criado
ThisWorkbook.Sheets(sPlanAEnviar).Copy Before:=FRIALTOTEMP2XLS.Sheets(1)
‘Salva o arquivo
FRIALTOTEMP2XLS.SaveAs ThisWorkbook.Path & “\” & sPlanAEnviar & “.xls”
sExcluirAnexoTemporario = FRIALTOTEMP2XLS.FullName
‘Envia o email
FRIALTOTEMP2XLS.SendMail “nome@hotmail.com”, “PEDIDO”
‘Fecha o arquivo novo
FRIALTOTEMP2XLS.Close
‘Exclui o arquivo criado apenas para ser enviado.
Kill sExcluirAnexoTemporario
End Sub
Modifiquei o nome da planilha a ser criada, estou certo ? onde estou errando?
se puderme ajudar fico grato. forte abraço.
consegui fazer com que a macro funcionasse (a original), porem os e-mail não estão chegando ?? pode me ajudar
Cláudio,
Esta macro utiliza as suas configurações do seu programa de email padrão, tipo Outlook, Live Mail…
Se não tiver configurado, não vai enviar.
Em breve, vou escrever um artigo ensinando a enviar email pelo Excel sem utilizar as configurações do Outlook.
Abç
boa tarde,
muito bom o tópico,
tenho uma dúvida, é possível enviar para mais de 1 destinatario e enviar com cópia???
como eu insiro um texto no corpo do e-mail?
Alô Maciel, blz!
Deixando o link pra vc e toda a galera com a mesma dúvida.
https://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/
Abraços
Muito legal, funcionou perfeitamente, porem gostaria de adicionar um texto no corpo do email e adiconar mais destinatarios . como faço ? obrigado !
Olá victor,
Leia
https://www.exceldoseujeito.com.br/2012/07/24/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel-parte-2/
Abraço
Olá,
Bem, tenho uma planilha com um código que manda e-mail com anexo, etc. Está quase perfeito.
A unica coisa que falta é colocar mensagem no corpo do e-mail.
Será que podem me ajudar?
Segue link para baixar a planilha [editado pelo moderador]
Alex,
Você não deve ter lido estes artigos aqui:
https://www.exceldoseujeito.com.br/2012/07/23/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel/
https://www.exceldoseujeito.com.br/2012/07/24/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel-parte-2/
Acho que tem tudo o que você precisa e um pouco mais.
Um abraço
Reinaldo, Parabens pelo trabalho, estou começando a me arriscar mais nas macros e vejo que um knowhow como o seu é diferencial.
Mestre, estou precisando enviar um email, a partir de uma planilha no excel que possui imagens, ou melhor, possui Gráficos, totas as informações precisam estar no corpo do email. Hoje eu tenho que copiar a planilha e colar como imagem e em seguida colar no email, tudo isso manualmente.Tentei de diversas formas automatizar, mas só consigo copiar as celulas, os gráficos não vão =/….Até agora não encontrei alguém que pudesse me ajudar, mas seu material me deu esperanças !!
Obrigado e abraços !
Valeu pelo feedback, Gustavo.
Realmente só descobrimos novas coisas se buscarmos por elas. Muito bom que você se interesse pelo tema e queira aprender mais.
Dá pra fazer muita coisa no Excel.
Não sei se já leu este outro artigo aqui, mas vale a leitura, pois complementa este artigo aqui.
Uma idéia para o seu relato é salvar suas planilhas em PDF e anexá-las ao email. Tudo automaticamente, claro. Se estiver usando o Excel 2010, melhor.
Você pode incluir na macro de envio, o salvamento em .pdf. Assim:
ThisWorkbook.Sheets(sPlanAEnviar).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
NovoArquivoXLS.SaveAs ThisWorkbook.Path & “\” & sPlanAEnviar & “.pdf”, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
Daí você vai organizando e produzindo sua macro de acordo com suas necessidades.
Abç
Frquento muito seu site em busca de informações, meu parabéns pelo trabalho.
Gostaria de sanber se é possivel mesclar Procv nessa macro, exemplo:
Preciso mandar vários e-mail com anexos diferentes e cada um deles com texto e destinatários diferentes.
O texto tem duas variações, ou seja gostaria de fazer um procv para o texto e um procv para o e-mail que quero enviar, e colocaria cada anexo no devido lugar.
è possivel acresecntar Procv numa macro como essa?
Você pode resolver lendo estes artigos aqui:
Automatizar o envio de emails das suas listas com o Excel
Automatizar o envio de emails das suas listas com o Excel – Parte 2
Abç
A macro é muito boa mesmo, mas e seu precisar enviar a pasta de trabalho para varios e-mails, ficaria como? É possível?
Olá Marciano,
Você pode resolver lendo estes artigos aqui:
Automatizar o envio de emails das suas listas com o Excel
Automatizar o envio de emails das suas listas com o Excel – Parte 2
Abç
Boa Tarde
Curti muito sua explicação sobre enviar Email em lista em com anexo, conforme artigo publicado no endereço:
https://www.exceldoseujeito.com.br/2012/07/24/automatizar-o-envio-de-emails-das-suas-listas-com-o-excel-parte-2/
Porem tenho duas divida, não teria como colocar o caminho dos anexos, exemplo para o e mail a@teste.com.br o anexo a no e mail b@teste.com.br o anexo b no e mail apenas o anexo a e no b apenas o anexo b, so que ao invés de aparecer uma janela para selecionar o arquivo eu coloque o caminho do anexo na célula d6 por exemplo e ele busque automaticamente o arquivo e envie seguindo uma lista?
um grande abç.
Olá, tudo bem!
As linhas de 39 a 43 da rotina EnviarEmailComAnexo() fazem referência a inclusão de anexos em nosso exemplo.
Substitua essas linhas pela seguinte:
.setEmailAnexo = sh.Range(“D6”)
Desta forma, você passa o arquivo que foi definido na célula D6.
Você só vai precisar definir a regra da associação dos anexos aos respectivos emails. Mas, daí é simples né?!!!
Abçs
Me desculpe a ignorância porem sou novo em macros vba estou estuando, como assim regra de associação dos anexos, o objetivo é enviar email diferentes para aproximadamente 350 pessoas diferentes com anexo em pdf diferente, ja consegui incluir a transformação do arquivo em xls em pdf so falta agora essa etapa de incluir uma macro de envio em lista com pdf diferentes, você pode me ajudar por favor.
Olá!
Não sei como está o projeto de sua planilha. Uma idéia que posso apresentar – e imagino que seja assim que esteja estruturada a sua planilha-base com os emails – é definir cada diferente anexo na listagem de contatos. Com isso, a anexo correspondente a cada contato seria anexado distintamente.
Mas, como você ainda está iniciando na programação VBA, posso oferecer uma ajudinha na montagem da macro. Contudo, preciso que passe mais detalhes do que você já está fazendo, como faz o relacionamento dos anexos aos contatos, ou seja, as suas regras de negócio, para que possamos fazer algo mais acertado.
Mande mais informações e a planilha (essencial para agilizar o processo) na seção Tire Sua Dúvida aqui do site. Assim que eu tiver um tempinho dou uma verificada.
Abç
Rei,
Já havia tentado algumas coisas na linha da sua macro, mas nada tão limpo e simplificado como voce fez, ficou sensacional!
Estou com um problema em apenas 1 das minhas maquinas onde quando tento rodar a macro tenho a seguinte resposta: “Não é possivel carregar o sistema de email. Verifique a instalação do sistema de email.”
Porem já tentei de tudo, reinstalar o office, alterar a raiz do oficce no regedit, mas nada funcionou. Acredito que talvez tenha passado por algo assim e pudesse me ajudar.
Fala Pedro!
Não sei bem o que pode ser, mas acho que possa ser a configuração do programa de email (tipo Outlook, LiveMail, etc).
Algum destes programas precisam estar configurados com uma conta de email válida, ok. Porque é através de um desses programas de correio eletrônico que a mensagem será enviada.
Depois dá uma lida em outro artigo que escrevi sobre envio de emails sem a necessidade de programas intermediários.
Um abraço.
Boa tarde Pedro ! Seu site é “excel”ente, ja havia criado algumas rotinas para enviar e-mail, mas a sua esta bem mais claro. Porém precisava de uma ajuda, trabalho em uma empresa, e montei um controle de documentos que deve ser enviado para a pessoa especifica na lista, não para várias, usei sua macro, e funcionou blz,utilizamos o Outlook, mas agora recebo um e-mail de retorno do Adm da Intranet dizendo que o e-mail que informo(somente alguns) não existe, porém ele esta la,ja confrontei a lista com que esta no Outlook, e esta correto, Utilizo Userform’s, e desativo a exibição da tela do excel para trabalhar, como se fosse realmente um programa, sera que falta informar o meu servido. Segue o seu código abaixo que adaptei:
‘*************************************************************************
Private Sub EnvlAtende_Click()
On Error GoTo Err_Emaill
Dim NovoArquivoXLS As Workbook
Dim sPlanAEnviar As String
Dim sExcluirAnexoTemporario As String
Dim EndEnv As String <<<———–Inclui – Endereço de Envio
sPlanAEnviar = "ATEND"
EndEnv = TextEmail.Text <<<———–Inclui
Set NovoArquivoXLS = Application.Workbooks.Add
ThisWorkbook.Sheets(sPlanAEnviar).Copy Before:=NovoArquivoXLS.Sheets(1)
NovoArquivoXLS.SaveAs ThisWorkbook.Path & "\" & sPlanAEnviar & ".xls"
sExcluirAnexoTemporario = NovoArquivoXLS.FullName
NovoArquivoXLS.SendMail EndEnv, "PENDÊNCIAS DE CANHOTOS"
NovoArquivoXLS.Close
Kill sExcluirAnexoTemporario
Err_Exit:
Exit Sub
Err_Emaill:
MsgBox "Não foi possível Enviar a Relação ao Destinatário por E-mail!", 16, "Erro"
NovoArquivoXLS.Close
Kill sExcluirAnexoTemporario
Exit Sub
'*************************************************************************
End Sub
Olá Marco, tudo bem?
A princípio está tudo correto no código.
Não sei o valor que está sendo passado na Textbox, mas, o ideal a ser passado seria um email válido, ou seja, dê preferência a passar o endereço de email e não o nome do catálogo, enfim, não tenho certeza se é isso, mas, vai como dica.
Um abraço
Bom dia,
fiz essa macro mas ela não roda, aparece mensagem dizendo que a macro pode não estar habilitada, mas eu já habilitei no excel e no outlook.. o que poderia ser???
Olá Thiago, tudo bem?
Não sei o que possa ser, já que você disse ter habilitado o uso das macros!!!
🙁
Abç
boa tarde Rei!!!! gostaria de tirar uma duvida!!!
tomando como base a linha de sua macro abaixo:
gostaria de saber se posso fazer com que o “titulo do email” venha a ser o valor que contenha dentro de uma celula da planilha? será que fui claro?obrigado
‘Envia o email
NovoArquivoXLS.SendMail “email_do_destinatário@email.com”, “Título do Email”
Oi Rogério.
Também com base no exemplo do artigo, faremos referência à planilha pelo nome alocado na variável sPlanAEnviar e definiremos a célula que tem o título que queremos utilizar. Neste exemplo, usei a célula A1.
NovoArquivoXLS.SendMail “email_do_destinatário@email.com”, NovoArquivoXLS.Sheets(sPlanAEnviar).Range(“A1”)
Um abraço
PARA MIM VC ALÉM DE REI , É UM GENIO!!! POIS SÓ OS GENIOS ATENDEM AOS PEDIDOS COM PREFEIÇÃO!!!
DEU CERTO , DEU CERTO!!! MUITO OBRIGADO REI!!!!