Usuário com melhor resposta
Excel enviar e-mail automático.

Pergunta
-
Pessoal, sou novato aqui... Meu nome é Sergio e tenho a seguinte situação.
Utilizo o Excel com varias planilhas, as quais cada uma corresponde a um mês, neste eu lanço um saldo do cliente e apos cada movimento vou debitando, algumas vezes este saldo só e renovado apos 3 meses, ou seja, 3 planilhas para frente, sendo que o próprio calcula tudo e repassa para a outra planilha sem problema......Minha pergunta é, ha uma forma de fazer com que o Excel me envie um e-mail quando o saldo chegar a 5mil em relação ao saldo atual, independente da planilha?
Tks
Respostas
-
Bem vindo a fórum.
Como estou com muitas dúvidas sobre a mecânica da sua pasta de trabalho, segue abaixo um código que permite enviar um e-mail pelo VBA. Para utilizá-lo, você deve ter uma conta de e-mail configurada no Outlook. Como você quer monitorar algumas células de várias planilhas diferentes, provavelmente terá que colocar algum código no evento Workbook_SheetCalculate.
Sub EnviaEmail() Dim appOutlook As Object Dim olMail As Object 'Verifica se Outlook está aberto. Caso não esteja, criar nova instância On Error Resume Next Set appOutlook = GetObject(, "Outlook.Application") If appOutlook Is Nothing Then Set appOutlook = CreateObject("Outlook.Application") End If On Error GoTo 0 Set olMail = appOutlook.CreateItem(0) '0 é um item de e-mail With olMail .To = "benzadeus3@ambienteoffice.com.br" .Subject = "Assunto" 'Se quiser adicionar algum anexo: '.Attachments.Add = "c:\benzadeus\arquivo.txt" .Body = "Corpo do E-mail" .Display 'ou .Send End With End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator quarta-feira, 1 de janeiro de 2014 00:00
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quarta-feira, 1 de janeiro de 2014 00:00
Todas as Respostas
-
Bem vindo a fórum.
Como estou com muitas dúvidas sobre a mecânica da sua pasta de trabalho, segue abaixo um código que permite enviar um e-mail pelo VBA. Para utilizá-lo, você deve ter uma conta de e-mail configurada no Outlook. Como você quer monitorar algumas células de várias planilhas diferentes, provavelmente terá que colocar algum código no evento Workbook_SheetCalculate.
Sub EnviaEmail() Dim appOutlook As Object Dim olMail As Object 'Verifica se Outlook está aberto. Caso não esteja, criar nova instância On Error Resume Next Set appOutlook = GetObject(, "Outlook.Application") If appOutlook Is Nothing Then Set appOutlook = CreateObject("Outlook.Application") End If On Error GoTo 0 Set olMail = appOutlook.CreateItem(0) '0 é um item de e-mail With olMail .To = "benzadeus3@ambienteoffice.com.br" .Subject = "Assunto" 'Se quiser adicionar algum anexo: '.Attachments.Add = "c:\benzadeus\arquivo.txt" .Body = "Corpo do E-mail" .Display 'ou .Send End With End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Sugerido como Resposta Felipe Costa GualbertoMVP, Moderator quarta-feira, 1 de janeiro de 2014 00:00
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quarta-feira, 1 de janeiro de 2014 00:00
-
Sim esse código funciona bem para enviar o mail... Mas no meu caso há um problema, eu quero que esse e-mail seja enviado sem que eu precise de abrir o Excel, ou seja, quero que chegue à aquela data o E-mail seja enviado automáticamente quando o Valor da Célula Mudar!
No fundo quero que seja feito um alerta para o meu mail quando a Data de Validade de um determinado documento expedir...
Eu tenho o seguinte Código;
Private Sub Worksheet_Change(ByVal Target As Range) Dim OutApp As Object Dim OutMail As Object Dim texto As String Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) linha = ActiveCell.Row - 1 If Target.Address = "$F$" & linha Then If Plan1.Cells(linha, 6) = "DOC. CADUCADO" Then texto = "Sr. (a) " & Plan1.Cells(linha, 8) & "," & vbCrLf & vbCrLf & _ "O Documento com o Número: " & Plan1.Cells(linha, 7) & " expirou em " & _ Plan1.Cells(linha, 4) & " , por favor, ver esta situação o mais rápidamente possível." & vbCrLf & _ " Veja informações abaixo:" & vbCrLf & vbCrLf & _ " FUNCIONÀRIO: " & Plan1.Cells(linha, 3) & vbCrLf & _ " Estado: " & Plan1.Cells(linha, 6) & vbCrLf & _ " Ação a Tomar: " & Plan1.Cells(linha, 5) & vbCrLf & vbCrLf & _ "Atenciosamente," & vbCrLf & _ "TesteX" End If With OutMail .To = Plan1.Cells(linha, 1) .CC = "" .BCC = "" .Subject = "Documentos a Validar" .Body = texto .Send 'Utilize Send para enviar o email sem abrir o Outlook End With On Error GoTo 0 Set OutMail = Nothing Set OutApp = Nothing End If End Sub
Um Abraço, e espero que me ajudem -
"Mas no meu caso há um problema, eu quero que esse e-mail seja enviado sem que eu precise de abrir o Excel"
Bom, nesse caso, sugiro que você coloque a macro dentro do Outlook. Existem várias formas de se fazer isso.
Talvez você pudesse colocar um código no evento Application_Startup do Outlook. O código desse evento abre toda vez que o Outlook inicia.
Esse código deverá abrir sua pasta de trabalho do Excel, verificar a data na planilha desejada e, através de um teste condicional, mandar um e-mail ou não, e, em seguida, fechar a pasta de trabalho e o Excel.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
-
"Bom, nesse caso, sugiro que você coloque a macro dentro do Outlook. Existem várias formas de se fazer isso."
Bom dia, novamente
Sim, gosto da sua ideia e parece que iria funcionar para a minha necessidade... Mas estou com o problema, como sou um novato em VBA, não sei muito bem como fazer o código no outlook para fazer isso!
Será que me poderia dar uma ajuda nisso?
Agradeço a sua resposta em breve,
Um Abraço
- Editado X-trex quarta-feira, 23 de julho de 2014 08:54
-
Desculpe a demora. Tente algo como:
Private Sub Application_Startup() 'Coloque aqui o caminho da pasta de trabalho, a planilha e a célula a monitorar Const csWorkbookPath As String = "c:\temp\Pasta1.xlsx" Const csPlanName As String = "Plan1" Const csRangeAddress As String = "A1" Dim oExcel As Object Dim oBook As Object Dim oSheet As Object Dim dtValidade As Date Set oExcel = pGetExcel If oExcel Is Nothing Then Exit Sub Set oBook = oExcel.Workbooks.Open(csWorkbookPath) Set oSheet = oBook.Worksheets(csPlanName) dtValidade = oSheet.Range(csRangeAddress).Value 'Altere aqui a data do prazo de validade no formato (ano,mês,dia): If dtValidade > DateSerial(2014, 7, 27) Then pSendMail End If oBook.Close SaveChanges:=False oExcel.Quit End Sub Private Function pGetExcel() As Object Dim oExcel As Object On Error Resume Next Set oExcel = CreateObject("Excel.Application") On Error GoTo 0 If oExcel Is Nothing Then MsgBox "Não foi possível iniciar o Excel." End If Set pGetExcel = oExcel End Function Private Sub pSendMail() 'Altere as configurações do seu e-mail aqui. With Application.CreateItem(olMailItem) .To = "nome@email.com" .CC = "" .BCC = "" .Subject = "Documentos a Validar" .Body = "Corpo do Email" .Send 'ou .Display para fazer testes End With End Sub
Não se esqueça que o código deverá ser colado no módulo thisOutlookSesstion do Outlook.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Editado Felipe Costa GualbertoMVP, Moderator domingo, 27 de julho de 2014 19:49
-
Bom dia,
O Código funciona corretamente só que ainda me falta um promenor... É que em vez de inserir a data de validade no código, o código deveria ir buscar o DOC. CADUCADO (que funciona com formatação condicional) e aí enviar o e-mail a partir disso... Por isso é que no antigo código tinha o seguinte:
linha = ActiveCell.Row - 1
'Que era para ir procurar a Coluna o "DOC. CADUCADO"
If Target.Address = "$K$" & linha Then If Plan1.Cells(linha, 11) = "DOC. CADUCADO" Then
Percebe o que eu quero dizer? E aí sim, se ficar documento caducado enviar o tal e-mail automático... A maneira com você que explicou está muito bom e vou usar para outras coisas, mais simples, agradeço muito a sua ajuda, está me ajudar imenso...
Mas ainda me falta uns promenores, se o senhor não se importar, é que assim eu também estou aprender :)
Obrigado e agradeço uma resposta
Um Abraço