Notifications
Clear all

MACRO PARA ENVIAR E-MAILS ANEXANDO PDF PARA LISTA DE REMENTE

5 Posts
2 Usuários
0 Reactions
1,165 Visualizações
(@leogranja)
Posts: 17
Active Member
Topic starter
 

Prezados, boa tarde!

Planilha está funcionando e em anexo na ultima resposta. Para quem precisar, ela possui código para envio de e-mails automáticos conforme critério de uma tabela anexando documentos correspondentes.

Sempre acompanho o fórum para tirar dicas de Excel e decidi postar minha duvida pois não consegui resolver sozinho.

Objetivo:
Planilha que envia e-mails automaticamente para uma lista de usuários. Eu gostaria de automatizá-la para enviar conforme um critério definido.

Explicação:
Em anexo, está minha planilha. Como não sei bem como fazer, criei um código que possui alguns comentários para esclarecimento. Ela deve funcionar da seguinte maneira:
1. Na aba Macro, possuo o controle nas células F5:G11 que verifico se o vendedor me encaminhou o arquivo de controle.
2. Se o vendedor encaminhou, irá enviar um e-mail conforme a aba Lista (procv) anexando o arquivo no diretório referente ao nome do vendedor;

Segue o código:

Sub EnviaEmail()
'
' EnviaEmail Macro
'
    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object
    Dim StrBody As String
    Dim StrBody2 As String
    Dim Endereco As String
    Dim Endereco2 As String
    Dim Titulo As String

    Set rng = Nothing
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With


    ' DEFINE Endereço, corpo do e-mail e titulo
    StrBody = Sheets("Macro").Range("B3").Value & "<br>" & _
            Sheets("Macro").Range("B5").Value & "<br>" & _
              Sheets("Macro").Range("B4").Value & "<br>"
    StrBody2 = Sheets("Macro").Range("B6").Value & "<br><br>" & _
    "<img src='C:Usersleonardogranja-mtzDocumentsAssinatura.png'>"

    ' como não sei fazer o FOR, vou explicar como eu gostaria:
    
    ' nesta linha abaixo, o codigo irá rodar o FOR para todos os valores de F5 a F11, prosseguindo para quando a celular for diferente de 0
    for (Sheets("Macro").Range("F5:F11").Value <> 0):

    ' nas linhas abaixo, o codigo irá fazer um PROCV da celula que está no loop de FOR em outra aba
    Endereco = Application.WorksheetFunction.VLOOKUP(Sheets("Macro").Range("F5:F11").Value,Sheets("Lista").Range("A1:B10"),3,)
    Endereco2 = Application.WorksheetFunction.VLOOKUP(Sheets("Macro").Range("F5:F11").Value,Sheets("Lista").Range("A1:B10"),3,)
    Titulo = "Planilha do " & Sheets("Macro").Range("F5:F11").Value

    On Error Resume Next
    With OutMail
        .To = Endereco
        .CC = Endereco2
        .BCC = ""
        .Subject = Titulo
        .HTMLBody = "<FONT FACE=Calibri (Corpo)>" & StrBody & StrBody2
        ' irá adicionar o anexo com o nome da linha correspondente ao loop de FOR na coluna G
        .Attachment = "C:Usersleonardogranja-mtzDocuments" & Sheets("Macro").Range("G5:G11").Value
        .Display
    End With
    On Error GoTo 0

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing

'
End Sub

Fico à disposição.
Muito obrigado!!

 
Postado : 22/08/2017 2:45 pm
(@skulden)
Posts: 170
Estimable Member
 

Como não há como testar o código, escrevi uma possivel solução.


Sub EnviaEmail()
'
' EnviaEmail Macro
'
    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object
    Dim StrBody As String
    Dim StrBody2 As String
    Dim Endereco As String
    Dim Endereco2 As String
    Dim Titulo As String
    Dim celly as Range

    Set rng = Nothing
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With


    ' DEFINE Endereço, corpo do e-mail e titulo
    StrBody = Sheets("Macro").Range("B3").Value & "<br>" & _
            Sheets("Macro").Range("B5").Value & "<br>" & _
              Sheets("Macro").Range("B4").Value & "<br>"
    StrBody2 = Sheets("Macro").Range("B6").Value & "<br><br>" & _
    "<img src='C:Usersleonardogranja-mtzDocumentsAssinatura.png'>"

for each celly in Sheets("Macro").Range("F5:F11")

  if celly<>0 Then

    Endereco = Application.WorksheetFunction.VLOOKUP(celly,Sheets("Lista").Range("A1:B10"),3,)
    Endereco2 = Application.WorksheetFunction.VLOOKUP(celly,Sheets("Lista").Range("A1:B10"),3,)
    Titulo = "Planilha do " & celly.value

    On Error Resume Next
    With OutMail
        .To = Endereco
        .CC = Endereco2
        .BCC = ""
        .Subject = Titulo
        .HTMLBody = "<FONT FACE=Calibri (Corpo)>" & StrBody & StrBody2
        .Attachment = "C:Usersleonardogranja-mtzDocuments" & celly.offset(0,1).value
        .Display
    End With
    On Error GoTo 0

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing

  End if

Next celly

End Sub

Abraços.

Se a resposta lhe foi útil, clique no joinha!

 
Postado : 23/08/2017 8:36 am
(@leogranja)
Posts: 17
Active Member
Topic starter
 

Boa tarde Skulden,

Obrigado pelo retorno!

Rodei o código e fiquei com as dúvidas abaixo:

Como eu poderia fazer um Offset no valor da celly para aplicar como critério no Procv?

Endereco = Application.WorksheetFunction.VLookup(celly.Offset(0, 1).Value, Sheets("Lista").Range("A1:B10"), 3, 0)

Tentei criar uma celly2 para solucionar o erro acima mas está dando erro no objeto:

Dim celly2 as Range
celly2 = celly.Offset(0, 1).Value

Eu gostaria de anexar um arquivo com o nome de celly.Offset(0, 1).Value em .pdf do diretório indicado. Porém, o código abaixo não está funcionando.

.Attachment = "C:Usersleonardogranja-mtzDocuments" & celly.Offset(0, 1).Value & ".pdf"

Muito obrigado!!
Atenciosamente,
Leonardo.

 
Postado : 23/08/2017 10:52 am
(@skulden)
Posts: 170
Estimable Member
 

leogranja

Você pode usar o próprio celly no procv, ele está dando erro porquê você está colocando uma quantidade a mais de colunas do que há no intervalo. O intervalo é de A até B (A1:B10), possue então duas colunas, você está colocando o número 3 no índice de coluna.
tente isso:

Endereco = Application.WorksheetFunction.VLookup(celly.Offset(0, 1).Value, Sheets("Lista").Range("A1:B10"), 2, 0)

Em relação ao pdf, não consigo te ajudar pois acredito que o problema esteja no nome do arquivo ou algo relacionado à sua máquina, a parte do código me aparenta estar certa.

Não se esqueça de clicar no joinha, valeu!

Abraços.

Se a resposta lhe foi útil, clique no joinha!

 
Postado : 23/08/2017 11:09 am
(@leogranja)
Posts: 17
Active Member
Topic starter
 

Boa tarde Skulden,

Obrigado pela ajuda. Estou fechando o tópico e anexando a planilha funcionando.

Atenciosamente,
Leonardo.

 
Postado : 23/08/2017 2:17 pm