Notifications
Clear all

ERRO CODIGO VBA PARA ENVIAR INFORMAÇÕES POR EMAIL VIA EXCEL

7 Posts
4 Usuários
0 Reactions
1,713 Visualizações
(@denilsonsl)
Posts: 84
Trusted Member
Topic starter
 

Bom dia Mestres.

O codigo que esta abaixo não esta funcionando corretamente.

Montei uma linha para copiar uma informações em determinada planilha, mas não esta sendo enviado corretamente, o titulo do email esta correto, mas não esta indo para as pessoas que estão descriminadas, muito menos copia as informações que precisa manda no corpo do email.

Algum pode me dar uma ajuda, que estou perdido completamente nesse codigo.

Sub Envio_Email()

Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.CreateItem(olMailItem)
Set myAttachments = myItem.Attachments
   
ActiveSheet.Range("A1:e33").Select 'seleciona a planilha a ser enviada as informações
   
With myItem  
  
    .To = "celio.carvalho@producao.com.br" 'email recebedor
    .To = "edenilson.lopes@producao.com.br" 'email recebedor
     .To = "faturamento@producao.com.br" 'email recebedor
      .To = "fiscal@producao.com.br" 'email recebedor
       .To = "losgistica@producao.com.br" 'email recebedor

    .Subject = "REMESSA INDUSTRILAIZAÇÃO" 'titulo do email

    .body = "Por gentileza transferir da Embalagem para Produção e em seguida emitir NF de remessa para industrialização da Produção para Embalagem os seguintes itens:" 'Mensagem do corpo do email

    .body = Plan19.Range("A1:E33").Copy 'copia informações da planilha e cola no corpo do email

    .body = "ATT, EDENILSON LOPES" 'Assinatura do email, que precisaria ser colocado abaixo das informações que fora copiado da planilha

    .Send

End With

End Sub
 
Postado : 13/01/2016 5:10 am
(@robo8268)
Posts: 73
Trusted Member
 

denilsonsl, qual erro o código está apresentando...?
Tem uma planilha de exemplo?

A minha sugestão é o seguinte:

With Mensagem
         .to = ".To = "celio.carvalho@producao.com.br"
        .CC = "edenilson.lopes@producao.com.br;faturamento@producao.com.br;fiscal@producao.com.br;losgistica@producao.com.br"
        .BCC = ""
        .Subject = " "Por gentileza transferir da Embalagem para Produção e em seguida emitir NF de remessa para industrialização da Produção para Embalagem os seguintes   itens:" & vbcrlf & Plan19.Range("A1:E33").Value
        .Display
End With
 
Postado : 13/01/2016 10:37 am
(@denilsonsl)
Posts: 84
Trusted Member
Topic starter
 

Na realidade, o erro que esta dando é que o codigo não esta copiando o conteúdo da planilha e colando no corpo do emil, segue o codigo:

Sub Envio_Email()

Application.ScreenUpdating = False

Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.CreateItem(olMailItem)
Set myAttachments = myItem.Attachments
Dim vbcrlf As Integer
  
'Range("A1:E33").Copy Destination:=Plan19.Range("A1")

With myItem
     
    .to = "celio.carvalho@producao.com.br" 'email recebedor
    .cc = "edenilson.lopes@producao.com.br;faturamento@producao.com.br;fiscal@producao.com.br;losgistica@producao.com.br"
    .Subject = "REMESSA INDUSTRILAIZAÇÃO" 'titulo do email
    .body = "Por gentileza transferir da Embalagem para Produção e em seguida emitir NF de remessa para industrialização da Arpeco para Embalagem os seguintes itens:"
    vbcrlf = Plan19.Range("A1:E33").Copy
    .Display
    .send

End With

Application.ScreenUpdating = True

End Sub

Esta fazendo todas as outras operações, somente copiar o conteúdo que está funcionando.

Segue em anexo a planilha....

 
Postado : 13/01/2016 12:58 pm
Trindade
(@trindade)
Posts: 278
Reputable Member
 

Boa tarde, denilsonsl.

Segue código alterado que cola o intervalo no corpo do e-mail:
Tem uma função que realiza a seleção e depois transporta para o corpo do e-mail
Espero que ajude

Sub Botão3_Clique()

Application.ScreenUpdating = False

Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.CreateItem(olMailItem)
Set myAttachments = myItem.Attachments
Dim vbcrlf As Integer
Dim rng As Range
  
'Range("A1:E33").Copy Destination:=Plan19.Range("A1")

Set rng = Nothing
    On Error Resume Next
    'Somente as células visíveis na selecção
    'Set rng = Selection.SpecialCells(xlCellTypeVisible)
    'Você também pode usar um intervalo fixo se você quiser
    Set rng = Sheets("REMESSA E COBRANÇA").Range("A1:E33").SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If rng Is Nothing Then
        MsgBox "The selection is not a range or the sheet is protected" & _
               vbNewLine & "please correct and try again.", vbOKOnly
        Exit Sub
    End If

