Notifications
Clear all

Enviar vários e-mail e alterar texto

7 Posts
2 Usuários
0 Reactions
1,517 Visualizações
(@palmanhani)
Posts: 72
Trusted Member
Topic starter
 

Galera, uma ajuda.

Preciso de uma macro que conforme seja inserido uma nova notificação de multa, seja encaminha um e-mail (coluna E) notificando o usuário. No texto do e-mail deve conter o numero AIT (coluna B) com a data de infração (coluna K) e com o prazo máximo de indicação (coluna M) e inseir na planilha a data de envio do e-mail (coluna N).

Se possível, poderiam descrever na macro oque cada codigo faz para que possa aprender. Junto com a planilha a uma macro que utilizo em uma outra planilha.

"Bom dia, Assim que possível comparecer ao departamento de Facilities para retirar boleto de identificação de condutor referente aos autos de infração QV-A2-909234-3 de 14/11/2015 - 17:35 com prazo máximo para indicação em 10/01/2016"

Obrigado galera

 
Postado : 29/08/2016 10:39 am
engeel2014
(@engeel2014)
Posts: 207
Estimable Member
 

Boa noite Palmanhani, anexo planilha com o código desejado, faça alguns testes e dê um retorno se era o esperado. A macro funciona da seguinte maneira:

A macro é executada toda vez que a planilha é salvada, pois assim o usuário terá confirmado e verificado se os dados inseridos estão corretos;

O e-mail só é enviado se as células das colunas "B", "E", "K" e "M" estiverem preenchidas com dados e também as células da coluna "Q" estiver vazia. Após a execução a macro preenche a data de envio na coluna "Q" e na próxima vez que a macro for executada ela não irá mandar e-mail novamente das mesmas linhas pois a coluna "Q" estará preenchida com data de envio. ( caso os critérios não sejam satisfeitos a macro não faz nada, somente salva a planilha).

Caso seja conforme necessita, poderei depois comentar o código para seu entendimento.

Att.: Lucélio

Lucélio Ferreira dos Santos
Eng. Eletricista
CREA: DF-7165/TD
[email protected]

 
Postado : 29/08/2016 5:52 pm
(@palmanhani)
Posts: 72
Trusted Member
Topic starter
 

Lucélio, bom dia e obrigado pela ajuda.

Está perfeito, a única mudança que preciso, é que no texto do e-mail seja alterado de acordo com as linha do e-mail.
"Bom dia, Assim que possível comparecer ao departamento de Facilities para retirar boleto de identificação de condutor referente aos autos de infração QV-A2-909234-3 (coluna B) de 14/11/2015 - 17:35 (coluna K) com prazo máximo para indicação em 10/01/2016 (coluna M)".

Por gentileza, descrever os passas da macro para que possa estudar e mais uma vez muito obrigado

 
Postado : 30/08/2016 6:34 am
engeel2014
(@engeel2014)
Posts: 207
Estimable Member
 

Caro amigo, a macro já está pegado as células indicadas por você. Só inseri a célula onde está o endereço de e-mail pois sem ele não tem como enviar o e-mail. Verifica ai e me diz. Faz um teste ai, apaga os valores da célula da coluna "Q" e verá que a macro irá mandar os e-mails. Depois veja o texto que foi enviado e está correto.

Lucélio Ferreira dos Santos
Eng. Eletricista
CREA: DF-7165/TD
[email protected]

 
Postado : 30/08/2016 5:13 pm
(@palmanhani)
Posts: 72
Trusted Member
Topic starter
 

Verdade, está perfeito. Poderia me explicar como você fez, pelo que observei só tem uma macro pequena. Muito obrigado pela ajuda...

