Notifications
Clear all

Enviar email via excel com uma condição

7 Posts
2 Usuários
0 Reactions
1,730 Visualizações
(@brunouchoa)
Posts: 9
Active Member
Topic starter
 

Boa tarde,

Tenho esse Código que envia os emails de forma automática assim que é aberta, porem eu preciso que ela verifique primeiro o status da coluna " " e se esta condição estiver como "A vencer" ou "Vencido", ai depois de verificar ele dispara o email. Alguem pode me ajudar??

Public WrkB                As Workbook                      'Cria variavel da Pasta de Trabalho
Public WrkS                As Worksheet                     'Cria variavel da Planilha

Public IntervaloMailing    As Range                         'Cria Variavel com o Intervalo do Mailing
Public Celula              As Range                         'Cria Variavel com o registro do Mailing


Public AppOutk As Outlook.Application                        'Cria Variavel com a Aplicacao do Outlook
Public MailOutk As Outlook.MailItem                          'Cria Variavel com o objeto "Email" do Outlook

Public Sub MandarEmail()

Set WrkB = ThisWorkbook                                      'Define a pasta de Trabalho
Set WrkS = WrkB.Sheets("Mailing")                            'Define a Planilha com os dados

Set IntervaloMailing = WrkS.Range("TabelaMailing")           'Define qual o intervalo do Mailing

With WrkS
    
    .Select
        For Each Celula In IntervaloMailing
            Call CriaEmail                                        'Chama a Rotina para Criar o Email
        Next
        
    
End With

End Sub

Sub CriaEmail()

Set AppOutk = New Outlook.Application                          'Define a aplicação do Outlook
Set MailOutk = AppOutk.CreateItem(olMailItem)                  'Define o objeto "Email" da Aplicação Outlook

With MailOutk
    .Display
    .To = WrkS.Cells(Celula.Row, 6).Value                   'Coluna Para
    .CC = WrkS.Cells(Celula.Row, 4).Value                   'Coluna Com Cópia
    .BCC = ""                                               'Coluna Copia Oculta
    .Subject = "Certidão, Licença ou Regime, A vencer ou Vencido"              'Coluna Assunto
    .Body = WrkS.Cells(Celula.Row, 8).Value                 'Coluna Corpo do Email
    .Importance = olImportanceHigh
    .Display
End With

Set MailOutk = Nothing                                          'Esvazia a variavel
Set AppOutk = Nothing                                           'Esvazia a variavel


End Sub

Private Sub Workbook_Open()

Call MandarEmail

End Sub
 
Postado : 19/01/2017 12:52 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

BrunoUchôa,

Boa tarde!

Esse exemplo envia email de acordo com uma condição. Veja se lhe ajuda em algo.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 19/01/2017 2:01 pm
(@brunouchoa)
Posts: 9
Active Member
Topic starter
 

Bom dia,

Wag obrigado pela ajuda, porem ainda estou com dificuldades, o Excel esta fazendo a comparação se esta com a data >3 dias para o vencimento quando abre, isso esta ocorrendo corretamente, o que não esta dando certo é que quando ele seleciona os dados na parte "To: " "CC" e "Body" ele só puxa os dados da linha 1, não esta lendo os dados de acordo com as colunas, como vai ser uma base de dados muito grande, preciso q ele leia se esta >3 dias e dispare contra todas as linhas, coletando os dados das colunas. Consegue me ajudar?

Public WrkB                As Workbook                      'Cria variavel da Pasta de Trabalho
Public WrkS                As Worksheet                     'Cria variavel da Planilha

Public IntervaloMailing    As Range                         'Cria Variavel com o Intervalo do Mailing
Public Celula              As Range                         'Cria Variavel com o registro do Mailing


Public AppOutk As Outlook.Application                        'Cria Variavel com a Aplicacao do Outlook
Public MailOutk As Outlook.MailItem                          'Cria Variavel com o objeto "Email" do Outlook

Public Sub MandarEmail()

Set WrkB = ThisWorkbook                                      'Define a pasta de Trabalho
Set WrkS = WrkB.Sheets("Mailing")                            'Define a Planilha com os dados

Set IntervaloMailing = WrkS.Range("TabelaMailing")           'Define qual o intervalo do Mailing

With WrkS
    Dim i As Long
    Dim UltimaLinha As Long
    UltimaLinha = Sheets("Mailing").Cells(Cells.Rows.Count, 1).End(xlUp).Row
            For i = 2 To UltimaLinha
            If Sheets("Mailing").Range("I" & i).Value <= 3 Then
                Call CriaEmail
            End If
        Next
End With

End Sub

Sub CriaEmail()

Set AppOutk = New Outlook.Application                          'Define a aplicação do Outlook
Set MailOutk = AppOutk.CreateItem(olMailItem)                  'Define o objeto "Email" da Aplicação Outlook

With MailOutk
    .Display
    .To = WrkS.Cells(Celula.Row, 6).Value                   'Coluna Para
    .CC = WrkS.Cells(Celula.Row, 4).Value                   'Coluna Com Cópia
    .BCC = ""                                               'Coluna Copia Oculta
    .Subject = "Certidão, Licença ou Regime A Vencer ou Vencido"              'Coluna Assunto
    .Body = WrkS.Cells(Celula.Row, 8).Value                 'Coluna Corpo do Email
    .Importance = olImportanceHigh
    .Display
End With

Set MailOutk = Nothing                                          'Esvazia a variavel
Set AppOutk = Nothing                                           'Esvazia a variavel


End Sub

Private Sub Workbook_Open()

Call MandarEmail

End Sub
 
Postado : 20/01/2017 9:32 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Bruno,

Bom dia!

Não estou com muito tempo para fazer testes, todavia, numa rápida olhada, vi que essa parte da procedure CriaEmail, se refere a "Celula.Row". Como o VBA vai percorrer todas as linhas da planilha, para enviar todas as mensagens necessárias, se não há uma iteração das linhas? Onde está o contador que faz as linhas serem varridas uma a uma?

    .To = WrkS.Cells(Celula.Row, 6).Value                   'Coluna Para
    .CC = WrkS.Cells(Celula.Row, 4).Value                   'Coluna Com Cópia
    .Body = WrkS.Cells(Celula.Row, 8).Value                 'Coluna Corpo do Email

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 20/01/2017 9:53 am
(@brunouchoa)
Posts: 9
Active Member
Topic starter
 

Boa tarde,

Wagner e como faço isso, não entendo muito de VBA e só esta faltando este detalhe para o projeto funcionar. Me ajuda ai.

 
Postado : 20/01/2017 1:15 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

BrunoUchôa,

Ok. Desculpe. É que imaginei, da forma que você colocou, que já estava tudo funcionando e que você sabia o que estava fazendo.

Já conserte e testei. Está tudo OK.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 20/01/2017 1:50 pm
(@brunouchoa)
Posts: 9
Active Member
Topic starter
 

Boa tarde,

Muito bom Wagner, deu tudo certo. Vocês são f.... Valeu abraço.

 
Postado : 20/01/2017 2:24 pm