With myItem
     
    .to = "celio.carvalho@cocelpa.com.br" 'email recebedor
    .cc = "edenilson.lopes@cocelpa.com.br;faturamento@producao.com.br;fiscal@producao.com.br;losgistica@producao.com.br"
    .Subject = "REMESSA INDUSTRILAIZAÇÃO" 'titulo do email
    .body = "Por gentileza transferir da Embalagem para Produção e em seguida emitir NF de remessa para industrialização da Arpeco para Embalagem os seguintes itens:"
    vbcrlf = Plan19.Range("A1:E33").Copy
    .HTMLBody = RangetoHTML(rng)
    .Display
    '.send

End With

Application.ScreenUpdating = True

End Sub

Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2016
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook

    TempFile = Environ$("temp") & "" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

    'Copy the range and create a new workbook to past the data in
    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With

    'Publish the sheet to a htm file
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With

    'Read all data from the htm file into RangetoHTML
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.readall
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")

    'Close TempWB
    TempWB.Close savechanges:=False

    'Delete the htm file we used in this function
    Kill TempFile

    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function

Créditos: http://www.rondebruin.nl/win/s1/outlook/bmail2.htm

Realize teste e nos de um retorno, por gentileza.

Se a resposta foi útil! Clique na mãozinha ao lado do botão Citar.
Sua dúvida foi respondida? Marque como RESOLVIDO em seus tópicos, usando o botão com marca verde.

 
Postado : 13/01/2016 1:56 pm
(@denilsonsl)
Posts: 84
Trusted Member
Topic starter
 

Boa noite Trindade.

Me ajude nesse codigo abaixo, estou tentando deixar-lo mais simples possivel, mas esta dando erro, ja não sei em que parte esta errado:

Sub Envio_Email()

Application.ScreenUpdating = False

Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.CreateItem(olMailItem)
Set myAttachments = myItem.Attachments
Dim corpo As String

corpo = Plan19.Range("A1:E33").Copy

With myItem

.to = "celio.carvalho@producao.com.br" 'email recebedor
.cc = "edenilson.lopes@producao.com.br;faturamento@producao.com.br;fiscal@producao.com.br;losgistica@producao.com.br"
.Subject = "REMESSA INDUSTRIALIZAÇÃO" 'titulo do email
.body = "Por gentileza transferir da Embalagem para Produção e em seguida emitir NF de remessa para industrialização da Arpeco para Embalagem os seguintes itens:"

.body = corpo 'precisa ficar abaixo da mensagem acima

'''''aqui preciso que seja implantado no corpo do email a assinatura

.Display

    
End With

end sub

O codigo que mando no forum, achei muito complicado, gostaria de simplifica-lo ao maximo...

 
Postado : 13/01/2016 7:42 pm
(@mprudencio)
Posts: 2749
Famed Member
 

O que interessa é o codigo ser simples ou funcionar?

Eu fico com a segunda opção

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 13/01/2016 7:49 pm
Trindade
(@trindade)
Posts: 278
Reputable Member
 

Boa noite Trindade.

Me ajude nesse codigo abaixo, estou tentando deixar-lo mais simples possivel, mas esta dando erro, ja não sei em que parte esta errado:

Sub Envio_Email()

Application.ScreenUpdating = False

Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.CreateItem(olMailItem)
Set myAttachments = myItem.Attachments
Dim corpo As String

corpo = Plan19.Range("A1:E33").Copy

With myItem

.to = "celio.carvalho@producao.com.br" 'email recebedor
.cc = "edenilson.lopes@producao.com.br;faturamento@producao.com.br;fiscal@producao.com.br;losgistica@producao.com.br"
.Subject = "REMESSA INDUSTRIALIZAÇÃO" 'titulo do email
.body = "Por gentileza transferir da Embalagem para Produção e em seguida emitir NF de remessa para industrialização da Arpeco para Embalagem os seguintes itens:"

.body = corpo 'precisa ficar abaixo da mensagem acima

'''''aqui preciso que seja implantado no corpo do email a assinatura

.Display

End With

end sub

O codigo que mando no forum, achei muito complicado, gostaria de simplifica-lo ao maximo...

denilsonsl,

O que foi feito em seu código, foi adaptar para atender sua necessidade, eu deixei um link na resposta anterior, não sei se chegou a olhar o link, mas tem inúmeras exemplos utilizando o outlook, e o que chegou mais perto foi adaptação que fiz.
Não sei dizer se existe uma forma mais simples de fazer o que deseja, mas sei dizer que o código postado acima esta bastante funcional

Para inserir o mensagem fica assim

.HTMLBody = "Por gentileza transferir da Embalagem para Produção e em seguida emitir NF de remessa para industrialização da Arpeco para Embalagem os seguintes itens:" & vbcrlf & RangetoHTML(rng)

Se a resposta foi útil! Clique na mãozinha ao lado do botão Citar.
Sua dúvida foi respondida? Marque como RESOLVIDO em seus tópicos, usando o botão com marca verde.

 
Postado : 13/01/2016 9:56 pm