Sub sddsd()
'' sddsd Macro'
    Range("Q12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("Q12").Select
    Application.CutCopyMode = False
    Range("A10").Select
End Sub
 
Postado : 31/08/2016 6:27 am
engeel2014
(@engeel2014)
Posts: 207
Estimable Member
 

Verdade, está perfeito. Poderia me explicar como você fez, pelo que observei só tem uma macro pequena. Muito obrigado pela ajuda...

Sub sddsd()
'' sddsd Macro'
    Range("Q12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("Q12").Select
    Application.CutCopyMode = False
    Range("A10").Select
End Sub

Amigo, não é esta macro não. Esta deve ser algum vestígio de alguma gravação que fiz aqui. a macro real esta abaixo. Tambem anexei a planilha com os comentários:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

'Declaração das variáveis
Dim Total As Integer 'variável numero inteiro
Dim Contagem As Integer 'variável numero inteiro
Dim NumeroEmailsEnviados As Integer 'variável numero inteiro
Dim NumeroAIT As String 'variável texto
Dim Email As String 'variável texto
Dim DataInfracao As String 'variável texto
Dim PrazoIndicacao As String 'variável texto

NumeroEmailsEnviados = 0 ' Variável recebe o valor "0"

Range("DA1").Select ' Seleciona célula "DA1"
ActiveCell.FormulaR1C1 = "=COUNTA(R[9]C[-103]:R[9999]C[-103])+9" 'Insere fórmula na célula selecionada pra contar quantas linhas estão preenchidas na planilha
Total = Range("da1").Value ' Variável "Total" recebe o valor da quantidade de linhas que estão preenchidas na celula "DA1" através da fórmula
Range("DA1").Clear 'limpa a formula inserida na célula "DA1"
Contagem = 10 ' Variável "Contagem" recebe o valor "10"

Do While Contagem <= Total ' enquanto o valor da variável "Contagem" for menor ou igual ao valor da variável "Total" vai executar o código abaixo

If Range("B" & Contagem).Value <> "" And Range("E" & Contagem).Value <> "" And Range("K" & Contagem).Value <> "" And Range("M" & Contagem).Value <> "" And Range("Q" & Contagem).Value = "" Then 'se as células "B", "E", "K" e "M" estiverem preenchidas com dados e também a célula "Q" estiver vazia executa o codigo abaixo. ( o codigo "Range("B" & Contagem)" quer dizer célula B e valor da variável "Contagem" se Contagem for = 10 fica assim: B10

'Processo de criação do e-mail xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
    Dim OL As Object
    Dim EmailItem As Object
    Dim Wb As Workbook
    
    Application.ScreenUpdating = False
    Set OL = CreateObject("Outlook.Application")
    Set EmailItem = OL.CreateItem(olMailItem)
    ActiveSheet.UsedRange.Select
    
NumeroAIT = Range("B" & Contagem).Value ' Variável "NumeroART" recebe valor da célula "B" e "Contagem" Ex: B10
Email = Range("E" & Contagem).Value ' Variável "Email" recebe valor da célula "E" e "Contagem" Ex: E10
DataInfracao = Range("K" & Contagem).Value ' Variável "DataInfracao" recebe valor da célula "K" e "Contagem" Ex: K10
PrazoIndicacao = Range("M" & Contagem).Value ' Variável "PrazoIndicacao" recebe valor da célula "M" e "Contagem" Ex: M10
    
    With EmailItem
        .Subject = "Notificação de Penalidade de Multa - indicação de condutor - " & NumeroAIT 'Título do e-mail texto mais o valor da variável NumeroAIT
        .Body = "Bom dia," & vbCrLf & vbCrLf & "Assim que possível comparecer ao departamento de Facilities (1º andar próximo a Academia) para retirar boleto de identificação de condutor referente aos autos de infração " & NumeroAIT & " de " & DataInfracao & "  com prazo máximo para indicação em " & PrazoIndicacao & "." & vbCrLf & "" & vbCrLf & "Obrigado!" 'Texto do e-mail com os valores das variáveis
        .To = Email 'destinatário do e-mail, valor que está na variável "email"
        .CC = "emailcopia@teste.com" 'copia do e-mail
        .Send 'Comando para enviar o e-mail
    End With
    
    Application.ScreenUpdating = True
    
    Set Wb = Nothing
    Set OL = Nothing
    Set EmailItem = Nothing
    
Range("Q" & Contagem).Select 'Seleciona a célula "Q" e o valor da variável Contagem ex: Q10
ActiveCell.FormulaR1C1 = "=TODAY()" ' Insere a formula pra saber a data atual
Selection.Copy 'Copia o valor mostrado pela formula
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'Cola no mesmo local como texto
    
NumeroEmailsEnviados = NumeroEmailsEnviados + 1 ' Variavel NumeroEmailsEnviados recebe seu valor mais 1. Esta variável conta quantos e-mails foram enviados pra informar no fim do código quantos e-mails foram enviados
    
Contagem = Contagem + 1 'Variavel Contegem recebe seu valor mais 1.

Else 'se alguma das células "B", "E", "K" e "M" NÃO estiver preenchida ou a célula "Q" NÃO estiver vazia executa o codigo abaixo.

Contagem = Contagem + 1 'Variavel Contegem recebe seu valor mais 1.
  
End If 'fim da instrução if

Loop ' volta na instrução DoWhile até a codição for satisfeita. Quando a condição DoWhile não for satisfeita não fara mais o loop e o codigo continua a partir deste ponto
  
If NumeroEmailsEnviados = 1 Then 'Se o valor da variavel "NumeroEmailsEnviados" for igal a 1 executará a mensagem abaixo

MsgBox ("Foi enviado 1 e-mail de notificação!!!") 'Mensagem

ElseIf NumeroEmailsEnviados > 1 Then 'Senão Se o valor da variavel "NumeroEmailsEnviados" for maior que 1 executará a mensagem abaixo

MsgBox ("Foram  enviados " & NumeroEmailsEnviados & " e-mails de notificação!!!") ' Mensagem, dentro da mensagem tem a variável "NumeroEmailsEnviados" com o valor da quantidades de e-mails

Else ' Se a variavel "NumeroEmailsEnviados" for igual a 0, não faz nada e vai para o fim da instrução IF
End If 'Fim da instrução IF
    
NumeroEmailsEnviados = 0 'Zera o valor da variavel "NumeroEmailsEnviados"
Application.CutCopyMode = False
Range("A1").Select 'seleciona a celula "A1"

End Sub ' Fim da Macro

Att.: Lucélio

Lucélio Ferreira dos Santos
Eng. Eletricista
CREA: DF-7165/TD
[email protected]

 
Postado : 31/08/2016 10:11 am
engeel2014
(@engeel2014)
Posts: 207
Estimable Member
 

Se você quer aprender procure alguma video aula sobre o assunto e participe sempre do fórum, baixe as macros postadas e veja o funcionamento. Outra maneira boa de aprender os comandos é utilizar o gravador de macros do Excel. Você clica em gravar, escolhe o nome da macro, depois faz algumas alterações na planilha( tipo, escreva um valor em uma célula, depois delete este valor e depois insira uma cor na célula e depois para a gravação da macro. depois entre no editor de macro e veja os códigos que foram gerados relativos as ações que você fez, assim fica mais fácil você entender o que cada comando faz. Faça um teste aí e me diz o que acha.

Lucélio Ferreira dos Santos
Eng. Eletricista
CREA: DF-7165/TD
[email protected]

 
Postado : 31/08/2016 10:15 am