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
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
luceliosantos.projeto@gmail.com
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
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
luceliosantos.projeto@gmail.com
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
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
luceliosantos.projeto@gmail.com
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
luceliosantos.projeto@gmail.com