none
Excel enviar e-mail automático. RRS feed

  • 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

    quarta-feira, 29 de maio de 2013 19:59

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

    quarta-feira, 29 de maio de 2013 21:53
    Moderador

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

    quarta-feira, 29 de maio de 2013 21:53
    Moderador
  • 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
    sexta-feira, 18 de julho de 2014 16:30
  • "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

    sábado, 19 de julho de 2014 18:01
    Moderador
  • Obrigado Filipe...

    Vou tentar fazer dessa forma, talvez consiga fazer de modo a que sirva para o que eu quero! :)

    segunda-feira, 21 de julho de 2014 15:07
  • "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
    quarta-feira, 23 de julho de 2014 08:53
  • 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


    domingo, 27 de julho de 2014 19:48
    Moderador
  • 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

    terça-feira, 29 de julho de 2014 12:52